
MACDストキャスティクス波段の振動突破戦略 (MACD Stochastics Oscillation Breakout Strategy) は,MACD指標とストキャスティクス指標を組み合わせた量的な取引戦略である.この戦略は,株価のトレンド方向を特定し,価格が振動区間から突破したときにポジションに入ろうとする.
ポジションに入ると,この戦略はMACDとストキャスティクスの両方の指標の信号を同時に考慮して,エントリーの質を向上させる.さらに,この戦略は,リスクを効果的に制御するために,停止損失と停止停止ポイントを事前に設定している.
MACDストキャスティックス波段の振動突破策は,主に以下の原理に基づいています.
具体的には,この策略は,MACD指標のDIFF線とDEA線の交差を価格トレンドの方向を判断する信号として用いる.DIFFが上方DEAを突破すると多頭信号が生成され,逆に空頭信号が生成される.
また,ストキャスティクスのK線がD線と超買超売領域 (デフォルト30と70) の近くで上下交差すると,取引信号も発生する.
MACD指数とストキャスティックス指数が同時に同方向信号を出すとき,この戦略は入場を選択する.このとき,株価は大きな突破をもたらす可能性が高い.
入場後,戦略は合理的な止損ポイントとストップポイントを設定する.合理的なストップポイントは単一損失を効果的に制御し,ストップポイントは利益をロックすることができます.
MACDストキャスティックス波段の振動突破策には以下の利点があります.
この戦略は,MACDとストキャスティックスを同時に利用して,偽信号をフィルターし,エントリの質を向上させます.
戦略は,株価が長期にわたって揺れ動いた後の突破的な動きを捉えるために特別に設計されています.
戦略は,単一の損失を合理的に制御し,利益を間に合わせた時にロックできるように,ストップ・ロストを設定しています.
MACDストキャスティックス波段の揺れ突破策は慎重に設計されているが,リスクは存在する.
株価が突破する前には必ず偽突破が発生する可能性がある.入場タイミングが不適切であれば,この入場を最優秀な入場ポイントを逃してしまう可能性がある.
突破前に十分な準備が整ったにもかかわらず,突破が失敗する可能性は依然として存在します.この場合,損失が生じます.
策略のパラメータ設定は結果に大きな影響を与える.パラメータ設定が間違っていたら,大きな割引を受ける.
このリスクに対して,以下の方法で最適化できます.
他の指標と組み合わせたフィルタリング信号
人工介入により突破口が確保される
多群パラメータ最適化テスト
MACDストキャスティックス波段の揺れ突破戦略は,さらに最適化できる余地があります.
MACDパラメータを最適化して,最適なパラメータの組み合わせを見つける
ストキャスティクスパラメータを最適化して,最適なパラメータの組み合わせを見つける
KDJ,BOLLなどの他の指標の組み合わせを追加し,エントリの質をさらに向上させます.
異なるポジション保持時間をテストし,ストップ・ストップ・ストラトジーを最適化
異なる取引標識のパラメータの差異性をテストする
機械学習アルゴリズムを追加し,パラメータを自動的に最適化
MACDストキャスティックス波段の震動突破戦略は,MACDとストキャスティックスの両指標を総合的に使用し,波段の震動突破時に高品質の入場を順調に行う.同時に,止損策を補助して,リスクを効果的に制御する.この戦略は,株式価格の短期的な傾向状況を把握し,一定の取引優位性を有する.しかし,パラメータ最適化と技術指標のポートフォリオの探索方面にも,さらなる最適化が必要である.
/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="macd stoch strategy", shorttitle="benzo MACD stoch",overlay=true)
// Getting inputs
fast_length = input(title = "Fast Length", defval = 180)
slow_length = input(title = "Slow Length", defval = 390)
src = input(title = "Source", defval = close)
signal_length = input.int(title = "Signal Smoothing", minval = 1, maxval = 500, defval = 135)
sma_source = input.string(title = "Oscillator MA Type", defval = "EMA", options = ["SMA", "EMA"])
sma_signal = input.string(title = "Signal Line MA Type", defval = "EMA", options = ["SMA", "EMA"])
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
// hline(0, "Zero Line", color = color.new(#787B86, 50))
// plot(hist, title = "Histogram", style = plot.style_columns, color = (hist >= 0 ? (hist[1] < hist ? #26A69A : #B2DFDB) : (hist[1] < hist ? #FFCDD2 : #FF5252)))
// plot(macd, title = "MACD", color = #2962FF)
// plot(signal, title = "Signal", color = #FF6D00)
periodK = input.int(14, title="%K Length", minval=1)
smoothK = input.int(1, title="%K Smoothing", minval=1)
periodD = input.int(3, title="%D Smoothing", minval=1)
k = ta.sma(ta.stoch(close, high, low, periodK), smoothK)
d = ta.sma(k, periodD)
// plot(k, title="%K", color=#2962FF)
// plot(d, title="%D", color=#FF6D00)
// h0 = hline(80, "Upper Band", color=#787B86)
// hline(50, "Middle Band", color=color.new(#787B86, 50))
// h1 = hline(20, "Lower Band", color=#787B86)
// fill(h0, h1, color=color.rgb(33, 150, 243, 90), title="Background")
// Make inputs that set the take profit % (optional)
longProfitPerc = input.float(3, title="Long Take Profit (%)", minval=0.0, step=0.1) * 0.01
shortProfitPerc = input.float(3, title="Short Take Profit (%)",minval=0.0, step=0.1) * 0.01
// Calculate trading conditions
enterLong = macd>signal and ta.crossover(k,30)
enterShort = macd<signal and ta.crossunder(k,70)
// Figure out take profit price
longExitPrice = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)
// Plot take profit values for confirmation
plot(strategy.position_size > 0 ? longExitPrice : na,
color=color.green, style=plot.style_circles,
linewidth=3, title="Long Take Profit")
plot(strategy.position_size < 0 ? shortExitPrice : na,
color=color.red, style=plot.style_circles,
linewidth=3, title="Short Take Profit")
// Submit entry orders
if enterLong
strategy.entry("long", strategy.long)
if enterShort
strategy.entry("short", strategy.short)
// STEP 3:
// Submit exit orders based on take profit price
if strategy.position_size > 0
strategy.exit("long TP", limit=longExitPrice)
if strategy.position_size < 0
strategy.exit("short TP", limit=shortExitPrice)