Esta estratégia é uma estratégia de negociação quantitativa baseada em cruzamento de média móvel e dinâmica ATR stop loss e take profit. A estratégia usa duas médias móveis simples (SMAs) com períodos diferentes para gerar sinais de negociação, enquanto emprega a Average True Range (ATR) para definir dinamicamente os níveis de stop loss e take profit para melhor controle de risco. Além disso, a estratégia filtra sinais de negociação com base em diferentes sessões de negociação para melhorar sua robustez.
O princípio central desta estratégia é capturar as mudanças nas tendências de preços usando cruzamento de média móvel. Quando a média móvel rápida cruza acima da média móvel lenta, um sinal de compra é gerado; inversamente, quando a média móvel rápida cruza abaixo da média móvel lenta, um sinal de venda é gerado. Simultaneamente, a estratégia usa o ATR para definir dinamicamente os níveis de stop loss e take profit. O nível de take profit é definido no preço de entrada mais 3 vezes o ATR, enquanto o nível de stop loss é definido no preço de entrada menos 1,5 vezes o ATR. Além disso, a estratégia só gera sinais de negociação durante a sessão de negociação europeia para evitar negociações durante períodos de baixa liquidez.
Esta estratégia é uma estratégia simples e fácil de entender que capta as tendências de preços usando cruzamento de médias móveis enquanto controla o risco com ATR. Embora a estratégia tenha certos riscos, ela pode ser melhorada através de otimização de parâmetros, filtragem de sinal e melhorias no gerenciamento de riscos.
/*backtest start: 2024-04-01 00:00:00 end: 2024-04-30 23:59:59 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Enhanced Moving Average Crossover Strategy", overlay=true) // Input parameters fastLength = input(10, title="Fast MA Length") slowLength = input(50, title="Slow MA Length") atrLength = input(14, title="ATR Length") riskPerTrade = input(1, title="Risk Per Trade (%)") / 100 // Time-based conditions isLondonSession = hour >= 8 and hour <= 15 isAsianSession = hour >= 0 and hour <= 7 isEuropeanSession = hour >= 7 and hour <= 14 // Moving Averages fastMA = ta.sma(close, fastLength) slowMA = ta.sma(close, slowLength) // Average True Range (ATR) for dynamic stop loss and take profit atr = ta.atr(atrLength) // Buy and Sell Conditions buySignal = ta.crossover(fastMA, slowMA) sellSignal = ta.crossunder(fastMA, slowMA) // Dynamic stop loss and take profit stopLoss = close - atr * 1.5 takeProfit = close + atr * 3 // Strategy Logic if (buySignal and isEuropeanSession) strategy.entry("Buy", strategy.long) strategy.exit("Take Profit/Stop Loss", "Buy", limit=takeProfit, stop=stopLoss) if (sellSignal and isEuropeanSession) strategy.entry("Sell", strategy.short) strategy.exit("Take Profit/Stop Loss", "Sell", limit=takeProfit, stop=stopLoss) // Plotting plot(fastMA, color=color.blue, title="Fast MA") plot(slowMA, color=color.red, title="Slow MA") plotshape(series=buySignal, location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=sellSignal, location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")