この戦略は,動的モメント指数 (DMI) をベースに取引する.DMIは,トレンドを決定するために,価格と異なる長さの移動平均間の百分比偏差を測定する.
取引の論理は
長期MA (例えば200日) から価格の百分比偏差を第1DMIとして計算する.
中間MA (例えば50日) の偏差を2番目のDMIとして計算する.
短時間MAS (例えば20日) の偏差を第3DMIとして計算する.
3番目のDMIが1番目のDMIより高いとき,下落.
DMI関係に基づいて生成された取引信号
MA期間の相対強度を動的に比較することで,DMIはトレンドターニングポイントを特定することを目的としています.パラメータは異なるサイクルに最適化できます.
DMIは多期回顧を組み合わせて堅牢性を確保する
相対強度と絶対強度を比較する
市場適応のための柔軟なMAP期間
DMIは遅延があり,逆転を逃す可能性があります
周期パラメータの注意深く最適化
複数の誤った信号を受けやすい
DMIは,マルチMA期間の強度動態を比較することによってターニングポイントを判断する.最適化は異なる市場環境に適している.しかし,遅延の制限は追加のフィルターを必要とする.
/*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")