2つの移動平均の収束傾向を追跡する戦略

作者: リン・ハーンチャオチャン,日付: 2023-12-28 17:24:53
タグ:

img

概要

ダブル・ムービング・平均コンバージェンス・トレンド・トラッキング・ストラテジー (Dual Moving Average Convergence Trend Tracking Strategy) は,価格トレンド方向を決定し,トレンド・トラッキング取引を実施するためにMACD指標と組み合わせて,速い,遅い移動平均がゴールデン・クロス (gold cross) を有するときにロング,デッド・クロス (dead cross) が有するときにショートになる.長期移動平均を使用して偽ブレイクをフィルタリングする.

原則

この戦略は,最初に12日間の高速移動平均,26日間のスロー移動平均,および200日間の超スロー移動平均を計算する.高速移動平均がスロー平均を超えると,金十字が起こり,牛市場を示します.高速がスローの下を通ると,デッドクロスが起こり,熊市場を示します.戦略はゴールデンクロスでロング,デッドクロスでショートになります.

この戦略は,トレンド方向を決定するためにMACDインジケーターも使用する.MACDは,高速線,スローライン,MACDバーで構成されている.高速線がスローラインを横切ると,それは上昇信号であり,下を横切ると,それは下落信号である.偽信号をフィルタリングするために長期移動平均と組み合わせると,高速線がスローラインを壊したときのみ,MACDバーはマイナスから正に変化し,価格が200日MACを超えると,長い信号が起動する.高速線がスローラインを壊したときのみ,MACDバーは正からマイナスに変化し,価格が200日MACを下回ると,短い信号が起動する.

移動平均値システムとMACDインジケーターからの二重確認により 誤ったブレイクを回避し トレンド開始時にエントリーすることを保証できます

利点

  1. 二重確認は 偽のブレイクを回避し トレンド開始時にエントリーすることを保証します

  2. 200日間MAは,市場の変動中に誤った取引をフィルターします.

  3. ストップ損失を最大損失に設定します

  4. MA長さ,ストップ損失レベルなど,異なる製品に適応するためのカスタマイズ可能なパラメータ.

  5. シンプルで明快な論理で 分かりやすく最適化できます

リスク

  1. 短期的な機会を把握できない

  2. 追跡効果はパラメータ設定に依存します 間違ったパラメータは傾向を捉えていません

  3. 誤ったストップ損失設定は,損失を拡大したり,早めに停止したりして,あまりにも緩やかまたは狭すぎることがあります.

  4. 長期保有期間が ある程度の資本圧力を引き起こす

最適化

  1. 最適なパラメータ組み合わせのために MA 長さのパラメータを最適化します.

  2. 補助判断のためにKDJのような他の指標を追加します.

  3. ストップ・ロスのストラテジーを最適化します ストップを絞り,ストップを引くなどです

  4. 製品と時間枠に基づいて MA パラメータを調整する.

  5. 偽信号を避けるために音量フィルターを追加します.

結論

ダブルMA収束トレンド追跡戦略は,複数のMAシステムを計算してトレンド方向を判断し,MACDフィルターを使用する.その利点はシンプルで明確な論理,制御可能なリスク,トレンド追跡に適している.パラメータ最適化,ストップ損失最適化,補助指標を追加することによって改善することができる.推奨されるトレンド追跡戦略.


/*backtest
start: 2022-12-21 00:00:00
end: 2023-12-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Trend Strategy", shorttitle="TSTrend Strategy", overlay=true)


// Trend Strategy
// If the inverse logic is true, the strategy
// goes short. For the worst case there is a
// max intraday equity loss of 50% filter.


// Input
source = input(close)
fastLength = input(12, minval=1, title="MACD fast moving average")
slowLength=input(26,minval=1, title="MACD slow moving average")
signalLength=input(9,minval=1, title="MACD signal line moving average")
veryslowLength=input(200,minval=1, title="Very slow moving average")
switch1=input(true, title="Enable Bar Color?")
switch2=input(true, title="Enable Moving Averages?")
switch3=input(true, title="Enable Background Color?")

// Calculation
fastMA = sma(source, fastLength)
slowMA = sma(source, slowLength)
veryslowMA = sma(source, veryslowLength)
macd = fastMA - slowMA
signal = sma(macd, signalLength)
hist = macd - signal

// Colors
MAtrendcolor = change(veryslowMA) > 0 ? green : red
trendcolor = fastMA > slowMA and change(veryslowMA) > 0 and close > slowMA ? green : fastMA < slowMA and change(veryslowMA) < 0 and close < slowMA ? red : blue
bartrendcolor = close > fastMA and close > slowMA and close > veryslowMA and change(slowMA) > 0 ? green : close < fastMA and close < slowMA and close < veryslowMA and change(slowMA) < 0 ? red : blue
backgroundcolor = slowMA > veryslowMA and crossover(hist, 0) and macd > 0 and fastMA > slowMA and close[slowLength] > veryslowMA ? green : slowMA < veryslowMA and crossunder(hist, 0) and macd < 0 and fastMA < slowMA and close[slowLength] < veryslowMA ? red : na
bgcolor(switch3?backgroundcolor:na,transp=80)
barcolor(switch1?bartrendcolor:na)

// Output
F=plot(switch2?fastMA:na,color=trendcolor)
S=plot(switch2?slowMA:na,color=trendcolor,linewidth=2)
V=plot(switch2?veryslowMA:na,color=MAtrendcolor,linewidth=4)
fill(F,V,color=gray)

// Strategy
buyprice = low
sellprice = high
cancelLong = slowMA < veryslowMA
cancelShort = slowMA > veryslowMA

if (cancelLong)
    strategy.cancel("MACDLE")

if crossover(hist, 0) and macd > 0 and fastMA > slowMA and close[slowLength] > veryslowMA 
    strategy.entry("MACDLE", strategy.long, stop=buyprice, comment="Bullish")

if (cancelShort)
    strategy.cancel("MACDSE")

if crossunder(hist, 0) and macd < 0 and fastMA < slowMA and close[slowLength] < veryslowMA 
    strategy.entry("MACDSE", strategy.short, stop=sellprice, comment="Bearish")

// maxIdLossPcnt = input(50, "Max Intraday Loss(%)", type=float)
// strategy.risk.max_intraday_loss(maxIdLossPcnt, strategy.percent_of_equity)

//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)

もっと