
この戦略は,MACD指標に基づいてトレンド追跡取引を実現する.戦略は,MACD指標を使用してトレンドの方向性を認識し,ダイナミックなストップ・ローズと連携して利益をロックする.
快線,慢線およびMACD指標を計算する.快線は12周期指数移動平均を採用し,慢線は26周期指数移動平均を採用する.MACDは快線と慢線の差値である.
買入線と出出線を設定する.MACD上の買入線を穿ったときに買入信号を生成する.MACD下の出出線を穿ったときに出売信号を生成する.
ポジション開設後,動的ストップを設定し,ストップラインを追跡する. ストップラインの初期値は,開設価格の95%,価格がストップラインに移動するにつれて,利益をロックする.
停止または逆転の信号が鳴ったとき,平仓する.
MACD指標は,トレンドの方向を識別し,トレンドを効果的に追跡することができます.
ダイナミック・ストップ・メカニズムは,利益を継続的にロックし,損失の拡大を防ぐことができます.
戦略の論理はシンプルで明快で,容易に理解できる実装で,量化取引の自動実行に適しています.
MACDは後退しており,短期トレンドの反転を逃している可能性がある.
利潤の一部を逃す可能性があり,過度に厳格に早期に止まる可能性があります.
パラメータチューニングの問題,MACDパラメータと買賣線は,継続的にテスト・最適化が必要です.
トレンドの状況では効果が良く,震動の状況では損失のリスクがある.
MACDパラメータを最適化して,最適なパラメータの組み合わせを探します.
ポイントストップ,ATRストップなど,様々なストップ方法をテストする.
フィルタリング条件を追加し,他の指標を利用して誤取引を避ける.例えばブリン帯,RSIなど.
トレンド判断の指標,トレンドと震動の状況の識別,動態調整の戦略パラメータを組み合わせる.
この戦略の全体的な考え方は明確で,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)