RSI ロング・ショート 自動取引戦略

作者: リン・ハーンチャオチャン開催日:2023年10月30日 17:13:24
タグ:

img

概要

この戦略は,相対強度指数 (RSI) 指標に基づいて,ロングとショートのための自動取引システムを設計する.RSIが過買いまたは過売りレベルに達すると,自動取引を行うときに自動的にロングとショートシグナルを生成することができます.

戦略の論理

この戦略は,価格上昇と減少を基準に0-100の範囲のRSI値を計算する.RSIが30を下回ると,oversold状態である.RSIが70を超えると,oversold状態である.このルールによると,RSIがoversoldゾーンに達すると戦略は自動的にロングになり,RSIがoversoldゾーンに達するとショートになる.

戦略は,まず15期間のRSIを計算する.RSIが20を下回るとoversoldとみなされる.この時点で,価格が200日間の移動平均値を超えると,ロングポジションが開かれる.RSIが80を超えると,oversoldとみなされる.この時点でショートポジションが開かれる.ロングまたはショートした後,取利益とストップロスは出口ポジションに設定される.

さらに,この戦略は,価格信号が発生するときに対応するランドマークラインとラベルを画し,取引信号をより直感的にします.

戦略 の 利点

  • 戦略のアイデアは明確で,理解し実行しやすい
  • RSI インディケーターに基づいて,過剰購入と過剰販売の判断は正確です
  • 手動の介入なしで完全に自動化された取引
  • リスクを効果的に制御するために,利益とストップ損失を設定する
  • トレーディング・シグナルが直感的で監視が簡単

戦略 の リスク

  • RSIインジケーターが遅れているので 判断が間違っている可能性があります
  • 固定された過剰購入と過剰販売の限界値は,すべての製品に適していません
  • 誤ったストップ損失設定により損失が増加する可能性があります.
  • トレンド市場における主要なトレンドと取引すると損失が生じる可能性があります

リスク制御対策には,RSIパラメータを最適化し,異なる製品に合わせて過剰購入と過剰販売の値を調整し,合理的にストップロスを設定し,トレンド指数と組み合わせてトレンドに反する取引を避ける必要があります.

戦略の最適化のための方向性

  • RSI パラメータを最適化し,過剰購入と過剰販売を判断する精度を向上させる
  • KDJ,MACDなどの他の指標で取引信号を確認します.
  • ストップ・ロスの設定を市場の条件に応じて最適化
  • トレンド判断を追加して逆操作を避ける
  • ストップ損失を追跡するセット株式曲線
  • 単一のリスクと全体的なリスクを制御するためのリスク管理モジュールを開発する

概要

RSIは,RSIが過剰購入または過剰販売状態を判断するために使用される自動化取引戦略である.RSIが極端な過剰購入または過剰販売レベルに達すると,自動的に長期および短期取引を行うことができる.戦略のアイデアはシンプルで明確で,実行しやすく,基本的な自動取引戦略として適しています.しかし,RSIインジケーターにはいくつかの遅れがあります.したがって,信号の精度を向上させるために他の指標と最適化することが推奨されています.また,リスク管理,ストップ損失メカニズムを最適化,取引リスクを減らすリスク制御モジュールの開発に注意を払う必要があります.ライブ取引で最適化および検証された場合,戦略は長期および短期取引のための効果的な自動化システムになることができます.


/*backtest
start: 2023-10-22 00:00:00
end: 2023-10-29 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("RSI Improved strategy", overlay=true)
higherTF1 = input.timeframe('15' , "Resolution", options = ['5', '15', '1H', 'D', 'W', 'M'])
dailyopen = request.security(syminfo.tickerid, higherTF1, close)

Reward = input(1600)
Risk = input(1600)

length = input( 5 )
overSold = input( 30 )
overBought = input( 70 )
EMA = input(200)
price = close

vrsi = ta.rsi(price, length)

RSIlowest =  vrsi[1] > vrsi ? true : false
RSIhighest = vrsi[1] < vrsi ? true : false

//ro = ta.crossunder(vrsi, 20)
//ru = ta.crossover(vrsi, 80)

co = ta.crossunder(vrsi, overSold)
cu = ta.crossunder(vrsi, overBought)

plot(ta.ema(close, EMA))
plot(ta.ema(close, 50), color = color.orange)

UponEMA = close > ta.ema(close, EMA) ? true : false
belowEMA = close < ta.ema(close, EMA) ? true : false
//transfer 'float' to 'int' to 'string'
r = int(vrsi)
value = str.tostring(r)

m = int(strategy.openprofit)
money = str.tostring(m)
if (not na(vrsi))
	//when price stand up on 200ema and rsi is at oversold area, open long position 
//	if (co and UponEMA)
  //      strategy.order("Rsi long", strategy.long, 1 , comment = "Rsi long")
        
    if(vrsi < 20 and RSIlowest)
        // line1 = line.new(x1=bar_index, y1=dailyopen, x2=bar_index+1, y2=dailyopen, xloc=xloc.bar_index, style=line.style_solid,extend=extend.right, color=color.aqua, width = 2)
        // line.delete(line1[1])  // remove the previous line when new bar appears
        // label1 = label.new(x=bar_index, y=dailyopen,yloc=yloc.belowbar, text = value,textcolor = color.white, color = color.green, style = label.style_label_up)
        // label.delete(label1[1])
        strategy.order("Rsi long", strategy.long, 1 , comment = "Rsi long")
        strategy.exit("exit", "Rsi long", profit = Reward, loss = Risk, comment = "Rsi long exit")
//strategy.close("Rsi short", comment = "Rsi close")

	
	

	if(vrsi > 80 and RSIhighest)
        // line2 = line.new(x1=bar_index, y1=dailyopen, x2=bar_index+1, y2=dailyopen, xloc=xloc.bar_index, style=line.style_solid,extend=extend.right, color = #e65100, width = 2)
        // line.delete(line2[1])  // remove the previous line when new bar appears
        // label2 = label.new(x=bar_index, y=dailyopen,yloc=yloc.abovebar, text = value, textcolor = color.white, color = color.red)            
        // label.delete(label2[1])
        strategy.order("Rsi short",strategy.short, 1,  comment = "Rsi short ")
        strategy.exit("exit", "Rsi short", profit = Reward,loss = Risk, comment = "Rsi short exit")
//	if(UponEMA)
//        strategy.close("Rsi short", comment = "Rsi short close")
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_cross)
//plotshape(confirmPH, title="Label",offset = 1,text="Bull",style=shape.labeldown,location=location.abovebar,color=color.green,textcolor=color.green)




//when Rsi reaches overbought, draw a Horizontal Ray to close prices, similarly when it comes to oversold.(accomplished)
//detects when there is more lower/higher RSI values, adjust horizontal Ray and label to new posistion.(accomplished)

もっと