MACD ロボット取引戦略


作成日: 2023-12-18 17:30:15 最終変更日: 2023-12-18 17:30:15
コピー: 0 クリック数: 722
1
フォロー
1621
フォロワー

MACD ロボット取引戦略

概要

この戦略はMACDロボット取引戦略と呼ばれています.この戦略は,MACD指標の快線と慢線の関係を計算し,市場での買い買いタイミングを判断し,ストップロスを追跡してリスクを制御します.

戦略原則

この戦略は主にMACD指標に基づいて開発された.MACD指標は,快線が短期平均であり,慢線が長期平均であり,両者の関係が市場の買い物状態を反映している.快線が慢線を横切るときは買い信号,下は売り信号である.

この策略では,快線と慢線はそれぞれEMAアルゴリズムで計算され,周期はカスタマイズできます.信号品質を向上させるために,信号線が加えられ,EMAアルゴリズムでMACD値を再びスムーズに処理します.

購入のタイミングを判断する際には,快速な金叉だけでなく,MACDの絶対値がカスタマイズされた購入ラインより大きいかどうかを判断する必要があります. 満足すると購入シグナルを発信し,トラッキングストップを導入してリスクを制御します.

売るタイミングを判断する際に,快慢線デッドフォークと信号線が正の条件を同時に満たすようにして,売る信号を発し,ポジションを平らにする.

優位分析

この戦略には以下の利点があります.

  1. MACD指数による買い売りタイミングの判断は,信頼性が高い.
  2. 信号線を増やして信号の質を向上させる
  3. ストップ・ロスを追跡し リスクを効果的に制御する
  4. 購入ラインは,カスタマイズ可能な戦略の感度
  5. 条件は全て指標に基づくもので,外部から影響を受けません.

リスク分析

この戦略にはいくつかのリスクがあります.

  1. MACDは遅滞しており,ショートライン操作の機会を逃している可能性があります.
  2. ストップポイントを正しく設定しないことで,不必要な損失を招く可能性があります.
  3. パラメータチューニングはテストと調整に多くの時間を費やします.
  4. 取引コストと滑点の影響

これらのリスクは,パラメータを適切に調整し,他の指標を組み合わせることで軽減できます.

最適化の方向

この戦略は以下の方向から最適化できます.

  1. KDJ,RSIなどの他の指標のフィルター信号と組み合わせる
  2. 機械学習のアルゴリズムを導入し,
  3. 静的停止の代わりに動的停止を採用
  4. MACDパラメータとバイインラインのテスト最適化
  5. 取引コストへの影響を考慮する調整戦略

要約する

この戦略overallは,高い信頼性のトレンド追跡戦略である. MACD指標によってトレンドを判断し,ストップローズコントロールのリスクを追跡し,安定した投資収益を得ることができます.NEXT STEPは,パラメータをさらに最適化し,他の指標を組み合わせ,機械学習などの方法で戦略の収益性を向上させるものです.

ストラテジーソースコード
/*backtest
start: 2022-12-11 00:00:00
end: 2023-12-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(shorttitle = "GBPUSD MACD", title = "GBPUSD 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.00045)
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, signal) and signal > 0
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)