RSIに基づく定量的な取引戦略

作者: リン・ハーンチャオチャン, 日付: 2023-12-06 17:17:16
タグ:

img

概要

この戦略は"ダブルタイムフレームRSIリバーサル"と呼ばれる.これは相対強度指数 (RSI) をベースとした定量的な取引戦略である.この戦略は,価格逆転の機会を捕獲することによって低価格で購入し高価格で販売することを目的とした,異なる期間を持つ2つのRSIを使用して購入と販売信号を生成する.

戦略の論理

この戦略は,高速期間のRSI (デフォルト55日) と遅い期間のRSI (デフォルト126日) を比較して取引信号を構築する.高速期間のRSIが遅いRSIを超えると,購入信号が生成される.高速期間のRSIがスロー期間のRSIを下回ると,販売信号が起動する.二つの異なるタイムフレーム間の相対的な強さを比較することによって,短期および長期のトレンドが逆転するときに機会を検出する.

ポジションを入力した後,利益目標とストップロスは設定されます. 既定利益目標はエントリー価格の0.9倍です. 既定ストップロスはエントリー価格より3%低いです. 逆信号が起動した場合,ポジションも閉鎖されます.

利点

  • 双重RSIを比較して短期的な価格逆転を捉える
  • 偽信号を二重確認でフィルタリングする
  • ストップ・ロスのシングルベットの損失制限

リスク

  • 高波動期間の反発信号の頻度
  • ストップロスは太りすぎて わずかな波動で簡単に倒れる
  • パラメータが正しく設定されていない場合

強化

  • 最適値を見つけるためにより多くのRSIパラメータの組み合わせをテストします
  • 偽信号をフィルタリングするために他の指標を追加
  • 収益性の向上のために ダイナミックストップ損失と利益率

概要

ダブルタイムフレームRSI逆転戦略は,高速および遅いRSI期間のクロスオーバーを比較することによって取引信号を生成する.短期的な価格逆転を捕捉することを目的としている.リスクを制限するために利益とストップロスのルールが設定されている.これは取引逆転にマルチタイムフレーム指標の比較を使用する典型的な戦略である.強化分野にはパラメータチューニングとリスク管理ルールが含まれます.


/*backtest
start: 2022-11-29 00:00:00
end: 2023-12-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title="Relative Strength Index", shorttitle="RSI")
slen    = input(55, title="Short length")
llen    = input(126, title="Long length")
sup     = ema(max(change(close), 0), slen)
sdown   = ema(-min(change(close), 0), slen)
rsi1    = sdown == 0 ? 100 : sup == 0 ? 0 : 100 - (100 / (1 + sup / sdown))
lup     = ema(max(change(close), 0), llen)
ldown   = ema(-min(change(close), 0), llen)
rsi2    = ldown == 0 ? 100 : lup == 0 ? 0 : 100 - (100 / (1 + lup / ldown))
ob      = input(55, title="Overbought")
os      = input(45, title="Oversold")
tp      = input(.9, title="Take profit level %")*.01
sl      = input(3, title="Stoploss level %")*.01
mid     = avg(ob,os)
plot    (mid, color=#4f4f4f, transp=0)
hline   (ob, color=#4f4f4f)
hline   (os, color=#4f4f4f)
long    = crossover(rsi1,rsi2)
short   = crossunder(rsi1,rsi2)
vall    = valuewhen(long,close,0)
lexit1  = high>=(vall*tp)+vall
lexit2  = low<=vall-(vall*sl)
vals    = valuewhen(short,close,0)
sexit1  = low<=vals - (vals*tp)
sexit2  = high>=vals + (vals*sl)
bgcolor (color=long?lime:na,transp=50)
bgcolor (color=short?red:na, transp=50)
strategy.entry("Long", strategy.long, when=long)
strategy.close("Long", when=lexit1)
strategy.close("Long", when=lexit2)
strategy.close("Long", when=short)
strategy.entry("Short", strategy.short, when=short)
strategy.close("Short", when=sexit1)
strategy.close("Short", when=sexit2)
strategy.close("Short", when=long)
plot    (rsi1, color=orange, transp=0,linewidth=1, title="Short period RSI")
plot    (rsi2, color=aqua  , transp=0,linewidth=1, title="Long period RSI")


もっと