MACD ロングのみ戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-12 11:02:06
タグ:

img

概要

この戦略は,通貨ペアの長期取引を実施するために,MACD指標とロング&クローズラインに基づいています.MACD指標線がロングラインを横切るとポジションを開き,MACD指標線がクローズラインを下回るとポジションを閉じます.ストップ・ロスの戦略も設定されています.

戦略の論理

この戦略は,MACD指標の高速線と遅い線を使用する.高速線は12日EMAのパラメータを持ち,スローラインは26日EMAのパラメータを有する.両線の違いはMACDヒストグラムである.さらに,9日EMAはシグナルラインとして計算される.MACDヒストグラムが0.04を超えるとロングになり,0.015を下回るとロングポジションを閉じる.また,5%ストップロスは設定されている.

戦略は,まずMACD指標の高速線,スローライン,シグナルラインを計算します.その後,ロングラインは -0.04に設定され,クローズラインは 0.015に設定されます.現在のMACDヒストグラムがロングラインよりも大きい場合は,ロングになります.現在のMACDヒストグラムがクローズラインよりも小さい場合は,ロングポジションを閉じます.さらに,ストップ・ロースラインはエントリー価格の95%に設定されます.

利点分析

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

  1. 高精度で市場動向を判断するためにMACD指標を使用する
  2. 長い,狭い線でダブルフィルター 間違った信号を避ける
  3. ストップ・ロスの戦略はリスクを効果的に制御する
  4. シンプルで明快な論理,理解し実行しやすい
  5. 需要とMACD指標のみ,資源の占有が少ない

リスク分析

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

  1. MACDインジケーターは少し遅れている 短期的な機会を逃すかもしれない
  2. ストップ・ロスの設定は,長期トレンドを追跡するためにあまりにも保守的かもしれません.
  3. パラメータ調節はバックテストをたくさん必要とする,そうでなければオーバーフィッティングが発生する可能性があります
  4. 他のペアでの有効性は不確実です

パラメータを調整したり 他の指標を組み合わせたりといった方法を使って最適化や改善を図ることができます

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

戦略は以下の側面で最適化できます.

  1. より良いパラメータを見つけるために異なるMACDパラメータの組み合わせをテストします.

    異なる長さの高速線,遅い線,信号線は,より適切な組み合わせを見つけるために試みることができます.

  2. 他の指標を試してください.

    RSI,KDのような指標は,非常に異なる結果をもたらす可能性があります.

  3. 長線と近線パラメータを最適化

    より適したパラメータは,繰り返しバックテストによって見つけることができる.

  4. ストップ損失戦略を調整する

    ストップ・ロスをよりダイナミックにするために,トラッキング・ストップを考慮してください.

  5. 異なる通貨ペアでのテスト

    戦略を他のペアに適用し,効果を調べる

結論

結論として,これは全体的に非常にシンプルで直感的な長期取引戦略です.それはMACD指標を使用して市場状況を判断し,偽取引を減らすためのダブルフィルター基準を設定します.リスク制御はストップ損失を通じて設定されています.論理は明確で,リソースの占有は低いです.理解し,実行することは簡単で,推奨に値します.もちろん,パラメータチューニング,指標変更,その他の手段によって改善の余地がまだ多く,戦略をより顕著にするために.


/*backtest
start: 2024-01-04 00:00:00
end: 2024-01-11 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(shorttitle = "GBPJPY MACD", title = "GBPJPY 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.04)
linesell = input(title="Close Long", type=float, defval=0.015)

//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)

もっと