RSIとボリンジャーバンドのデュアル戦略


作成日: 2023-12-12 11:53:49 最終変更日: 2023-12-12 11:53:49
コピー: 0 クリック数: 685
1
フォロー
1621
フォロワー

RSIとボリンジャーバンドのデュアル戦略

概要

この戦略の核心思想は,比較的強い指標 ((RSI) とブルリン带の2つの技術指標を組み合わせて,二重取引信号のフィルタリングを実現し,偽の信号の干渉を最大限に減らし,信号の質を向上させることである.

RSIは,価格がブレーキを突破したり,ブリン帯を下回りさせたりすると,取引の機会が生まれます. それは,市場の変動の統計的特性を考慮し,市場参加者の多空状態にも注目し,総合的な判断の基礎を形成します.

戦略原則

RSIの部分では,2つの異なる周期のRSI指標を同時に観察します. 短い周期は,超買い超売り信号を捕捉するために使用され,長い周期は,トレンドの逆転を確認するために使用されます.

ブリン帯部分では,価格が上下軌道に突破するかどうかについて注目します. ブリン帯を突破すると上下軌道がセールポイントで,下下軌道が買いポイントになります. また,価格がブリン帯を回調するかどうかについても注目します.

RSI信号とブリン帯の信号が同時に表示されると,取引の機会が形成され,取引指示が発せられる.

優位分析

  • 二重指数フィルター,高い信頼性,余剰取引を避ける
  • トレンドと逆転を考慮し,異なる市場段階の機会を把握する
  • パラメータは,必要に応じてパラメータを調整することができます
  • 時間と資金の管理

リスク分析

  • ブリン帯のパラメータが正しく設定されていない場合,偽信号が発生する可能性があります.
  • 市場が急激に波動する極端な状況に対応できない
  • RSIが散らばると誤った信号が出る
  • 異なる品種と周期に対応するためにパラメータを最適化する必要があります

パラメータ最適化,適当なポジションの縮小,人工介入などの方法でリスクを回避し,制御することができる.

最適化の方向

  • RSIのパラメータを調整し,超買超売判断を最適化する
  • ブリン帯域幅の調整,ブリン帯域突破戦略の最適化
  • ポジション管理機構の追加
  • ストップ・ロスの策略を増やす
  • 複数の指標を組み合わせた多要素モデル

要約する

RSIとブリン帯の二重戦略は,2つの指標の優位性を最大限に活用し,高品質の信号を生成し,パラメータの最適化とリスク管理が置かれた前提で,安定した投資収益を得ることができます.より多くの信号とモデルを組み合わせることは,将来の可能性のある方向です.

ストラテジーソースコード
/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Ezieh Str.v2", shorttitle="Ezieh Str.v2", overlay=true, pyramiding=10, currency=currency.USD, slippage=3, commission_type=strategy.commission.cash_per_order, commission_value=0.04, initial_capital=1000)



UseDateFilter  = input(title="Enable Date Filter"         ,type=input.bool    ,defval=false                               ,group="Date & Time" ,tooltip="Turns on/off date filter")
StartDate      = input(title="Start Date Filter"          ,type=input.time    ,defval=timestamp("1 Jan 2000 00:00 +0000") ,group="Date & Time" ,tooltip="Date & time to start excluding trades")
EndDate        = input(title="End Date Filter"            ,type=input.time    ,defval=timestamp("1 Jan 2100 00:00 +0000") ,group="Date & Time" ,tooltip="Date & time to stop excluding trades")
UseTimeFilter  = input(title="Enable Time Session Filter" ,type=input.bool    ,defval=false                               ,group="Date & Time" ,tooltip="Turns on/off time session filter")
TradingSession = input(title="Trading Session"            ,type=input.session ,defval="1000-2200:1234567"                 ,group="Date & Time" ,tooltip="No trades will be taken outside of this range")

In(t)      => na(time(timeframe.period, t)) == false
TimeFilter = (UseTimeFilter and not In(TradingSession)) or not UseTimeFilter
DateFilter = time >= StartDate and time <= EndDate

DateTime = (UseDateFilter ? not DateFilter : true) and (UseTimeFilter ? In(TradingSession) : true) 

///////////// RSI
L_RSI_Length     = input(7  , title="L_Length")
L_RSI_OverSold   = input(45 , title="L_OverSold")
S_RSI_Length     = input(14 , title="S_Length")
S_RSI_OverBought = input(65 , title="S_OverBought")

price = close
Lvrsi = rsi(price, L_RSI_Length)
Svrsi = rsi(price, S_RSI_Length)

///////////// Bollinger Bands
BBlength = input(title="Bollinger Period Length", type=input.integer, defval=100, minval=2)
BBmult = 2.1 // input(2.0, minval=0.001, maxval=50,title="Bollinger Bands Standard Deviation")
BBbasis = sma(price, BBlength)
BBdev = BBmult * stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
plot(BBbasis, color=color.aqua,title="Bollinger Bands SMA Basis Line")
p1 = plot(BBupper, color=color.silver,title="Bollinger Bands Upper Line")
p2 = plot(BBlower, color=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?")



///////////// Condition
LongCondition  = crossover(Lvrsi, L_RSI_OverSold)    and crossover(close  ,BBlower)
ShortCondition = crossunder(Svrsi, S_RSI_OverBought) and crossunder(close,BBupper)
Longexcon      = crossunder(low, BBupper)
Shortexcon     = crossover(low, BBlower)

qt = round(strategy.equity/price, 3)

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

    if LongCondition and DateTime
        strategy.entry("RSI_BB_L", strategy.long, qty=qt,  comment="Long")
    else
        strategy.cancel(id="RSI_BB_L")
        
    if Longexcon
        strategy.close("RSI_BB_L", qty_percent = 100, comment = "L_exit")
    
    if ShortCondition and DateTime
        strategy.entry("RSI_BB_S", strategy.short, qty=qt,  comment="Short")
    else
        strategy.cancel(id="RSI_BB_S")
        
    if Shortexcon
        strategy.close("RSI_BB_S", qty_percent = 100, comment = "S_exit")
    
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)