Esta estratégia é negociada com base no Índice de Momento Dinâmico (DMI).
A lógica de negociação é:
Calcular o desvio percentual do preço de uma MA longa (por exemplo, 200 dias) como 1o DMI
Calcular o desvio de uma MA média (por exemplo, de 50 dias) como 2a DMI
Calcular o desvio de uma MA curta (por exemplo, 20 dias) como 3o DMI
Quando o 3o DMI é maior que o 1o DMI, baixa.
Sinais comerciais gerados com base na relação DMI
Comparando a força relativa dinamicamente entre os períodos de MA, o DMI visa identificar pontos de virada da tendência.
O DMI combina uma visão de múltiplos períodos para robustez
Compara a força relativa com os níveis absolutos
Períodos flexíveis de MA para adaptação ao mercado
DMI tem atraso e pode perder reversões
Optimização cuidadosa dos parâmetros do período
Propenso a múltiplos sinais falsos
O DMI julga pontos de virada comparando a dinâmica de força de vários períodos de MA. A otimização pode se adequar a diferentes ambientes de mercado.
/*backtest start: 2023-08-14 00:00:00 end: 2023-09-13 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 31/06/2018 // The related article is copyrighted materialfrom Stocks & Commodities Dec 2009 // My strategy modification. // // You can change long to short in the Input Settings // WARNING: // - For purpose educate only // - This script to change bars colors. //////////////////////////////////////////////////////////// strategy(title="CMOaDisparity Index Backtest") LengthFirst = input(200, minval=1) LengthSecond = input(50, minval=1) LengthThird = input(20, minval=1) ShowFirst = input(type=bool, defval=true) ShowSecond = input(type=bool, defval=true) ShowThird = input(type=bool, defval=true) reverse = input(false, title="Trade reverse") xEMAFirst = ema(close,LengthFirst) xEMASecond = ema(close,LengthSecond) xEMAThird = ema(close,LengthThird) xResFirst = 100 * (close - xEMAFirst) / close xResSecond = 100 * (close - xEMASecond) / close xResThird = 100 * (close - xEMAThird) / close pos = iff(xResThird > xResFirst, -1, iff(xResThird < xResSecond, 1, nz(pos[1], 0))) possig = iff(reverse and pos == 1, -1, iff(reverse and pos == -1, 1, pos)) if (possig == 1) strategy.entry("Long", strategy.long) if (possig == -1) strategy.entry("Short", strategy.short) barcolor(possig == -1 ? red: possig == 1 ? green : blue ) plot(ShowFirst ? xResFirst : na, color=red, title="DIX 1") plot(ShowSecond ? xResSecond : na, color=blue, title="DIX 2") plot(ShowThird ? xResThird : na, color=green, title="DIX 3")