定量取引の二重指標戦略

作者: リン・ハーンチャオチャン, 日付: 2024-01-15 12:18:53
タグ:

img

概要

この戦略は"定量取引二重指標戦略"と呼ばれる. 双指数フィルタリングの取引戦略を実装するために,ボリンジャーバンドと相対強度指数 (RSI) を両方を取引信号として利用する.

戦略の論理

この戦略の基本論理は,取引シグナルフィルタリングのために,市場における過買いと過売の状況を判断するために,ボリンジャーバンドとRSIの両方を使用することです.

Bollinger Bands の上部および下部帯は,価格が波動性範囲外にあるかどうかを判断し,それによって市場が過買いまたは過売れているかどうかを判断することができる.相対強度指数 (RSI) は,市場力の強さを判断することができる.RSI 55 以上は過買い信号,45以下は過売れた信号である.

戦略は,ボリンジャーバンドとRSIの両方が同時に過剰購入または過剰販売のシグナルを表示するときにのみ購入または売却操作が行われるように設定されています.これはいくつかの誤解を招くシグナルをフィルタリングし,戦略の安定性を向上させます.

戦略 の 利点

この戦略の最大の利点は,フィルタリングのための二重指標の使用であり,誤った取引を減らすことができ,信号の信頼性を向上させることができます.

単一のボリンジャーバンド指標と比較して,二重指標戦略は,誤った信号の確率を大幅に減らすことができます.単一のRSI指標と比較して,ボリンジャーバンドは,振動する市場で誤った信号を防ぐために,現在振動範囲外にあるかどうかを判断するために使用できます.

総合的には,二重指標戦略は複数の状況を包括的に考慮し,適応性と安定性を高めています.

戦略のリスクと解決策

この戦略の主なリスクは,ボリンジャーバンドとRSIの両方のパラメータ設定が不適切である可能性があることです.ボリンジャーバンドのパラメータが過度に敏感に設定されている場合,冗長なシグナルを生成する傾向があります.RSIパラメータが過度に緩やかに設定されている場合,効果は弱まります.

また,二重指標の組み合わせ自体は,より少ないシグナルを意味します.もし市場が1つの指標のシグナルにのみ応え,もう1つがトリガーレベルに達していない場合,この戦略はシグナルを生成しません.したがって,単一指標戦略と比較して,この戦略の取引頻度は低いでしょう.

解決策は主に,より適切なパラメータを設定し,RSIやボリンジャーバンドのトリガーレベルを修正するなどです.取引頻度が低すぎると,エントリー機会を増やすためにパラメータ要件を削減することを検討してください.

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

この戦略は,次の側面で最適化できます.

  1. Bollinger Bands と RSI パラメータの異なる組み合わせをテストして,より良いマッチを見つける.既存のパラメータはすべての製品と時間帯に適していない可能性があります.

  2. ストップ・ロスを追加し,収益性を向上させる利得戦略を講じます.現在,これらの点で考慮はありません.

  3. ポジションサイズメカニズムを追加します. 傾向が良くなるとポジションを増やし,傾向が悪くなると損失を減らすために動的ポジションサイズを使用します.

  4. 履歴データに基づくパラメータの自己適応性を追加します.最新の市場条件に合わせて指標パラメータを自動的に最適化できるようにします.

結論

この戦略は,二重指標フィルター化された戦略として,全体的な安定性と適応性が良好である.偽信号の割合を減らすと同時に,取引頻度も減少させる.指標パラメータを最適化し,補助機能を追加することで,戦略の利益の可能性はさらに向上することができる.


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

//@version=2
strategy("Bollinger Bands + RSI, Double Strategy (by SlumdogTrader)", shorttitle="BolBand_RSI_Strat", overlay=true)

// SlumdogTrader's Bollinger Bands + RSI Double Strategy - Profit Trailer
//
// Version 1.0
// Script by SlumdogTrader on July Fri 13(!), 2018.
//
// This strategy uses a normalise Bollinger Bands + RSI.
//
// Bollinger Band triggers
// SELL - when the price is above the upper band.
// BUY - when the price is below the lower band.
//
// RSI triggers
// SELL - when the price is above 55.
// BUY - when the price is below 45.
//
// This simple strategy only triggers when
// both the BB and the RSI
// indicators, at the same time, are in
// a overbought or oversold condition.
//
// Visit my TradingView work at:
// https://www.tradingview.com/u/SlumdogTrader/
//
// Visit my website at:
// https://www.slumdogtrader.com
//

///////////// Bollinger Bands Settings
BBlength = input(20, minval=1,title="Bollinger Bands SMA Period Length")
BBmult = input(2.0, minval=0.001, maxval=50,title="Bollinger Bands Standard Deviation")
price = input(close, title="Source")
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="BBs SMA Basis Line")
p1 = plot(BBupper, color=silver,title="BBs Upper Line")
p2 = plot(BBlower, color=silver,title="BBs Lower Line")
fill(p1, p2)

///////////// RSI Settings
RSIlength = input( 16 ,title="RSI Period Length")
RSIvalue = input( 45 ,title="RSI Value Range")
RSIoverSold = 0 + RSIvalue
RSIoverBought = 100 - RSIvalue
vrsi = rsi(price, RSIlength)


///////////// Colour Settings
switch1=input(true, title="Enable Bar Color?")
switch2=input(true, title="Enable Background Color?")
TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) ? red : RSIoverSold and (price[1] < BBlower and price > BBlower)  ? 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, 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, stop=BBupper,  comment="RSI_BB_S")
    else
        strategy.cancel(id="RSI_BB_S")

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


もっと