双重RSI突破戦略

作者: リン・ハーンチャオチャン開催日:2023年12月27日 14:33:15
タグ:

img

概要

ダブルRSIブレイクアウト戦略は,RSI指標を使用して価格逆転点を特定するアルゴリズムの取引戦略である.市場が過買いまたは過売れているかどうかを判断するために,RSI指標を事前に設定された上限値と下限値と比較して取引信号を生成する.

戦略の論理

この戦略は,主に市場状況を判断するためにRSI指標に依存する.RSI指標は,特定の期間中の閉店価格の変化に基づいて計算され,株式の買取・販売勢いを反映する.RSIが既定上限 (デフォルト75) を越えると,株式が過剰購入ゾーンに入ったことを示します.RSIが既定下限 (デフォルト25) を下回ると,株式が過剰販売ゾーンに入ったことを示します.

裁定規則は次のとおりです

  1. RSIが上限を超えるとショート
  2. RSIが下値を下回ると,ロング
  3. ストップ・ロストやテイク・プロフィートに達するとポジションを閉じる.

その取引論理はシンプルで明瞭で,合理的な基準パラメータ設定,大きな設定スペースがあり,市場の大きなトレンドを把握するのに適しています.

利点分析

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

  1. シンプルな論理で 分かりやすく実行できます
  2. パーソナライズできる合理的な基準パラメータ設定
  3. 市場条件に柔軟に対応できる設定可能な逆取引論理
  4. 価格の逆転点を効果的に特定し,主要な傾向を把握することができます.

一般的に,合理的な基準パラメータ設定,シンプルな実装,およびRSIを通じて価格逆転を効果的に決定する能力により,この戦略は中長期のトレンド把握に適しており,定量戦略として理解し使用することは簡単です.

リスク分析

この戦略は比較的シンプルで信頼性があるものの,その潜在的リスクは無視できません.

  1. RSIインジケーターが誤った信号を誘発する確率は比較的高い.RSIは価格逆転を完璧に予測できないため,誤った判断につながる可能性があります.
  2. 傾向市場における継続的なストップ損失の可能性.RSIは,通常の範囲限定調整と傾向逆転を区別するのが困難です.
  3. RSIは,この環境でより大きな損失をもたらす,効率的に範囲の傾向を決定することができません.

リスクをコントロールするには,次のことに注意する必要があります.

  1. 過剰な判断誤差を防ぐために 適切なパラメータを調整します
  2. 取引シグナルを他の指標で確認し,正確性を向上させる.
  3. 利得率を上げ 単一のストップ損失を減らす
  4. 市場を切り離さないでください.

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

この戦略が直面する主なリスクは,逆転判断の誤りや,様々な市場での損失であるため,次の側面から最適化することができます.

  1. 他の指標とシグナルをフィルターする.KDJやMACDのような指標は誤った判断を避けるためにフィルター役割を果たすことができます.
  2. シングルストップ損失金額の限界値を増やす. シングルストップ損失スペースを適切に拡大することで,戦略が大きなトレンドに従うことができます.
  3. オープンポジションの頻度制限を設定する. 特定の期間で1回またはN回にエントリを制限するロジックを追加して,過度に頻繁なポジション開設を制御する.
  4. 市場状況の判断を設定し,戦略のリスク/報酬比を大幅に最適化できる市場変動を避け,戦略がトレンド市場でのみ実行されることを確保する.

結論

概要すると,ダブルRSIブレイクアウト戦略は,シンプルで実践的な定量戦略である. 単純なトレンドフォローを達成するために,RSIを通じて価格逆転を特定する. いくつかの誤判リスクが存在するが,パラメータチューニング,シグナルフィルタリングなどの最適化はこれを緩和し,中長期のトレンドを捕捉する上で重要な役割を果たすことができます. その論理はシンプルで,初心者にとって参考にし,学ぶのに適しています. さらに最適化することで,この戦略は比較的安定した定量収益を得ることに有望です.


/*backtest
start: 2023-12-19 00:00:00
end: 2023-12-26 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("RSI Algo", overlay=true)

// Calculate start/end date and time condition
DST = 1 //day light saving for usa
//--- Europe
London = iff(DST==0,"0000-0900","0100-1000")
//--- America
NewYork = iff(DST==0,"0400-1500","0500-1600")
//--- Pacific
Sydney = iff(DST==0,"1300-2200","1400-2300")
//--- Asia
Tokyo = iff(DST==0,"1500-2400","1600-0100")

//-- Time In Range
timeinrange(res, sess) => time(res, sess) != 0

london = timeinrange(timeframe.period, London)
newyork = timeinrange(timeframe.period, NewYork)

time_cond = true


myPeriod = input(defval=14, type=input.integer, title="Period")
myThresholdUp = input(defval=75, type=input.float, title="Upper Threshold")
myThresholdDn = input(defval=25, type=input.float, title="Lower Threshold")
myAlgoFlipToggle = input(defval=false, type=input.bool, title="Imverse Algorthim")
myLineToggle = input(defval=true, type=input.bool, title="Show Lines")
myLabelToggle = input(defval=true, type=input.bool, title="Show Labels")
myRSI=rsi(close, myPeriod)
buy = myAlgoFlipToggle ? falling(myRSI,1) and cross(myRSI, myThresholdDn) : rising(myRSI, 1) and cross(myRSI,myThresholdUp) //and time_cond
sell = myAlgoFlipToggle ? rising(myRSI, 1) and cross(myRSI,myThresholdUp) : falling(myRSI,1) and cross(myRSI, myThresholdDn) //and time_cond
myPosition = 0
myPosition := buy==1 ? 0 : sell==1 or myPosition[1]==1 ? 1 : 0
trendColor = buy ? color.red : sell ? color.green : na
plot(myLineToggle ? buy and myPosition[1]==1 ? low - 0.004: sell and myPosition[1]==0 ? high + 0.004 : na : na, color=trendColor, style=plot.style_line, linewidth=4, editable=false)
plotshape(myLabelToggle ? buy and myPosition[1]==1 ? low - 0.005 : na : na, style=shape.labelup, location=location.absolute, text="Buy", transp=0, textcolor = color.white, color=color.black, editable=false)
plotshape(myLabelToggle ? sell and myPosition[1]==0 ? high + 0.005 : na : na, style=shape.labeldown, location=location.absolute, text="Sell", transp=0, textcolor = color.white, color=color.black, editable=false)

strategy.initial_capital = 50000
    //Calculate the size of the next trade
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit          //floating profit/loss
risk = input(2,type=input.float,title="Risk %")/100           //risk % per trade
isTwoDigit = input(false,"Is this a 2 digit pair? (JPY, XAU, XPD...")


stop = input(250, title="stop loss pips")
tp = input(2500, title="take profit pips")
if(isTwoDigit)
    stop := stop/100
    
temp01 = balance * risk     //Risk in USD
temp02 = temp01/stop        //Risk in lots
temp03 = temp02*100000      //Convert to contracts
size = 1
    
strategy.entry("long",1,size,when=buy and myPosition[1]==1 )
strategy.entry("short",0,size,when=sell and myPosition[1]==0)

strategy.exit("exit_long","long",loss=stop, profit=tp)      //Long exit (stop loss)
strategy.exit("exit_short","short",loss=stop, profit=tp)      //Short exit (stop loss)

//strategy.close_all(when= not time_cond)


もっと