
Esta estratégia, combinada com o uso de indicadores de média móvel ((ADX) e índice de movimento ascendente ((DI +) para determinar a direção e a tendência do mercado, e a utilização de médias móveis rápidas e lentas para determinar a direção e o tempo de negociação, pertence a uma estratégia de negociação de seguimento de tendência. Esta estratégia pode efetivamente capturar os pontos de inflexão da linha média curta e funciona melhor em mercados de baixa volatilidade e tendência.
A lógica central da estratégia é que um sinal de compra é gerado quando a linha + DI quebra a ADX da direção inferior e um sinal de venda é gerado quando a linha + DI quebra a ADX da direção superior. Portanto, a estratégia depende do cruzamento entre os indicadores DI e ADX para determinar a tendência do mercado e o ponto de reversão.
O que é um sinal de compra quando as seguintes condições são cumpridas: 1 , o EMA rápido é maior do que o EMA lento 2 , a linha DI+ atravessa a linha ADX a partir da direção inferior 3o Nível de ADX inferior a 30
O sinal de venda é emitido quando as seguintes condições são cumpridas: 1 ADX acima de 30 2 , + DI linha caiu de cima para baixo ADX linha
A estratégia também adiciona uma lógica de stop loss, que retira todas as posições quando o preço está abaixo do preço de stop loss.
Esta estratégia, combinada com DI, ADX e indicadores de linha média, é eficaz para determinar o ponto de reversão da tendência do mercado. Tem as seguintes vantagens:
A estratégia também apresenta alguns riscos que devem ser lembrados:
Para esses riscos, pode-se melhorar através de métodos como a otimização do ADX e do parâmetro da linha média, o ajuste do nível de stop loss e a combinação de sinais de confirmação de outros indicadores.
A estratégia ainda tem espaço para ser melhorada:
A estratégia de tendência cruzada do ADX é mais estável no geral, e pode capturar com eficácia o espaço de reversão antes da flutuação, mas é necessário ter cuidado para controlar o risco. A melhor receita após o ajuste de risco pode ser obtida por meio de configurações de parâmetros de otimização adicional, regras de entrada e parada rígidas, entre outros.
/*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