この戦略は,MACD技術指標の二重移動平均クロスオーバーに基づいた自動化された取引戦略である.MACDの信号ラインクロスオーバーを使用して,トレンドフォローのトレンド方向を決定する.
この戦略は,まずMACD指標の3つの線を計算します. 速い線,スローライン,ヒストグラム. 速い線は短い期間におけるより速い移動平均線であり,スローラインは長い期間におけるより遅い移動平均線です. ヒストグラムは,速い線とスローラインの違いです. 速い線がスローラインを越えると,それは購入信号を示す黄金十字信号です. 速い線がスローラインを下に越えると,それは販売信号を示す死亡十字信号です.
この戦略は,この論理を利用して,金色のクロスでロング,死色のクロスでクローズする;または,死色のクロスでショート,金色のクロスでクローズする,トレンドを自動的にフォローする.一方,この戦略は,絶対MACD線が正または負であるかどうかを判断し,誤った信号を回避し,トレンド逆転点を真に把握することを保証します.
リスク軽減
戦略は次の側面から強化される:
KDJ,ボリンジャー帯など他の指標を組み込む 信号を確認し,偽信号をフィルター
入力メカニズムの改善,例えば,早速または遅刻入力を避けるため,ブレイクアウトフィルターを追加する
パラメータ設定を最適化し,異なるタイムフレームと市場体制に基づいて,高速と遅いライン期間を調整します
単一の取引損失を制御するためにストップロスを追加する
外国為替,暗号通貨などの他の製品に拡大
二重移動平均クロスオーバーMACDトレンドフォロー戦略は,シグナルラインクロスオーバーと組み合わせたMACD指標を使用してトレンド方向を決定し,シグナルを効果的にフィルタリングし,自動的なトレンドフォローのためにトレンド逆転を捕捉する.利点は,正確なトレンド判断,柔軟なパラメータチューニング,市場環境に対応している.リスク管理は,誤った信号を避けるために重要です.追加の技術指標とパラメータチューニングによるさらなる最適化は戦略のパフォーマンスを向上させることができます.
/*backtest start: 2023-01-16 00:00:00 end: 2024-01-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © DeMindSET //@version=4 strategy("MACD Trend Follow Strategy", overlay=false) // Getting inputs LSB = input(title="Long/Short", defval="Long only", options=["Long only", "Short only" , "Both"]) fast_length = input(title="Fast Length", type=input.integer, defval=12) slow_length = input(title="Slow Length", type=input.integer, defval=26) src = input(title="Source", type=input.source, defval=close) signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9) sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false) sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false) // Plot colors col_grow_above = #26A69A col_grow_below = #FFCDD2 col_fall_above = #B2DFDB col_fall_below = #EF5350 col_macd = #0094ff col_signal = #ff6a00 // Calculating fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length) slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length) hist = macd - signal plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 ) plot(macd, title="MACD", color=col_macd, transp=0) plot(signal, title="Signal", color=col_signal, transp=0) // Bull= macd > signal Bear= macd < signal ConBull=macd>0 ConBear=macd<0 // Green= Bull and ConBull Red= Bear and ConBear Yellow= Bull and ConBear Blue= Bear and ConBull // bcolor = Green ? color.green : Red ? color.red : Yellow ? color.yellow : Blue ? color.blue : na barcolor(color=bcolor) // === INPUT BACKTEST RANGE === FromYear = input(defval = 2019, title = "From Year", minval = 1920) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2009) ToMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true // create function "within window of time" if LSB == "Long only" and Green strategy.entry("L",true) if LSB == "Long only" and Red strategy.close("L",qty_percent=100,comment="TP Long") if LSB == "Both" and Green strategy.entry("L",true) if LSB == "Both" and Red strategy.entry("S",false) if LSB == "Short only" and Red strategy.entry("S",false) if LSB == "Short only" and Green strategy.close("S",qty_percent=100,comment="TP Short")