Strategi Perdagangan Osilator Momentum Dinamis didasarkan pada indikator Dinamo yang diusulkan oleh E. Marshall Wall dalam sebuah artikel yang diterbitkan dalam majalah Futures pada Juli 1996.
Strategi ini pertama-tama menghitung 10 hari Stochastic Oscillator, kemudian menghitung rata-rata bergerak sederhana 10 hari, dan selanjutnya menghitung rata-rata bergerak 20 hari berdasarkan itu.
Keuntungan utama dari strategi ini adalah:
Risiko utama dari strategi ini adalah:
Strategi dapat dioptimalkan dalam aspek berikut:
Uji data dari pasar yang berbeda untuk menemukan kombinasi kontrak dan parameter yang optimal.
/*backtest start: 2023-01-15 00:00:00 end: 2024-01-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 10/04/2017 // In July 1996 Futures magazine, E. Marshall Wall introduces the // Dynamic Momentum Oscillator (Dynamo). Please refer to this article // for interpretation. // The Dynamo oscillator is a normalizing function which adjusts the // values of a standard oscillator for trendiness by taking the difference // between the value of the oscillator and a moving average of the oscillator // and then subtracting that value from the oscillator midpoint. // // You can change long to short in the Input Settings // Please, use it only for learning or paper trading. Do not for real trading //////////////////////////////////////////////////////////// strategy(title="Dynamo", shorttitle="Dynamo") OscLen = input(10, minval=1) MALen = input(20, minval=1) HiBand = input(77, minval=1) LowBand = input(23) reverse = input(false, title="Trade reverse") hline(HiBand, color=red, linestyle=line) hline(LowBand, color=green, linestyle=line) xOscK = stoch(close, high, low, OscLen) xOscAvg = sma(xOscK, OscLen) xMAVal = sma(xOscAvg, MALen) maxNum = 9999999 LowestSoFar = iff(xOscAvg < nz(LowestSoFar[1], maxNum), xOscAvg, nz(LowestSoFar[1], maxNum)) HighestSoFar = iff(xOscAvg > nz(HighestSoFar[1]), xOscAvg, nz(HighestSoFar[1])) MidPnt = (LowestSoFar + HighestSoFar) / 2 nRes = MidPnt - (xMAVal - xOscAvg) pos = iff(nRes > HiBand, 1, iff(nRes < LowBand, -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(nRes, color=blue, title="Dynamo")