RSIは,相対強度指数 (RSI) をベースとした短期取引戦略である.RSIを利用してオーバーバイトとオーバーセールレベルを特定し,偽信号を避けるためにキャンドルスタイクフィルタリングを組み合わせ,逆転点でロングとショートポジションを入力する.この戦略は,極端なオーバーバイトまたはオーバーセール状況の後,平均逆転機会を把握することを目的としている.
まず,RSI インディケーターは,閉値をベースに計算され,期間が7に設定されます. 過買いレベルは70に設定され,過売りレベルは30に設定されます. RSI が30を超えると購入信号が生成され,RSI が70を下回ると販売信号が生成されます.
偽信号をフィルタリングするには,取引信号が起動するとキャンドルスタイクボディサイズが通常の範囲の1〜3倍に拡大する必要があります.ここで,戦略は信号を確認するために1〜5つの連続したRSIバーが過剰購入または過剰販売レベルにとどまり,ボディ拡張が4倍に設定されています.
RSIが5バー連続で30を下回ると,ロングシグナルが生成される.次のキャンドルが4倍以上拡大した上昇ボディを示した場合は,ロングポジションが実行される.RSIが5バー連続で70を下回ると,ショートシグナルが生成される.次のキャンドルが4倍以上拡大した下落ボディを示した場合は,ショートポジションが実行される.
ポジションは,現在のキャンドル方向がポジション方向と一致し,ボディが2倍拡大すると閉じる.
RSIは,過剰購入と過剰売却の状況を識別するのに優れている.株式が極端なレベルに達すると,引き下げの可能性が高い.極端なレベルはしばしば差し迫った逆転を意味している.この戦略は,転換点でそのような機会を把握することができます.
純粋にRSI信号に基づいた取引は,多くの偽信号を引き起こす可能性があります.この戦略は,フィルターとしてキャンドルスタイクボディの拡張を組み込み,逆転点の周りに拡大されたボディが現れたときにポジションに入ります.混乱した市場からのウィプソウを避けます.
オーバーバイトまたはオーバーセールゾーンで1-5連続のRSIバーを要求することは確認として機能し,偶発的な異常バーからの偽信号を回避し,信号の信頼性を向上させます.
ボディ拡張倍数は,異なる製品に対して調整することができる.大きな振動を持つ株では,基準は緩和され,狭い範囲の株では,厳しくなる.これは,異なる取引製品に対して柔軟な調整を可能にします.
パラメータ設定には固有的な制限がある.異なる製品や時間帯はパラメータ調整を必要とする場合があります.固定設定を使用するとオーバーフィット問題が発生する可能性があります.
RSI自体にはいくつかの遅延特性があります. 身体の膨張と組み合わせると,ポジションは早めに終了します. したがって,正確な底部や上位を捕捉する精度は一般的にあまり高くありません.
RSIは,Range Marketsでは,頻繁に買い/売る信号を誘発し,長期保持期間が続く可能性があります.そのような場合,パラメータを調整するか,戦略を一時停止する必要があります.
短期的な取引戦略として,適切なポジションサイズ戦略を組み合わせ,例えば移動ストップ損失,利益を取ることなど,利益を固定しリスクを制御する必要があります.
RSIパラメータの異なる組み合わせは,異なる製品のための最適化パラメータを見つけるために,期間,過買い/過売値,キャンドルスタイクフィルターなどのテストが可能である.
利益をロックするために移動またはパーセントストップ損失を追加することができます. またはATR値またはDonchainチャネルなどに基づいてストップ損失を設定します.
MACD,KDJ,その他の指標に基づく条件が追加され,不正なブレイクアウトからの誤った信号を避ける.波動性指標は,トレンドの逆転信号を識別するのに役立ちます.
トレンドバイアスを測定するために移動平均値を使用する.トレンドに準拠する取引信号のみを検討する. 戦略はレンジバインド市場中に一時停止することができます. トレンド強度指標もフィルターとして使用できます.
要約すると,このRSI逆転戦略は,独自のメリット・デメリットを持つ典型的な短期取引戦略です.主な利点は極端な後に引き下げを捕獲することであり,主なリスクは,信号精度が低く,範囲の長期保持期間が原因です.私たちは,より多くの製品と市場状況に適応し,より安定した結果を達成するために,パラメータを調整し,フィルターを追加し,ストップを最適化することによって戦略を改善することができます.
/*backtest start: 2022-11-08 00:00:00 end: 2023-11-14 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(title = "Noro's FRSI Strategy v1.21", shorttitle = "FRSI str 1.21", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, commission_type = strategy.commission.percent, commission_value = 0.0) //Settings rsiperiod = input(7, defval = 7, minval = 2, maxval = 50, title = "RSI Period") limit = input(30, defval = 30, minval = 1, maxval = 100, title = "RSI limit") rsisrc = input(close, defval = close, title = "RSI Price") rb = input(1, defval = 1, minval = 1, maxval = 5, title = "RSI Bars") sps = 0 fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2038, defval = 2018, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Fast RSI fastup = rma(max(change(rsisrc), 0), rsiperiod) fastdown = rma(-min(change(rsisrc), 0), rsiperiod) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //Limits bar = close > open ? 1 : close < open ? -1 : 0 uplimit = 100 - limit dnlimit = limit //RSI Bars ur = fastrsi > uplimit dr = fastrsi < dnlimit uprsi = rb == 1 and ur ? 1 : rb == 2 and ur and ur[1] ? 1 : rb == 3 and ur and ur[1] and ur[2] ? 1 : rb == 4 and ur and ur[1] and ur[2] and ur[3] ? 1 : rb == 5 and ur and ur[1] and ur[2] and ur[3] and ur[4] ? 1 : 0 dnrsi = rb == 1 and dr ? 1 : rb == 2 and dr and dr[1] ? 1 : rb == 3 and dr and dr[1] and dr[2] ? 1 : rb == 4 and dr and dr[1] and dr[2] and dr[3] ? 1 : rb == 5 and dr and dr[1] and dr[2] and dr[3] and dr[4] ? 1 : 0 //Body body = abs(close - open) emabody = ema(body, 30) //Signals up = bar == -1 and sps == 0 and dnrsi and body > emabody / 4 dn = bar == 1 and sps == 0 and uprsi and body > emabody / 4 exit = bar == 1 and fastrsi > dnlimit and body > emabody / 2 //Trading if up strategy.entry("Long", strategy.long, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00))) sps := 1 if time > timestamp(toyear, tomonth, today, 00, 00) or exit strategy.close_all() sps := 0