シグナル戦略とMACDクロスオーバー

作者: リン・ハーンチャオチャン, 日付: 2023-12-13 16:58:15
タグ:

img

概要

MACDクロスオーバーとシグナル戦略は,MACDがシグナルラインの上または下を横切ると取引信号を生成する.この戦略は,典型的なトレーリングストップ損失戦略に属する,株価の中期トレンドのターニングポイントを把握するために,ダブル移動平均のアイデアを組み合わせます.

戦略原則

この戦略は,まず,高速移動平均線fastMAとスロームービング平均線slowMAを計算する.高速移動平均線パラメータは12日であり,スロームービング平均パラメータは26日である.その後,MACDを形成するために2つの移動平均線間の差を計算する.その後,シグナルラインを得るためにMACDの9日移動平均線を計算する.MACDが信号ラインの上または下を横断すると取引信号が生成される.

この戦略の利点は,株価の中期トレンドの転換点を把握することである.高速と遅い移動平均の組み合わせは,短期間の価格変動とノイズをフィルタリングし,中期的な価格トレンドを把握することができる.株価が中期的な逆転を経験すると,MACDは信号線を突破し,比較的明確な取引信号を生成する.

利点分析

MACDクロスオーバーとシグナル戦略は,短期間のノイズをフィルタリングし,長期および中期トレンドのターニングポイントのみを把握するために,ダブル移動平均のアイデアを組み合わせます.単一の価格指標と比較して,偽信号を少なく生成することができます.

MACD自体はより敏感であり,価格傾向の変化に敏感に対応することができる.信号線を追加することで,より短期間の誤った信号をフィルタリングすることができます.中期トレンドが大幅に変化し,MACDが信号ラインを上下に突破した場合のみ,信号が生成されます.

持続的な上昇傾向では,MACDはほとんどの時間をシグナルライン上に維持し,その過程で複数の機会を捉えることができます.同様に,持続的なダウントレンドでは,MACDはまた,長い/短いパターンを維持し,短信号を間に合うようにすることができます.

リスク分析

戦略の買い・売り信号は,移動平均値のクロスオーバーに完全に依存しているため,市場が大きく変動した場合,より多くの誤った信号が生成され,頻繁にストップ・ロスは発生する.戦略の実際の利益と損失は期待に応えていない可能性があります.

シグナルラインを突破することは,中期トレンドが変化したことを必ずしも保証するものではありません. 購入信号として単一の技術指標だけに頼ることは,一定の盲点があり,タイミングが十分に正確ではない可能性があります.

絶えず変化する市場において,二重移動平均値のクロスオーバーのみを値として使用すると,より多くの取引機会を逃す可能性があります.より複雑な強い傾向では,この戦略も大幅に遅れることになります.

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

  1. 流動性および波動性フィルタリング指標を追加し,開設頻度を削減し,非効率な取引を回避します.取引量を追加し,移動平均パラメータを動的に調整するなど.

  2. 他の複数の技術指標を組み合わせて指標ポートフォリオを形成し,信号品質を改善する.短期指標と中長期指標の組み合わせにより,市場の構造をより包括的に判断することができます.

  3. 機械学習アルゴリズムを追加して パラメータと注意の限界を訓練し 現在の市場環境に適した 人間の介入を減らします

  4. VIXと他の恐怖指標を組み合わせて市場動向と変動を予測し,MACDの機会をより良く利用するためにパラメータを動的に調整します.

結論

MACDクロスオーバーとシグナル戦略は,二重移動平均クロスオーバーの原則を用いて取引信号を生成する. 価格グラフを高速移動平均値と遅移動平均値の違いによって描くと,中期価格傾向の変化は明らかな特徴を持つ. 信号線を追加すると,いくつかの騒々しい信号も効果的にフィルタリングされる. この戦略は,比較的明確な中期トレンド逆転を捕捉するいくつかの利点があります. しかし,MACDと信号線のクロスオーバーは,市場の構造の根本的な変化を完全に決定することはできません. 取引信号は慎重に扱わなければなりません. 他の技術指標と組み合わせて使用することが推奨され,機械学習最適化も検討できます.


/*backtest
start: 2022-12-06 00:00:00
end: 2023-12-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@author : SudeepBisht
//@version=2
strategy(title="MACD with Signal", shorttitle="MACD_with_Signal")
source = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
resCustom = input(title="Use Different Timeframe? Uncheck Box Above", defval="60")
smd = input(true, title="Show MacD & Signal Line? Also Turn Off Dots Below")
sd = input(true, title="Show Dots When MacD Crosses Signal Line?")
sh = input(true, title="Show Histogram?")
macd_colorChange = input(true,title="Change MacD Line Color-Signal Line Cross?")
hist_colorChange = input(true,title="MacD Histogram 4 Colors?")

res = useCurrentRes ? timeframe.period : resCustom

fastLength = input(12, minval=1), slowLength=input(26,minval=1)
signalLength=input(9,minval=1)

fastMA = ema(source, fastLength)
slowMA = ema(source, slowLength)

macd = fastMA - slowMA
signal = sma(macd, signalLength)
hist = macd - signal

outMacD = request.security(syminfo.tickerid, res, macd)
outSignal = request.security(syminfo.tickerid, res, signal)
outHist = request.security(syminfo.tickerid, res, hist)

histA_IsUp = outHist > outHist[1] and outHist > 0
histA_IsDown = outHist < outHist[1] and outHist > 0
histB_IsDown = outHist < outHist[1] and outHist <= 0
histB_IsUp = outHist > outHist[1] and outHist <= 0

//MacD Color Definitions
macd_IsAbove = outMacD >= outSignal
macd_IsBelow = outMacD < outSignal

plot_color = hist_colorChange ? histA_IsUp ? green : histA_IsDown ? lime : histB_IsDown ? red : histB_IsUp ? maroon :yellow :gray
macd_color = macd_colorChange ? macd_IsAbove ? green : red : red
signal_color = macd_colorChange ? macd_IsAbove ? yellow : yellow : lime

circleYPosition = outSignal
 
plot(smd and outMacD ? outMacD : na, title="MACD", color=macd_color, linewidth=3)
plot(smd and outSignal ? outSignal : na, title="Signal", color=blue, style=line ,linewidth=1)
plot(sh and outHist ? outHist : na, title="", color=plot_color, style=columns, linewidth=4)
//plot(sd and cross(outMacD, outSignal) ? circleYPosition : na, title="Cross", style=circles, linewidth=4, color=macd_color)
hline(0, '0 Line',  linewidth=2, color=white)

macd_chk=smd and outMacD ? outMacD : na
checker=smd and outSignal ? outSignal : na
if (crossover(macd_chk,checker))
    strategy.entry("BBandLE", strategy.long)

if (crossunder(macd_chk, checker))
    strategy.entry("BBandSE", strategy.short)


もっと