この戦略は,動的変動指標 ((DMI)) に基づいて取引する.DMIは,価格が異なる長さの平均線から百分比偏っていることを計算してトレンドを判断する.
取引の論理は以下の通りです.
価格と長期平均線 (例えば200日) の比率偏差を計算し,第1のDMIとして
2番目のDMIとして,価格と中期平均線 (例えば50日) の比率偏差を計算する
価格と短期平均線 (例えば20日) の比率偏差を計算し,第3DMIとして
3DMIが1DMIより高い時,下落する. 3DMIが2DMIより低い時,下落する.
DMI関係による取引シグナル生成
DMIは,異なる平均線周期の相対的な強さを動的に比較することによって,市場トレンドの転換点を判断する.パラメータの最適化は,異なる周期に対応できる.
DMIは,多周期判断を組み合わせて,より包括的
絶対的な数値判断を避けるために,相対的な強さを比較する
市場に対応して柔軟に調整できる周期パラメータ
DMIは後退しており,ターニングを逃す可能性が高い.
周期パラメータは慎重に設定する必要があります.
複数の無効信号が生成される可能性がある
DMI戦略は,平均線周期の比较が多い強弱関係によって転向を判断する.パラメータを最適化することで,異なる市場環境に適応することができる.しかし,遅れがあるため,他の指標を補助して判断する必要がある.
/*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")