RSIとボリンガー帯の合併取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-06 10:48:03
タグ:

img

概要

この戦略は,リラティブ・ストラント・インデックス (RSI) とボリンジャー・バンドを組み合わせて,Litecoin (LTC) を買ったり売ったりできる自動化された戦略を実装する.LTC/USD取引対に適しており,Bitfinex仮想通貨取引所で実行されます.

戦略の論理

戦略は主に以下の2つの指標に基づいて取引決定を行う:

  1. 相対強度指数 (RSI):資産が過買いまたは過売れているかどうかを判断するために価格変化の大きさと速度を反映する.20未満のRSIは過売りとみなされ,80以上のRSIは過買いとみなされる.

  2. ボリンジャー帯: 中間線,上帯,下帯の3つの線を含む.中間線はn日間の移動平均線である.上部と下部帯は,過去n日間の価格の中間線 ± 2標準偏差である.上部帯近くの価格は過買い状態を示唆し,下部帯近くの価格は過売り状態を示唆する.

この2つの指標によると,取引規則は以下のとおりです.

購入信号RSI が低域から20を超えると,逆転する可能性がある過売り状態を示します.価格がボリンジャーバンドの下部帯を下回る場合,購入信号が起動します.

シグナルを売りRSIが高値から80を下回ると,逆転する可能性がある過買い状態を示します.価格がボリンジャーバンドの上部帯を超えると,セールシグナルが起動します.

この戦略では,市場過剰購入/過剰販売状態と価格ブレイクの両方を考慮し,取引信号を生成します.

利点

この戦略の主な利点は以下の通りです.

  1. RSIとボリンジャー帯を組み合わせて,市場の状況を包括的に判断し,信頼性の高い信号を生み出します.

  2. RSIは過買い/過売値を示し,ボリンジャー帯は典型的な分布からの価格偏差を示します.両者は互いを補完します.

  3. 価格ブレイクも考慮し,範囲限定市場での誤った信号を避ける.

  4. RSIとボリンジャー帯の時期と値の合理的なパラメータ設定は,指標の失敗を防ぐために最適化に基づいています.

  5. LTC向けに最適化されています. 履歴データバックテストに基づいて性能は良好です. 更に最適化すればさらに改善できます.

リスク

利点はありますが リスクもあります

  1. RSIとボリンジャー帯の両方が,特に異常な市場状況下で失敗し,間違った信号と損失につながる可能性があります.

  2. パラメータ最適化は,歴史的なデータに依存する. 市場体制の重要な変化は,これらのパラメータを無効にし,戦略のパフォーマンスを悪化させる可能性があります.

  3. 2つの指標が使用されているが,レンジ・バインド市場では,損失とチャンスコストを引き起こすウィップソーが発生する可能性がある.

  4. 取引コストは戦略では無視される.高い取引頻度と大きすぎるポジションはコストを通じて利益を急速に侵食する.

上記のリスクを軽減するために,パラメータ調整,より多くの指標,ポジションサイズ,取引頻度制限などの方法が採用できます.

改善 の 方向

戦略を改善するためのいくつかの方向性:

  1. より良い設定のために異なるRSIとボリンジャー帯のパラメータをテストします.

  2. 口座資本に基づくポジションのサイズを決める規則を導入する.

  3. ストップ・ロスを設定するか,または他の指標を使用してストップ・ロスを決定し,最大引き上げを制限するために利益レベルを設定します.

  4. パラメータを調整し,ライブ取引でストップ損失を考慮してください.

  5. 波動性指数やボリュームなどの要素を追加して 多要素モデルを作ります

  6. 戦略パラメータを動的に調整するために,異なるLTC市場体制とサイクルに従って適応メカニズムを設計する.

結論

この戦略は,まずオーバーカップ/オーバーセールレベルを判断し,その後ブレイクアウトと組み合わせて取引信号を生成し,LTCに適しています.しかし,指標の失敗,体制変更,取引コストなどのリスクは注意する必要があります.改善のための多くの方向性があり,さらなる最適化はより良い結果をもたらすことができます.


/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-05 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("LTCUSD BB + RSI 30MIN,", shorttitle="LTCUSD BBRSI 30MIN ", overlay=true)
     
     // Strategy Tester Start Time
sYear = input(2019, title = "Start Year")
sMonth = input(01, title = "Start Month", minval = 01, maxval = 12)
sDay = input(01, title = "Start Day", minval = 01, maxval = 31)
sHour = input(00, title = "Start Hour", minval = 00, maxval = 23)
sMinute = input(00, title = "Start Minute", minval = 00, maxval = 59)
startTime = true


///////////// RSI
RSIlength = input(5,title="RSI Period Length") 
RSIoverSold = input(20, minval=1,title="RSIL")
RSIoverBought = input(80, minval=1,title="RSIh")
price = open
vrsi = rsi(price, RSIlength)


///////////// Bollinger Bands
BBlength = input(60, minval=1,title="Bollinger Period Length")
BBmult = input(2.0, minval=0.001, maxval=50,title="Bb")
BBbasis = sma(price, BBlength)
BBdev = BBmult * stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
buyEntry = crossover(source, BBlower)
sellEntry = crossunder(source, BBupper)
plot(BBbasis, color=aqua,title="Bollinger Bands SMA Basis Line")
p1 = plot(BBupper, color=silver,title="Bollinger Bands Upper Line")
p2 = plot(BBlower, color=silver,title="Bollinger Bands Lower Line")
fill(p1, p2)


///////////// Colors
switch1=input(true, title="Enable Bar Color?")
switch2=input(true, title="Enable Background Color?")
TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? green : na
barcolor(switch1?TrendColor:na)
bgcolor(switch2?TrendColor:na,transp=50)


///////////// RSI + Bollinger Bands Strategy
if (not na(vrsi))

    if (crossover(vrsi, RSIoverSold) and crossover(source, BBlower))
        strategy.entry("RSI_BB_L", strategy.long and startTime, stop=BBlower,  comment="RSI_BB_L")
    else
        strategy.cancel(id="RSI_BB_L")
        
    if (crossunder(vrsi, RSIoverBought) and crossunder(source, BBupper))
        strategy.entry("RSI_BB_S", strategy.short and startTime, stop=BBupper,  comment="RSI_BB_S")
    else
        strategy.cancel(id="RSI_BB_S")

//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)

もっと