ボリンジャーバンド、RSI、MACD、ストキャスティクスマルチインジケーター融合取引戦略


作成日: 2023-09-28 12:06:39 最終変更日: 2023-09-28 12:06:39
コピー: 0 クリック数: 1712
1
フォロー
1617
フォロワー

概要

この戦略総合は,ブリン帯,RSI,MACD,Stochasticの4つの異なる技術指標を用いて,長短双方向取引を行う.それは,まず,価格がブリン帯通路の外にあるかどうかを判断し,もしそうなら,方向に応じて空白を多めにする.それから,RSIが超買い超売り領域にあるかどうかを判断し,もしそうなら,方向に応じて入場できる.次に,MACDが金叉死叉が発生するか判断し,もしそうなら,方向に応じて入場できる.最後に,ストキャスティックが金叉死叉を生じ,超買い超売り領域にあるかどうかを判断し,もし条件を満たすならば,入場できる.四つ以上の指標が条件を満たす場合,この戦略は,より激進的な加仓方法を採用し,より高い利益を得ます.

原則

この戦略は主にブリン帯,RSI,MACD,およびストキャスティック4つの指標を使用しています.

ブリン帯は,株価の標準差に基づいて計算された上下軌道であり,株価がブリン帯上下軌道を超えると,株価が通常の変動範囲を外していることを示し,空白を多めにすることができる.

RSIは,急速な上昇と急速な低下によってその値を推算し,RSIが30を下回ると超売り,70を下回ると超買いであり,買入シグナルとして使用できます.

MACDは指数平均のDIFFをDEAの差値から引くと,DIFFはDEAを上方突破して金叉の多信号,DIFFはDEAを下方突破して死叉の空信号となります.

ストキャスティックK線とD線の破裂も取引信号として用いられる.K線20未満はオーバーセール,80以上はオーバーバイ,K線上D線を破る多頭信号,下D線を破る空頭信号である.

これらの4つの指標の多重空調信号を総合的に判断することで,入場の成功率を向上させることができる.具体的には,価格がブルインを上回ると多重信号とみなされる;RSIが30を下回ると多重信号とみなされる;MACD金叉が多重信号とみなされる;Stochastic K線がD線とK線を20を下回ると多重信号とみなされる.これらの4つの条件が同時に満たされると,加仓多重策を採る.空調信号の判断も同様で,四つの条件が同時に満たされると加仓空調策を採る.

優位分析

この戦略の最大の利点は,複数の指標を組み合わせて傾向を判断し,単一の指標に比べてより高い精度と勝利率を持つことです.

まず,この戦略はブリン帯の中長期トレンド判断を含む複数の時間帯の指標を統合し,MACD,RSI,およびストキャスティックの短期指標判断を統合し,戦略が複数の時間次元で判断することを可能にし,誤判の可能性を低減した.

第二に,この戦略は,複数の指標が同時に信号を発するときにのみ入場することを保証する複数の指標の確認入場原理を採用している.例えば,ブリン帯,RSI,MACD,およびStochasticの4つの指標がすべて満たさなければならない条件が満たさなければならない場合,加仓の方法で入場する.これは,単一の指標が発生する可能性のある障害を回避する.

さらに,この戦略は,指標の組み合わせを使用し,異なる指標の優位性を相互補完し,勝利率を向上させます.例えば,RSIは,超買いを判断し,ブリン帯は,トレンドの偏移を判断し,MACDは,短期間の変化を検出することができます.これらの指標の組み合わせを使用すると,それぞれの優位性を発揮できます.

最後に,この戦略は,指数信号が確定した場合には,より大きな利益を得ることができる加仓戦略を採用する. 4つの指数信号が確定したときに,加仓方法を採用すると,定量取引よりも大きな利益を得ることができる.

リスク分析

この戦略にはいくつかのリスクがあります.

まず,戦略には複数のパラメータと指標が採用されており,これは戦略の最適化に困難を伴う.調整すべきパラメータが多く,大量の歴史的データで,最適なパラメータの組み合わせを見つけるために反復テストが必要である.

2つ目は,複数の指標を同時にシグナルを発信する戦略に依存していること.これは珍しいことであり,取引頻度が低い可能性があります.長期間にわたって同期シグナルを捉えることができなければ,戦略は弱くなるでしょう.

さらに,加仓戦略は,利益を拡大する一方で,損失を拡大する可能性がある.四つの指標が誤って同期信号を発したときに,加仓を取ることは,大きな損失を引き起こす.

最後に,複数の指標が同時にシグナルを発信することを想定した戦略は,より強い確認性を持つが,指標が散発するときにどのように意思決定をするかを考慮する必要がある.指標が一致しない場合,戦略は定量的な意思決定機構を確立すべきである.

最適化の方向

この戦略は以下の点で最適化できます.

  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")