Esta estratégia usa cruzamento de média móvel e o indicador ATR para implementar a tendência automatizada após a negociação. Ele vai longo quando a EMA rápida cruza acima da EMA lenta e fica curto quando a EMA rápida cruza abaixo da EMA lenta. Ao mesmo tempo, ele usa o indicador ATR para julgar a direção da tendência e só envia sinais de negociação quando a ATR indica que uma tendência está presente.
A estratégia baseia-se principalmente em dois indicadores técnicos:
Linhas EMA: usa duas linhas EMA com parâmetros diferentes, rápida e lenta. Quando a EMA rápida cruza acima da EMA lenta, é considerada um sinal longo. Quando a EMA rápida cruza abaixo da EMA lenta, é considerada um sinal curto.
Indicador ATR: O indicador ATR mede a magnitude e a força das flutuações de preços para julgar a tendência do movimento atual.
Ao combinar os crossovers da EMA para identificar oportunidades de negociação e o filtro ATR para evitar regimes de baixa tendência, a estratégia visa evitar ser esmagada durante a agitação do mercado.
As vantagens desta estratégia incluem:
O ATR é utilizado para determinar a posição do mercado e para determinar a posição do mercado.
Usando uma lógica de cruzamento rápida versus lenta da EMA para identificar sinais de negociação.
A sensibilidade e a suavidade da EMA são personalizáveis através de ajustes de parâmetros.
Completo sistema de negociação automatizado construído com apenas dois indicadores simples, facilmente implementado no editor Pine.
Necessidade mínima de ajuste contínuo dos parâmetros, abordagem "set and forget".
Alguns riscos a ter em conta incluem:
Os crossovers da EMA podem gerar sinais falsos, levando a perdas desnecessárias.
O julgamento da tendência do ATR também pode ser propenso a erros, perdendo oportunidades de negociação.
Os principais acontecimentos noticiosos podem desencadear reversões que os crossovers rápidos da EMA podem perder, exigindo intervenção manual.
Estes riscos podem ser reduzidos através de otimizações.
As principais direcções de otimização incluem:
Adicionar outros indicadores para criar um sistema combinado e melhorar a precisão do sinal.
Seleção dos parâmetros EMA e ATR mais adequados ao mercado em particular com base no símbolo e no prazo negociados.
Implementação de otimização de parâmetros dinâmicos através do aprendizado de máquina para ajustar indicadores com base nas condições atuais do mercado em vez de utilizar valores estáticos fixos.
Em geral, esta é uma tendência muito prática de seguir estratégia. Com apenas uma combinação simples de dois indicadores, ele constrói um sistema de negociação relativamente completo. Através de ajustes de parâmetros, ele pode ser adaptado para os traders com diferentes preferências e estilos. Ao mesmo tempo, a expansão e otimização adicionais podem tornar o desempenho da estratégia ainda melhor. A lógica de negociação simples, mas eficaz, juntamente com forte potencial de otimização, torna esta uma estratégia quantitativa que vale a pena pesquisar e aplicar a longo prazo.
/*backtest start: 2022-12-05 00:00:00 end: 2023-12-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This strategy has been created for GMT trade 4h by Zhukov //@version=5 strategy('ZhukovTrade', overlay=true, calc_on_every_tick=true, currency=currency.USD) // INPUT: // Options to enter fast and slow Exponential Moving Average (EMA) values emaFast = input.int(title='Fast EMA', defval=100, minval=1, maxval=9999) emaSlow = input.int(title='Slow EMA', defval=200, minval=1, maxval=9999) // Option to select trade directions tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Both') // Options that configure the backtest date range startDate = input(title='Start Date', defval=timestamp('01 Jan 2023 00:00')) endDate = input(title='End Date', defval=timestamp('31 Dec 2023 23:59')) // CALCULATIONS: // Use the built-in function to calculate two EMA lines fastEMA = ta.ema(close, emaFast) slowEMA = ta.ema(close, emaSlow) emapos = ta.ema(close,200) // PLOT: // Draw the EMA lines on the chart plot(series=fastEMA, color=color.new(color.orange, 0), linewidth=2) plot(series=slowEMA, color=color.new(color.blue, 0), linewidth=2) plot(series=emapos, color=color.new(color.red, 0), linewidth=2) // CONDITIONS: // Check if the close time of the current bar falls inside the date range inDateRange = true // Translate input into trading conditions longOK = tradeDirection == 'Long' or tradeDirection == 'Both' shortOK = tradeDirection == 'Short' or tradeDirection == 'Both' // Decide if we should go long or short using the built-in functions longCondition = ta.crossover(fastEMA, slowEMA) shortCondition = ta.crossunder(fastEMA, slowEMA) // ORDERS: // Set take profit and stop loss percentages take_profit_percent = input(0, title="Take Profit Percent") stop_loss_percent = input(0, title="Stop Loss Percent") // Submit entry (or reverse) orders atrPeriod = input(12, "ATR Length") factor = input.float(3.0, "Factor", step = 0.01) [supertrend, direction] = ta.supertrend(factor, atrPeriod) bodyMiddle = plot((open + close) / 2, display=display.none) upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr) downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr) fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false) fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false) if longCondition and inDateRange if longOK and direction<0 strategy.entry(id='long', direction=strategy.long, alert_message = "LONG") if shortCondition and inDateRange if shortOK and direction>0 strategy.entry(id='short', direction=strategy.short, alert_message = "SHORT") // Submit exit orders in the cases where we trade only long or only short if strategy.position_size > 0 and take_profit_percent strategy.exit(id='tp long',from_entry ="long",profit = take_profit_percent) if strategy.position_size > 0 and stop_loss_percent strategy.exit(id='sl long',from_entry="long",loss=stop_loss_percent) if strategy.position_size < 0 and stop_loss_percent strategy.exit(id='sl short',from_entry="short",loss=stop_loss_percent) if strategy.position_size < 0 and take_profit_percent strategy.exit(id='tp short',from_entry="short",profit = take_profit_percent)