MACDストキャスティックス レンジブレイク戦略

作者: リン・ハーンチャオチャン, 日付: 2023年12月11日 11:48:27
タグ:

img

概要

MACDストーキャスティックスレンジブレークアウト戦略は,MACDおよびストーキャスティックス指標を定量的な取引戦略に組み合わせます. 価格がレンジゾーンを突破すると株価の傾向方向を特定し,ポジションを取ろうとします.

この戦略では,ポジションを取るときは,MACDとストーキャスティックからの信号を考慮してエントリの質を向上させます.また,事前に設定されたストップ・ロストとテイク・プロフィートポイントは,リスクを効果的に制御することができます.

戦略の論理

MACDストキャスティック・レンジ・ブレークアウト戦略は主に以下の原則に基づいています.

  1. MACD指標は,価格動向の方向性と勢いを効果的に特定することができます.
  2. ストキャスト指標は,株の過剰購入または過剰販売状態を特定することができます.
  3. 株価が一定期間変動している場合,前回の範囲を突破した後に重要な方向的な動きが起こる可能性があります.
  4. MACDとストキャスティックの信号を組み合わせることで,間に合ったエントリが可能になり,品質が向上します.

具体的には,この戦略は,DEA線を横切る MACDDIFF線を使用して,上昇傾向または下落傾向のシグナルを決定します.DIFFがDEAを上向きに横切ると,上昇信号を発生し,その逆になります.

一方,ストキャスティックスのK線とD線の交差が,過買い/過売りエリア (デフォルト30と70) の周りに交差すると,取引信号も発生します.

MACDとストキャストが一致する信号を出すと,戦略はポジションを取る.この時点で,大きな価格動きが起こり得る.

入力後,ストップ・ロストとテイク・プロフィートポイントは,単一の取引損失を合理的に制御し,利益をロックするために設定されます.

優位性

MACDストキャスティック・レンジ・ブレイク・ストラテジーには以下の強みがあります.

  1. インディケーターを組み合わせることで信号の質が向上します

    MACDとストカスティックの両方を利用することで 偽の信号をフィルタリングして より良いエントリー品質を可能にします

  2. ブレイク・ムーブとトレンド・トレードを把握する

    この戦略は,範囲の後に重要な脱出動きを捕捉することに特化したものです. これらの動きは大きな傾向があります.

  3. ストップ・ロスト/テイク・プロフィートのメカニズムを最適化することで,リスクを効果的に制御できます

    ストップ・ロスト/テイク・プロフィートロジックは,単一の取引損失を合理的に制限し,利益を適時に固定します.

リスク

慎重に設計されているにもかかわらず,MACDストキャスティックスレンジブレイクストラテジーは,いくつかの固有のリスクを持っています:

  1. 完璧なエントリータイミングが欠けている

    正確なブレイクアウトが起こる前に偽のブレイクアウトが一般的です.不適正なエントリータイミングは,ベストエントリー価格を逃した結果になる可能性があります.

  2. 脱出が失敗した

    十分な準備が進められているが 失敗した脱出は依然として可能で 損失をもたらす.

  3. パラメータの最適化が不適切である

    不適切なパラメータ設定は 戦略のパフォーマンスを 深刻に損なう.

上記のリスクに対処するために,次の最適化策を可決する.

  1. フィルター信号に他の指標を追加する

  2. 正確なブレイクアウトを保証する手動介入

  3. 厳格な多セットパラメータ最適化テスト

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

MACDストキャスティックスレンジブレイクストラテジーのさらなる最適化には余地があります.

  1. 最適な組み合わせを見つけるためにMACDパラメータを最適化

  2. 最適な組み合わせを見つけるためにストーキャスティックパラメータを最適化

  3. 輸入品質を改善するためにKDJ,BOLLなどの他の指標を組み込む

  4. 異なる保持期間をテストし,ストップ・ロスト/テイク・プロフィートを最適化

  5. テスト・クロス・アセットパラメータ差

  6. 自動パラメータ最適化のための機械学習アルゴリズムを導入する

結論

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)

もっと