定量取引デュアルインジケーター戦略


作成日: 2024-01-15 12:18:53 最終変更日: 2024-01-15 12:18:53
コピー: 0 クリック数: 565
1
フォロー
1617
フォロワー

定量取引デュアルインジケーター戦略

概要

この策略は,量化取引の二重指標策略と呼ばれています.この策略は,ブルイン帯の指標と相対的に強い指標の2つの指標を同時に取引信号として使用し,二重指標のフィルタリングの取引策略を実現します.

戦略原則

この戦略の核心的な論理は,ブリン帯とRSIの2つの指標を同時に使って市場の過剰買いと過剰売り状況を判断し,取引信号をフィルタリングすることです.

具体的には,ブリン帯の上線と下線は,価格が波動範囲の外にあるかどうかを判断し,市場が過買か過売りであるかどうかを判断する.相対的に強い指標であるRSIは,市場力の強さを判断する.RSIが55を超えると,過買信号であり,45を下ると,過売信号である.

この戦略は,ブリン帯の指標とRSIの指標が同時にオーバーバイまたはオーバーセールシグナルを示している場合にのみ,対応した買いまたは販売操作が行われます.これは,部分的な誤解を招くシグナルをフィルターして,戦略の安定性を向上させることができます.

戦略的優位性

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

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

総合的には,二重指標戦略は,複数の状況を考慮し,適応性や安定性も良好です.

戦略的リスクと解決策

この戦略の主なリスクは,ブリン帯のパラメータ設定とRSIパラメータ設定の両方が不適切である可能性があるということです. ブリン帯のパラメータ設定が過度に敏感である場合,余剰信号が生じやすく,RSIパラメータ設定が過度に緩やかである場合,効果が弱まります.

さらに,二重指数組合は,それ自体が信号が少ないことを意味する.市場が1つの指標の信号に適合し,もう1つの指標が触発レベルに達していない場合,この戦略は信号を生じない.したがって,単一指数戦略と比較して,この戦略の取引頻度は低くなります.

解決方法は,主に,より適切なパラメータを設定し,RSIとブリン帯の触発水位を修正する.取引頻度があまりにも低い場合は,パラメータ要求を低下させ,入場機会を向上させることを考えることができます.

戦略最適化の方向性

この戦略は以下の方向から最適化できます.

  1. 異なるブリン帯のパラメータと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)