MACDストーキャスティックスレンジブレークアウト戦略は,MACDおよびストーキャスティックス指標を定量的な取引戦略に組み合わせます. 価格がレンジゾーンを突破すると株価の傾向方向を特定し,ポジションを取ろうとします.
この戦略では,ポジションを取るときは,MACDとストーキャスティックからの信号を考慮してエントリの質を向上させます.また,事前に設定されたストップ・ロストとテイク・プロフィートポイントは,リスクを効果的に制御することができます.
MACDストキャスティック・レンジ・ブレークアウト戦略は主に以下の原則に基づいています.
具体的には,この戦略は,DEA線を横切る MACDDIFF線を使用して,上昇傾向または下落傾向のシグナルを決定します.DIFFがDEAを上向きに横切ると,上昇信号を発生し,その逆になります.
一方,ストキャスティックス
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)