Esta estratégia usa mudanças percentuais de preço para definir linhas de entrada e linhas de stop loss. Ela entra em posições quando os preços atravessam a linha de entrada e sai de posições quando os preços caem abaixo da linha de stop loss. Sua principal característica é que ela assume apenas uma unidade de risco, o que significa que novas posições só serão adicionadas depois que a posição anterior atinge uma meta de lucro pré-estabelecida.
A estratégia primeiro define um preço de referência e usa 10% desse preço como faixa de preços - o limite superior é a linha de entrada e o limite inferior é a linha de stop loss. Quando os preços atravessam a linha de entrada, quantidades fixas serão compradas. Quando os preços caem abaixo da linha de stop loss, as posições serão fechadas. Depois de obter lucros, as linhas de entrada e stop loss serão ajustadas em porcentagem para expandir a faixa de lucro. Isso permite que a estratégia rastreie corridas de tendência.
Outro ponto chave da estratégia é que ela assume apenas uma unidade de risco. Ou seja, novas posições só serão adicionadas depois que a posição atual atingir a meta de lucro. As novas posições também seguirão as novas linhas de entrada e stop loss. Isso limita o risco.
Esta estratégia combina as vantagens das trailing stops e do dimensionamento das posições, permitindo um controlo eficaz do risco, ao mesmo tempo em que é rentável.
Há também alguns riscos:
Estes riscos podem ser evitados ajustando parâmetros como tamanhos de gama, filtros de entrada, etc.
Há espaço para uma maior otimização:
Este é um sistema simples e prático baseado em intervalos percentuais. Através do ajuste de parâmetros e otimização do modelo, esta estratégia pode se tornar uma ferramenta de rastreamento de tendências confiável, gerando um desempenho estável para os investidores.
/*backtest start: 2022-11-16 00:00:00 end: 2023-11-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © HermanBrummer 4 April 2021 strategy ("The Box Percent Strat", shorttitle="The Box", overlay = true) /// Designed for LONG only on Daily, 2D or 3D Charts /// Uses fixed investment risk amount, meaning you're willing to lose that amount per trade /// Limit buy to not overpay RiskPerTrade = input(10000, "Risk losing this much per trade", tooltip="This calculates how much you will lose based on difference between the entry price and stop loss price") TradeAboveMAFilterPer = input(50, "The System won't trade if price is below this MA") UpBoxSize = (input(10, "Box size in %") * 0.01)+1 // 1.1 == 10% up DnBoxSize = 1-(input(10, "Box size in %") * 0.01) // 0.9 == 10% dn var FirstBar = close > 0 ? close : na var FirstTop = FirstBar * UpBoxSize var FirstBot = FirstBar * DnBoxSize var top = sma(FirstTop, 1) var bot = sma(FirstBot, 1) /// The Box Calcs if high[2] > top top := top * UpBoxSize bot := bot * UpBoxSize if low[1] < bot top := top * DnBoxSize bot := bot * DnBoxSize plot(bot, "Bot", #ff0000) // Green plot(top, "Top", #00ff00) // Red mid = ((top-bot)/2)+bot plot(mid, "Mid", color.gray) TradeAboveMAFilter = sma(close, TradeAboveMAFilterPer) plot(TradeAboveMAFilter, "Trade AboveMAF Filter", color.yellow, 3, style=plot.style_circles) // col = high[1] < top and high >= top ? color.white : na // bgcolor(col) /// Shares RiskRange = close * abs(DnBoxSize - 1) // 0.9 - 1 == 1.10 // 10% abs so you don't get a neg number NB NB Shares = RiskPerTrade / RiskRange //plot(close-RiskRange, "RiskRange", color.fuchsia) Enter = high >= top and close[1] > TradeAboveMAFilter and strategy.opentrades[0] == strategy.opentrades[1] and strategy.opentrades[1] == strategy.opentrades[2] and strategy.opentrades[2] == strategy.opentrades[3] and strategy.opentrades[3] == strategy.opentrades[4] and strategy.opentrades[4] == strategy.opentrades[5] and strategy.opentrades[5] == strategy.opentrades[6] // won't enter if new positon was taken in the last 6 bars // need better code for this. /// Buy & Sell // (new highs) and (Close above moving average filter) and (No new trades were taken receently) if Enter //(high >= top) and (close[1] > TradeAboveMAFilter) and strategy.opentrades[0] == strategy.opentrades[1] strategy.order("En", strategy.long, qty=Shares, limit=top)//, stop=top) //barcolor(strategy.position_size != 0 ? #00ff00 : color.gray) // /// If ONE Position THEN this Stop Because: // if strategy.position_size == 1 // strategy.exit("Ex", "En", stop=bot) /// If it has more than one trad OPEN if strategy.position_size > 0 strategy.exit("Ex", "En", stop=bot[2] ) // puts stop on old bot //plot(strategy.position_avg_price, "Avg Price", color.yellow)