Esta estratégia combina índice de movimento direcional (ADX), indicador direcional mais (DI +) e médias móveis rápidas e lentas para determinar a direção do mercado e período de detenção.
A lógica central desta estratégia é gerar sinais de compra quando a linha +DI cruza acima da linha ADX de baixo para cima, e gerar sinais de venda quando a linha +DI cruza abaixo da linha ADX de cima para baixo. Portanto, esta estratégia depende do cruzamento entre DI e ADX para determinar tendências de mercado e pontos de reversão. Ao mesmo tempo, a relação entre médias rápidas e lentas é usada para determinar a tendência geral do mercado. Os sinais de negociação só serão considerados quando a EMA rápida está acima da EMA lenta.
Especificamente, um sinal de compra será acionado quando estiverem preenchidas as seguintes condições:
Um sinal de venda será acionado quando estiverem preenchidas as seguintes condições:
A estratégia também incorpora uma lógica de stop loss para sair de todas as posições quando o preço cair abaixo do nível de stop loss.
A estratégia combina os indicadores DI, ADX e média móvel para determinar eficazmente as mudanças nas tendências do mercado.
Há alguns riscos a ter em conta com esta estratégia:
Estes riscos podem ser abordados através da otimização dos parâmetros ADX e média móvel, ajustando o nível de stop loss, adicionando filtros para confirmação, etc.
Há espaço para melhorias adicionais:
Em geral, esta estratégia de tendência de cruzamento do ADX é bastante estável, capaz de capturar efetivamente reversões desde o início, mas o controle de risco é crítico.
/*backtest start: 2022-12-01 00:00:00 end: 2023-12-07 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © mohanee //@version=4 //ADX strategy SmoothedTrueRange=0.00 SmoothedDirectionalMovementPlus=0.00 SmoothedDirectionalMovementMinus=0.00 strategy(title="ADX strategy", overlay=false,pyramiding=3, default_qty_type=strategy.fixed, default_qty_value=3, initial_capital=10000, currency=currency.USD) len = input(11, title="ADX Length", minval=1) threshold = input(30, title="threshold", minval=5) fastEma=input(13, title="Fast EMA",minval=1, maxval=50) slowEma=input(55, title="Slow EMA",minval=10, maxval=200) stopLoss =input(8, title="Stop Loss",minval=1) // TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1]))) DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0 DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0 SmoothedTrueRange:= nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus SmoothedDirectionalMovementMinus:= nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100 DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100 DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100 ADX = sma(DX, len) plot(DIPlus, color=color.green, title="DI+") //plot(DIMinus, color=color.red, title="DI-") plot(ADX, color=color.black, title="ADX") hline(threshold, color=color.black, linestyle=hline.style_dashed) fastEmaVal=ema(close,fastEma) slowEmaVal=ema(close,slowEma) //long condition longCondition= ADX < threshold and crossover(DIPlus,ADX) and fastEmaVal > slowEmaVal barcolor(longCondition ? color.yellow: na) strategy.entry(id="ADXLE", long=true, when= longCondition and strategy.position_size<1) barcolor(strategy.position_size>1 ? color.blue: na) bgcolor(strategy.position_size>1 ? color.blue: na) //Add strategy.entry(id="ADXLE", comment="Add", long=true, when= strategy.position_size>1 and close<strategy.position_avg_price and crossover(DIPlus,ADX) ) //calculate stop Loss stopLossVal = strategy.position_avg_price - (strategy.position_avg_price*stopLoss*0.01) strategy.close(id="ADXLE",comment="SL Exit", when=close<stopLossVal) //close all on stop loss //exit condition exitCondition= ADX > threshold and crossunder(DIPlus,ADX) // and fastEmaVal > slowEmaVal strategy.close(id="ADXLE",comment="TPExitAll", qty=strategy.position_size , when= exitCondition) //close all