ダイナミックRSIショックオペレーション戦略


作成日: 2023-11-02 16:04:07 最終変更日: 2023-11-02 16:04:07
コピー: 1 クリック数: 666
1
フォロー
1617
フォロワー

ダイナミックRSIショックオペレーション戦略

概要

この戦略は,ダイナミックなサポート/レジスタンスと相対的に強いRSIを組み合わせて,RSIが超買い超売り範囲を設定し,ダイナミックなサポート/レジスタンスを突破すると,RSIが超買い超売り領域に入っているかどうかを判断し,買入と売却のシグナルを生成します.

原則

1. ダイナミックなサポート/レジスタンス位

security関数を使用して,閉店価格を動的サポート/レジスタンス位として取得し,価格がこの動的位を破るとき,取引シグナルを生成します.

2. RSI指標について

周期間の平均上昇と平均低下を計算し,両者を比較してRSI値を生成し,超買い超売り領域に入っているかどうかを判断する.

3. 取引信号

価格がダイナミックな位置を突破すると,RSIが超買い超売り領域に入っていない場合は,買/売信号を生じます. 入っている場合は,突破が生じる信号を無視します.

4. 退出信号

価格がダイナミックな領域に戻ったときに平仓,またはRSIが正常な領域に戻ったときに平仓.

優位分析

  1. 動的サポート/レジスタンス位置を利用してトレンドの方向を判断し,利益の確率を高めます.

  2. RSIは偽突破をフィルターし,乱入を避ける.

  3. 傾向と指標を組み合わせて,様々な状況に適用できます.

  4. ルールも明確で実行しやすい.

リスクと解決策

  1. ダイナミック位は,複数のテストブレイクが発生し,誤った信号を生じさせ,ブレイク幅のフィルタリングを適切に緩めることができる.

  2. 単一のRSI指標は誤判を起こす可能性があり,他の指標を組み合わせフィルタリングのために導入することができます.

  3. 振動的な状況では,頻繁に平仓を開く可能性があり,取引コストが高く,RSI正常値の範囲を適切に緩め,取引頻度を減らすことができます.

  4. パラメータを正しく設定しない場合,欠落した表または乱雑な表が生じることがあります.異なる品種に応じて合理的にパラメータを選択してください.

最適化の方向

  1. RSIパラメータを自動最適化するために,機械学習技術を使用します.

  2. 利益を固定し,損失を減らすために,ストップ・ストップ・ストップ戦略を追加する.

  3. 戦略の安定性を高めるため,より多くの指標と組み合わせたフィルタリングを行います.

  4. 波動率の指標を増やし,低波動時にポジションを下げる.

  5. ポジション数アルゴリズムを最適化し,ポジションの動態を調整し,異なる市場環境に適応させる.

要約する

この戦略は,トレンド判断と指標フィルタリングを組み合わせて,重要なレベル近くの価格の破壊を効果的に識別し,リスクを制御した前提で高い利益を得ることができます.パラメータの設定をさらに最適化し,ストップ・ロスを増やし,より多くの指標を導入することによって,戦略の安定性と適応性をさらに高め,より広範な市場で安定した利益を得ることができます.

ストラテジーソースコード
/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Levels+RSI Strategy v1.0", shorttitle = "Levels+RSI str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
tf = input('W', title = "timeframe 1")
src = input(ohlc4, "Source")
ap = input(true, defval = true, title = "antipila")
cf = input(true, defval = true, title = "color filter")
rsiperiod = input(7, defval = 7, minval = 2, maxval = 100, title = "RSI Period")
rsilimit = input(30, defval = 30, minval = 1, maxval = 50, title = "RSI Limit")
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")

//Level
level = request.security(syminfo.tickerid, tf, src[1])
plot(level, linewidth = 3, color = silver)

//RSI
uprsi = rma(max(change(close), 0), rsiperiod)
dnrsi = rma(-min(change(close), 0), rsiperiod)
rsi = dnrsi == 0 ? 100 : uprsi == 0 ? 0 : 100 - (100 / (1 + uprsi / dnrsi))

//Level Signals
ls = close > level and ap == false ? true : low > level ? true : false
up1 = strategy.position_size == 0 and ls and (close < open or cf == false)
exit1 = close < level and ap == false ? true : high < level ? true : false 

//RSI Signal

up2 = rsi < rsilimit and (close < open or cf == false)
exit2 = rsi > rsilimit and ls == false

//Trading
lot = strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]

if up1 or up2 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
    
if  (exit1 and rsi > rsilimit) or exit2
    strategy.close_all()