A estratégia de ruptura do ATR de tendência de mel é uma estratégia de ruptura de médio prazo baseada no indicador ATR e nas bandas de Bollinger para geração de sinais de negociação.
A estratégia consiste em três partes principais:
Canal ATR: Calcule a faixa de flutuação dos preços das ações através do indicador ATR e forme um canal para cima e para baixo dentro deste intervalo.
Linha da abelha: tomar a linha média dos preços das ações como linha de base.
Filtragem de tendência: Calcule a tendência de preço através do indicador DMI e defina o ciclo de sinal. Quando pricesig
A lógica específica para a geração de sinais de negociação é:
Sinal longo: pricesig
sinal curto: pricesig
Não há troca em outras situações.
A estratégia também estabelece condições de stop profit e stop loss para controlar os riscos comerciais.
A estratégia de ruptura da ATR da tendência do mel tem as seguintes vantagens:
Usar o indicador ATR para calcular a faixa de flutuação dos preços das ações, que pode capturar dinamicamente as alterações do mercado;
Combinar a linha média para avaliar os laterais dos preços das ações e definir os pontos de negociação de ruptura do canal para evitar perseguir altas e matar baixas;
O indicador DMI é utilizado para determinar a tendência e evitar a negociação contra a tendência, melhorando a taxa de ganho;
Estabelecer condições de stop-profit e stop-loss para controlar o risco do comércio único;
Os parâmetros da estratégia são flexíveis o suficiente para otimizar a estratégia ajustando a largura do canal, o ciclo ATR e outros fatores.
A estratégia apresenta também alguns riscos:
A negociação a médio prazo apresenta flutuações relativamente elevadas e riscos elevados.
O cálculo do intervalo do canal ATR pode ser impreciso quando os preços das ações flutuam acentuadamente, o que leva facilmente a transações erradas.
O indicador DMI também pode cometer erros no julgamento da tendência, afetando assim a precisão dos sinais de negociação.
Em resposta aos riscos acima, podem ser ajustados parâmetros como o canal ATR e aumentados os ciclos de sinal para otimização e melhoria.
A estratégia pode ser otimizada nos seguintes aspectos:
Ajustar a largura do canal ATR modificando o atrDivisor para cima ou para baixo para comprimir ou expandir a gama de canais.
Ajustar o parâmetro do ciclo de observação ATR para alterar a sensibilidade do canal às flutuações recentes.
Ajustar o parâmetro do ciclo do sinal de tendência para melhorar a precisão dos julgamentos de tendência de alta e baixa.
Adicionar outros indicadores de verificação multifatorial para melhorar a qualidade do sinal.
Otimizar os algoritmos de stop profit e stop loss para melhorar o controlo do risco.
A estratégia de ruptura da tendência de mel ATR integra a análise da faixa de flutuação de preços e indicadores de julgamento de tendência. Ao mesmo tempo em que captura pontos quentes do mercado, também controla os riscos comerciais. É uma estratégia quantitativa flexível e adaptável. Esta estratégia pode ser continuamente melhorada através do ajuste de parâmetros e otimização de sinal, com amplas perspectivas de aplicação.
/*backtest start: 2023-11-01 00:00:00 end: 2023-11-30 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title="Strategy - Bobo PATR Swing", overlay=true, default_qty_type = strategy.fixed, default_qty_value = 1, initial_capital = 10000) // === STRATEGY RELATED INPUTS AND LOGIC === PivottimeFrame = input(title="Pivot Timeframe", defval="D") ATRSDtimeFrame = input(title="ATR Band Timeframe (Lower timeframe = wider bands)", defval="D") len = input(title="ATR lookback (Lower = bands more responsive to recent price action)", defval=13) myatr = atr(len) dailyatr = request.security(syminfo.tickerid, ATRSDtimeFrame, myatr[1]) atrdiv = input(title="ATR divisor (Lower = wider bands)", type=float, defval=2) pivot0 = (high[1] + low[1] + close[1]) / 3 pivot = request.security(syminfo.tickerid, PivottimeFrame, pivot0) upperband1 = (dailyatr / atrdiv) + pivot lowerband1 = pivot - (dailyatr / atrdiv) middleband = pivot // == TREND CALC === i1=input(2, "Momentum Period", minval=1) //Keep at 2 usually i2=input(20, "Slow Period", minval=1) i3=input(5, "Fast Period", minval=1) i4=input(3, "Smoothing Period", minval=1) i5=input(4, "Signal Period", minval=1) i6=input(50, "Extreme Value", minval=1) hiDif = high - high[1] loDif = low[1] - low uDM = hiDif > loDif and hiDif > 0 ? hiDif : 0 dDM = loDif > hiDif and loDif > 0 ? loDif : 0 ATR = rma(tr(true), i1) DIu = 100 * rma(uDM, i1) / ATR DId = 100 * rma(dDM, i1) / ATR HLM2 = DIu - DId DTI = (100 * ema(ema(ema(HLM2, i2), i3), i4)) / ema(ema(ema(abs(HLM2), i2), i3), i4) signal = ema(DTI, i5) // === RISK MANAGEMENT INPUTS === inpTakeProfit = input(defval = 0, title = "Take Profit (In Market MinTick Value)", minval = 0) inpStopLoss = input(defval = 100, title = "Stop Loss (In Market MinTick Value)", minval = 0) // === RISK MANAGEMENT VALUE PREP === // if an input is less than 1, assuming not wanted so we assign 'na' value to disable it. useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na // === STRATEGY - LONG POSITION EXECUTION === enterLong = (((low<=lowerband1) and (close >lowerband1)) or ((open <= lowerband1) and (close > lowerband1))) and (strategy.opentrades <1) and (atr(3) > atr(50)) and (signal>signal[3]) exitLong = (high > middleband) strategy.entry(id = "Long", long = true, when = enterLong) strategy.close(id = "Long", when = exitLong) // === STRATEGY - SHORT POSITION EXECUTION === enterShort = (((high>=upperband1) and (close < upperband1)) or ((open >= upperband1) and (close < upperband1))) and (strategy.opentrades <1) and (atr(3) > atr(50)) and (signal<signal[3]) exitShort = (low < middleband) strategy.entry(id = "Short", long = false, when = enterShort) strategy.close(id = "Short", when = exitShort) // === STRATEGY RISK MANAGEMENT EXECUTION === strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss) strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss) // === CHART OVERLAY === plot(upperband1, color=#C10C00, linewidth=3) plot(lowerband1, color=#23E019, linewidth=3) plot(middleband, color=#00E2E2, linewidth=3) //plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)