この戦略は,市場が極端に過剰購入または過剰販売レベルに達したかどうかを判断するために,異なる期間の3つのRSI指標を使用し,それに応じて購入および販売信号を生成します.主に異なる時間枠における指標の組み合わせを観察することによって市場動向を判断します.
この戦略は,2期,7期および14期RSIインジケーターを同時に利用する.すべての3つのRSIインジケーターが同時に過買いまたは過売りシグナルを示すとき,取引シグナルが生成される.
具体的には,2期RSIが10以下,7期RSIが20以下,14-期RSIが30以下である場合,市場は過売りとみなされ,購入信号が生成される. 2期RSIが90以上,7期RSIが80以上,14-期RSIが70以上である場合,市場は過買いとみなされ,販売信号が生成される.
このコードは,RSIの過剰購入/過剰販売の限界値を調整するために精度パラメータを使用します.デフォルトは3で,より低い値はより厳格な過剰購入/過剰販売基準を意味します.
買い・売り信号が生成されると,価格が逆転し,その日のオープニング価格を突破すると,現在のポジションは,利益を得たり,損失を削減したりするために閉鎖されます.
多期RSI指標の組み合わせを使用することで,過買い/過売り状態をより正確に特定し,誤った信号をフィルターすることができます.
異なるパラメータで過買い/過売基準を細かく調整することで,市場の状況に基づいて戦略の敏感性を調整できます.
オープンな価格追跡ストップを導入することで 利益が間に合うように 確保できます
RSIインジケーターは,トレンド逆転を特定するのに効果的でない差異傾向があります.
高波動期間の場合は,RSIパラメータを調整する必要があります.そうでなければ,あまりにも頻繁にストップを誘発する可能性があります.
3つのRSIシグナルが同時に発信するのは稀で 良い取引機会を逃す可能性があります
過剰購入/過剰販売基準のパラメータを調整し,異なる市場でテストする必要があります.
RSIの差異を避けるために,ボリンジャー帯,KDJなど,他の指標を追加することを検討する.
RSIのパラメータを自動最適化する
ATR停止などの他の停止出口条件を試験する.
不適切な時期での取引を避けるためにフィルターを追加します.
この戦略は,多期RSI指標の組み合わせを使用して過買い/過売りゾーンを特定し,トレンドトラッキングストップを実装する.利点には,正確性を向上させ,間に合う停止が含まれます.デメリットには,行われない取引,RSIの誤判が含まれます.より良いパフォーマンスを達成するために,確認指標を追加することとともに,パラメータ最適化テストが推奨されます.
/*backtest start: 2023-10-25 00:00:00 end: 2023-10-28 10:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(title = "Noro's Triple RSI Top/Bottom", shorttitle = "3RSI Top/Bottom", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") accuracy = input(3, defval = 3, minval = 1, maxval = 10, title = "accuracy") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, 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") //RSI-2 fastup = rma(max(change(close), 0), 2) fastdown = rma(-min(change(close), 0), 2) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //RSI-7 middleup = rma(max(change(close), 0), 7) middledown = rma(-min(change(close), 0), 7) middlersi = middledown == 0 ? 100 : middleup == 0 ? 0 : 100 - (100 / (1 + middleup / middledown)) //RSI-14 slowup = rma(max(change(close), 0), 14) slowdown = rma(-min(change(close), 0), 14) slowrsi = slowdown == 0 ? 100 : slowup == 0 ? 0 : 100 - (100 / (1 + slowup / slowdown)) //Signals acc = 10 - accuracy up = fastrsi < (5 + acc) and middlersi < (10 + acc * 2) and slowrsi < (15 + acc * 3) dn = fastrsi > (95 - acc) and middlersi > (90 - acc * 2) and slowrsi > (85 - acc * 3) exit = (strategy.position_size > 0 and close > open) or (strategy.position_size > 0 and close > open) //Trading if up if strategy.position_size < 0 strategy.close_all() strategy.entry("Bottom", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn if strategy.position_size > 0 strategy.close_all() strategy.entry("Top", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()