
概要:この戦略は,MACD指標を使用して,複数のタイムフレームで取引信号を生成し,トレンド追跡を実現します.その基本的な考え方は,高周期のタイムフレームでトレンドの方向を確認し,その後,低周期のタイムフレームで特定の入場時間を探ることです.
戦略の原則: この策略は,MACD指標の差離線と信号線の交差を用い,トレンドの方向を判断する.具体的には,高周期時間枠 ((デフォルト60分) でMACD差離線と信号線を計算する.差離線上の信号線を横断すると買入信号が生み出され,下側の信号線を横断すると出売信号が生み出され,全体的なトレンドの方向を確認する.
策略は次に低周期の時間枠 ((現在の周期) でMACDを計算し,差離線と信号線が交差する時に,対応するポジションに入ります.したがって高周期はトレンドの方向を判断するために使用され,低周期は特定の入場点を見つけるために使用されます.
この戦略は,緑色の柱が上昇し,赤色の柱が低下していることを示している柱状図の色の変化をトレンドの判断に活用しています.
優位分析:
多時枠設計,高周期はトレンドの方向を決定し,低周期は入場ポイントを探し,体系性が良い.
MACD指標の交差を利用して,買い売りのタイミングを判断し,指標パラメータが最適化され,信号は比較的に信頼できる.
柱状図の色は,現在のトレンドの状態を判断し,複数の検証を形成し,意思決定の正確性を向上させます.
トレンドを自動で追跡し,人工の介入も不要で,感情的な判断の誤りを減らす.
リスク分析:
MACDは長期トレンドの指標であり,短期間に誤った信号が発生し,不必要な損失を招く可能性があります.
多時間枠策は,複数の周期を同時に考慮する必要があり,パラメータの最適化とテストの難しさが大きい.
ストップ・ロスを設定していない戦略は,大きな損失をもたらす可能性があります.
改善する方向:
MACDのパラメータを最適化して,最適なパラメータの組み合わせを探します.
損失の最大限を制限する”止損”の仕組みを増やす.
信号の品質を向上させるため,他の指標に信号フィルタリングを加える必要があるかどうかを評価する.
異なるタイムフレームの組み合わせをテストし,最適なタイムフレームのマッチを見つけます.
結論から言うと この戦略は全体的に体系的に設計され,MACD指標の複数の優位性を組み合わせて,中長期トレンドを効果的に追跡することができる.しかし,ストップロスを設定していないため,短期損失の拡大のリスクを回避することは困難であるため,これはさらなる最適化の方向です.全体的に,この戦略は,その強力なトレンド追跡能力で,定量取引のための高品質の株選択と意思決定の枠組みを提供します.パラメータとモデルを継続的に最適化することにより,利益の余地をさらに拡大し,戦略の安定性を向上させる見込みがあります.
/*backtest
start: 2023-12-12 00:00:00
end: 2024-01-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@author : SudeepBisht
//@version=2
strategy(title="SB_CM_MacD_Ult_MTF", shorttitle="SB_CM_Ult_MacD_MTF")
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 ? aqua : histA_IsDown ? blue : histB_IsDown ? red : histB_IsUp ? maroon :yellow :gray
macd_color = macd_colorChange ? macd_IsAbove ? lime : 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=4)
plot(smd and outSignal ? outSignal : na, title="Signal Line", color=signal_color, style=line ,linewidth=2)
plot(sh and outHist ? outHist : na, title="Histogram", color=plot_color, style=histogram, linewidth=4)
plot(sd and cross(outMacD, outSignal) ? circleYPosition : na, title="Cross", style=circles, linewidth=4, color=macd_color)
// hline(0, '0 Line', linestyle=solid, 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, comment="BBandLE")
if (crossunder(macd_chk, checker))
strategy.entry("BBandSE", strategy.short, comment="BBandSE")