MACD トレンド 戦略をフォローする

作者: リン・ハーンチャオチャン, 日付: 2023-11-16 17:42:09
タグ:

img

概要

この戦略は,MACD指標で取引後のトレンドを実装する.MACDを使用してトレンド方向を特定し,ダイナミックストップロスを使って利益をロックする.

戦略の論理

  1. 速MA,スローMAおよびMACD指標を計算する.速MAは12期EMA,スローMAは26期EMAを使用する.MACDは,速MAとスローMAの違いである.

  2. MACDが買いラインを越えると買い信号を生成し,MACDが売りラインを下回ると売れ信号を生成します.

  3. ポジションを開いた後に動的ストップロスを設定します.初期ストップロスはエントリー価格の95%に設定され,価格が上昇するにつれて上昇します.

  4. ストップ・ロスの起動または逆信号が表示されたとき 閉じる位置

利点分析

  1. 傾向の方向性を特定するためにMACDを使用することで,効果的に傾向を追跡することができます.

  2. ダイナミックストップロスは,利益を継続的に固定し,損失を拡大させないことができます.

  3. 戦略の論理は単純で明確で 簡単に理解し 量子取引の自動化も可能です

リスク分析

  1. MACDは遅延効果があり 短期的なトレンド逆転を見逃す可能性があります

  2. ストップ・ロスは緩すぎると 利益が減り ストップ・ロスは早すぎると 利益が減り

  3. パラメータ調整の問題です MACD パラメータと買い/売りラインは 絶えずテストと最適化が必要です

  4. 市場が動いている場合 損をする可能性があります

オプティマイゼーションの方向性

  1. MACD パラメータを最適化して 最適な組み合わせを見つけます

  2. 固定ポイント,ATRベースのなど,異なるストップ損失方法をテストします.

  3. 誤った信号,例えばボリンジャー帯,RSIなどを避けるために他の指標を使用してフィルター条件を追加します.

  4. トレンド識別ツールと組み合わせ,トレンド対レンジバインド市場に基づいて戦略パラメータを動的に調整します.

概要

この戦略は,トレンドとダイナミックストップロスを追跡し,利益をロックするためのMACDを使用する明確な論理を持っています. 効果的にトレンド市場を追跡することができます. しかし,MACDは遅れの問題があり,ストップロスは最適化する必要があります. 次のステップは,パラメータをさらにテストし,ストップロスのメカニズムを最適化し,他の指標とフィルターを追加し,異なる市場条件にわたって堅牢なものにして,安定性を向上させることです.


/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(shorttitle = "EURUSD MACD", title = "EURUSD MACD")
fastMA = input(title="Fast moving average",  defval = 12, minval = 7)
slowMA = input(title="Slow moving average",  defval = 26, minval = 7)
lastColor = yellow
[currMacd,_,_] = macd(close[0], fastMA, slowMA, 9)
[prevMacd,_,_] = macd(close[1], fastMA, slowMA, 9)
plotColor = currMacd > 0 ? currMacd > prevMacd ? lime : green : currMacd < prevMacd ? maroon : red
plot(currMacd, style = histogram, color = plotColor, linewidth = 3)
plot(0, title = "Zero line", linewidth = 1, color = gray)

//MACD
// Getting inputs
fast_length = input(title="Fast Length",  defval=12)
slow_length = input(title="Slow Length",  defval=26)
src = input(title="Source",  defval=close)
signal_length = input(title="Signal Smoothing",  minval = 1, maxval = 50, defval =9)
sma_source = input(title="Simple MA(Oscillator)", type=bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=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=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)
///END OF MACD

//Long and Close Long Lines
linebuy = input(title="Enter Long", type=float, defval=-0.0002)
linesell = input(title="Close Long", type=float, defval=0.0001)

//Plot Long and Close Long Lines
plot(linebuy,color=green),plot(linesell,color=red)


//Stop Loss Input
sl_inp = input(0.05, title='Stop Loss %', type=float)/100


//Order Conditions
longCond = crossover(currMacd, linebuy)
exitLong = crossover(currMacd, linesell)
stop_level = strategy.position_avg_price * (1 - sl_inp)


//Order Entries
strategy.entry("long", strategy.long,  when=longCond==true)
strategy.close("long", when=exitLong==true)
strategy.exit("Stop Loss", stop=stop_level)

もっと