
Esta estratégia usa a variação percentual do preço para definir a linha de compra e a linha de parada, para construir uma posição de acordo com a quebra da linha de compra e para parar abaixo da linha de parada. Sua principal característica é assumir apenas uma unidade de risco, ou seja, apenas quando uma posição anterior atinge o objetivo de lucro predeterminado.
A estratégia começa com um preço de referência, com 10% desse preço como um intervalo de preço, com a borda superior como uma linha de compra e a borda inferior como uma linha de parada. Quando o preço quebra a linha de compra, compra em quantidade fixa.
Outro ponto-chave da estratégia é assumir apenas uma unidade de risco. Ou seja, apenas quando a posição atual atinge o objetivo de lucro, é colocada uma nova posição. As novas posições também são configuradas de acordo com a nova linha de compra e de parada. Isso limita o risco.
Esta estratégia combina os benefícios do rastreamento de perdas e do gerenciamento de depósitos, permitindo um controle eficaz do risco e simultaneamente um lucro.
A estratégia também apresenta alguns riscos:
Esses riscos podem ser evitados por meio de ajustes de parâmetros, como ajustes no tamanho do intervalo percentual, ajustes nas condições de acréscimo, etc.
A estratégia ainda tem espaço para ser melhorada:
Trata-se de uma estratégia de negociação com percentual. É simples, prático e controla o risco de forma eficaz. Através de ajustes de parâmetros e otimização de modelos, a estratégia pode ser um sistema de rastreamento de tendências confiável, criando excedentes estáveis 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)