ダイナミック・モメント・インデックス戦略

作者: リン・ハーンチャオチャン, 日時: 2023-09-14 16:15:42
タグ:

戦略の論理

この戦略は,動的モメント指数 (DMI) をベースに取引する.DMIは,トレンドを決定するために,価格と異なる長さの移動平均間の百分比偏差を測定する.

取引の論理は

  1. 長期MA (例えば200日) から価格の百分比偏差を第1DMIとして計算する.

  2. 中間MA (例えば50日) の偏差を2番目のDMIとして計算する.

  3. 短時間MAS (例えば20日) の偏差を第3DMIとして計算する.

  4. 3番目のDMIが1番目のDMIより高いとき,下落.

  5. 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")

もっと