Bollinger Bands,RSI,MACD,ストカスティックマルチインジケーター・フュージョン・トレーディング戦略

作者: リン・ハーンチャオチャン, 日付: 2023-09-28 12:06:39
タグ:

概要

この戦略は,ボリンジャーバンド,RSI,MACDおよびストーカスティックを4つの異なる技術指標に統合し,長期および短期の決定を下します.まず,価格はボリンジャーバンドチャネルの外にあるかどうかを決定し,それに応じて長期または短期ポジションを取ります.次に,RSIがオーバーバイトまたはオーバーセールゾーンにあるかどうかを確認し,方向性に基づいて入力します.次に,MACDのゴールデンクロスとデスクロス信号を探し,それに応じてポジションを取ります.最後に,オーバーバイト/オーバーセールゾーンでストーカスティックゴールデンクロスとデスクロスを特定します.すべての4つの指標からの信号で,戦略は利益を最大化するためにより積極的なピラミッドポジションを採用します.

原則

この戦略は主に4つの指標 - ボリンジャーバンド,RSI,MACD,ストカスティック - を利用しています

ボリンジャー帯は,単純な移動平均値以上の標準偏差値と以下の値でグラフ化される.帯の外の価格は,価格が通常の分布と取引機会の外に移動したことを示唆する.

RSIは,より高い閉じる値とより低い閉じる値の比率として勢いを計算する.30未満の値は過売り状態を示唆し,70を超える値は過買い状態を示唆する.これらは取引信号として機能する.

MACDは,短期および長期間の移動平均値の差です.MACD線と信号線のクロスオーバーは,取引信号を生成します.長期の黄金のクロスと短期の死亡クロスです.

ストキャスティックKとD線クロスオーバーも取引信号として機能する.K20以下は過売れ,80以上は過買いを示唆する.D上のKクロスオーバーは上昇信号,下のクロスオーバーは下落信号を与える.

これらの4つの指標からのシグナルを組み合わせることで,取引エントリの精度が向上します.特に,価格がボリンジャーバンド上部帯を超えるとロング,RSIが30以下,MACDのゴールデンクロス,ストカスティックKがD以上を20以下に越えるとロングポジションがピラミッド化されます.すべての4つの条件が満たされるとショートシグナルが類似します.

利点

この戦略の主な利点は複数の指標を組み合わせることで 精度と勝利率を高めることです

まず,異なる時間枠の指標 - 中期・長期間のボリンジャー指標,短期間のMACD,RSI,ストカスティック指標 - を使えば 誤りも減少します

2つ目に,すべての指標が一致することを要求することで 誤った信号が減少します.ボリンジャー,RSI,MACD,ストカスティックがすべて信号を出しているときにのみ入力することで,単一の指標の失敗を回避できます.

また,互いを補完する指標を組み合わせることで,それぞれの強みを活用する.RSIは過買い/過売り,ボリンジャートレンドの変化,MACDの動力シフトなどを識別する.

最後に,確認された信号を持つピラミッド型ポジションは,固定量取引に対して利益を最大化します.

リスク

考慮すべきいくつかのリスク:

まず,より多くのパラメータと指標により最適化が難しくなり,最適な組み合わせを見つけるために広範なテストが必要です.

2つ目は,同時インジケーター信号が稀で,取引頻度が低いこと.長期間の調整が欠けていることが戦略の低パフォーマンスを引き起こす.

3つ目,ピラミッド型取引は,指標が誤った信号を出す場合,損失を増幅します.

最後に,不一致な指標信号には意思決定規則が必要です.指標が衝突する場合は戦略は定量的な論理を持つべきです.

改良

戦略を改善する方法:

  1. 遺伝子アルゴリズムやグリッド検索などで 最適な組み合わせを見つけるために パーマータを最適化します

  2. 価格が値を超えて不利な動きをするときに損失を制御するためのストップ・ロスのルールを追加します.

  3. 不一致な指標信号と重量化されたパラメータのスコアシステムによる入力ロジックの改善.

  4. 保持期間中の利益/損失データで退出を最適化して理想的な退出規則を生成する.

  5. 戦略に最も適した製品と時間枠を最適化します

  6. パラメータ最適化における スリップや手数料などの取引コストを考慮します

  7. 機械学習を利用して適応最適化します

結論

この戦略は,意思決定のための複数の指標と確認メカニズムを組み合わせます.適切なパラメータとリスク管理により,良い結果を達成することができます.しかし,安定のための継続的な改善を通じて,調整の複雑性とリスクに対処する必要があります.最適な指標の組み合わせ,科学的エントリー/退出規則,リスク管理を見つけることは,市場条件全体で持続的な収益性の鍵です.


/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("MD strategy", overlay=true)
lengthrsi = input( 14 )
overSold = input( 30 )
overBought = input( 70 )
price = close
source = close
lengthbb = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50)
direction = input(0, title = "Strategy Direction",  minval=-1, maxval=1)
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
consecutiveBarsUp = input(3)
consecutiveBarsDown = input(3)
lengthch = input( minval=1, maxval=1000, defval=5)
upBound = highest(high, lengthch)
downBound = lowest(low, lengthch)
lengthst = input(14, minval=1)
OverBoughtst = input(80)
OverSoldst = input(20)
smoothK = 3
smoothD = 3

k = sma(stoch(close, high, low, lengthst), smoothK)
d = sma(k, smoothD)



ups = price > price[1] ? nz(ups[1]) + 1 : 0
dns = price < price[1] ? nz(dns[1]) + 1 : 0
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD

strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

basis = sma(source, lengthbb)
dev = mult * stdev(source, lengthbb)

upper = basis + dev
lower = basis - dev

vrsi = rsi(price, lengthrsi)

if (not na(vrsi))
    if (crossover(vrsi, overSold))
        strategy.entry("RsiLE", strategy.long, comment="RsiLE")
    if (crossunder(vrsi, overBought))
        strategy.entry("RsiSE", strategy.short, comment="RsiSE")

if (crossover(source, lower))
    strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands",  comment="BBandLE")
else
    strategy.cancel(id="BBandLE")

if (crossunder(source, upper))
    strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands",  comment="BBandSE")
else
    strategy.cancel(id="BBandSE")
    
    
if (not na(k) and not na(d))
    if (crossover(k,d) and k < OverSoldst)
        strategy.entry("StochLE", strategy.long, comment="StochLE")
    if (crossunder(k,d) and k > OverBoughtst)
        strategy.entry("StochSE", strategy.short, comment="StochSE")   
        
if (crossover(delta, 0))
    strategy.entry("MacdLE", strategy.long, comment="MacdLE")

if (crossunder(delta, 0))
    strategy.entry("MacdSE", strategy.short, comment="MacdSE")


もっと