
MACD平均線牛熊変換戦略は,MACD指標のDIFFとDEA平均線を計算して,市場トレンドが逆転しているかどうかを判断し,取引シグナルを生成する.DIFF上を通過すると,多行し,DIFF下を通過すると,空行する.この戦略は,価格EMA平均線フィルタリングを組み合わせて,偽の突破を避ける.
この戦略は主にMACD指標のDIFFとDEA平均線に基づいています. MACDは,DIFF,DEAとMACD線で構成された指数移動平均の差値を表しています. DIFF線は,短期EMA平均線と長期EMA平均線の差値を表しています. DEA線は,DIFFのEMA平均線であり,DIFF線信号を検証するために使用されます.
DIFFがDEAを上方突破すると,短期平均線が強くなって市場が多頭進出する.DIFFが下方突破すると,短期平均線が弱くなって市場が空頭進出する.
同時に,戦略は,価格のEMA平均線を組み合わせて偽の突破をフィルターする.DIFFがDEAを上方突破し,価格が上回の多値より低い場合にのみ多値を行う.DIFFがDEAを下方突破し,価格が上回の空調価格より高い場合にのみ空値を行う.
MACD均線牛熊変換戦略は,MACD指標と価格EMA均線を組み合わせ,MACD指標だけで生成される偽信号を避け,取引効果を高めます.この戦略は,市場の傾向が迅速に転換することを判断し,ショートライン操作に適しています.
優位性は主に以下に示されています.
MACDの平均線牛と熊の変換戦略にはいくつかのリスクがあります.
これらのリスクは,主に以下の点で最適化できます.
MACD平均線牛・熊変換戦略は,以下のいくつかの次元から最適化できる.
MACD均線牛熊変換戦略は,DIFF,DEAを交差して市場のステップが多頭と空頭になるタイミングを判断し,価格EMA均線フィルター偽のシグナルと連携して,市場のトレンド転換を迅速に判断する効果を実現している.この戦略は,簡単な明確な取引ロジックで,転換点を迅速に判断し,ショートラインとミドルラインに適している.操作の次のステップは,パラメータの調整,フィルターの強化,取引頻度の制御などから最適化することができ,戦略をより安定させる.
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("macd_strategy",
shorttitle="macd",
overlay=true,
pyramiding=1,
max_bars_back=5000,
calc_on_order_fills = false,
calc_on_every_tick=true,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
commission_type =strategy.commission.percent,
commission_value=0.00075)
[diff, dea, _] = macd(close, 12, 26, 7)
dea_close = ema(diff, 3)
price = ema(close, 9)
plot(price)
cross_over_price = na
cross_over_signal = na
cross_over_price := cross_over_price[1]
cross_over_signal := cross_over_signal[1]
cross_under_price = na
cross_under_signal = na
cross_under_price := cross_under_price[1]
cross_under_signal := cross_under_signal[1]
if (crossover(diff,dea))
cross_over_price := price[1]
cross_over_signal := diff
if (crossunder(diff,dea))
cross_under_price := price[1]
cross_under_signal := diff
if dea > 0
cross_over_price = na
cross_over_signal = na
else
cross_under_price = na
cross_under_signal = na
if diff > 0
if cross_under_price > cross_under_price[1]*1 and cross_under_signal < cross_under_signal[1]*0.95
strategy.entry("S", strategy.short, comment="S")
else
if cross_over_price < cross_over_price[1]*1 and cross_over_signal > cross_over_signal[1]*0.95
strategy.entry("B", strategy.long, comment="B")
// strategy.exit("exit_s", "S", stop = strategy.position_avg_price*1.05, when=strategy.position_size < 0)
// strategy.exit("exit_b", "B", stop = strategy.position_avg_price*0.95, when=strategy.position_size > 0)
strategy.close_all(when=(strategy.position_size < 0 and (dea < 0 or diff > cross_under_signal*1 or crossover(diff, dea)) or (strategy.position_size > 0 and (dea > 0 or diff < cross_over_signal*1 or crossunder(diff, dea)))))