VSTOPとRSIの取引戦略

作者: リン・ハーンチャオチャン, 日付: 2023年10月9日 15:48:46
タグ:

概要

この戦略は,RSIが過剰に買い上げられた場合,VSTOPとRSIインジケーターを組み合わせて,RSIが過剰に売り上げられた場合,LONGとShortを組み合わせ,トレンドの方向性を決定し,トレンドが逆転するときに損失を削減するためにVSTOPを使用します.

戦略の論理

  1. RSI インディケーター値を計算し,過剰購入と過剰販売ラインを設定します.RSIが過剰購入ラインを超えるとロングで,RSIが過剰販売ラインを下回るとショートします.

  2. VSTOP を計算します.これは価格変動範囲に基づいてストップ・ロスの線です.計算手順は以下の通りです.

    • ATR指標を計算し,ATR係数のマルチを設定する

    • 最大価格と最小価格を記録する

    • アップトレンド状態 is_uptrend に基づいて,現在のストップ損失線を計算します:ストップ = is_uptrend? max - mult * ATR : min + mult * ATR

    • ストップ・ロスのラインを更新: vstop1 = is_uptrend? max ((vstop_prev,stop) : min ((vstop_prev,stop)

    • トレンド逆転が起こると,ストップ損失ラインをリセットします.

  3. RSIが過剰に売れた場合,価格が VSTOP を越えると,ショート,RSIが過剰に買われた場合,ロング.

利点分析

  • 傾向指標と過買い/過売り指標を組み合わせることで,傾向市場における逆転の機会を把握できます.

  • VSTOP を使ってストップ・ロスを設定するとリスクが効果的に制御されます

  • 柔軟なRSIパラメータ設定は,異なる製品に最適化できます.

  • VSTOPは手動の介入なしに ストップ損失を系統的に追跡します

リスク と 解決策

  • ATRパラメータが大きすぎたり小さすぎたりすると,ストップ損失線は意味がない.異なるATRパラメータをテストしたり,ATR平均と組み合わせることもできます.

  • レンジ・バインド市場では,RSIは頻繁に取引信号を誘発し,取引頻度と滑りコストを増加させる可能性があります. RSIパラメータは調整または無効な信号を減らすために追加のフィルターを追加することができます.

  • この戦略の主なリスクは逆転が失敗することである.トレーダーは反トレンド取引を避けるためにより大きなタイムフレームのトレンド方向を観察する必要があります.トレンドを決定するために長期移動平均を使用することができます.

オプティマイゼーションの方向性

  • 無効な信号をフィルタリングするために他の指標を組み合わせることを検討してください.例えば,音量,ドンキアンチャネルなど.

  • バックテスト結果に基づいてパラメータを最適化して最適なパラメータの組み合わせを見つける.

  • ATR係数を動的に調整し,異なる市場環境に適応する方法を研究する

  • 高リスク期間の戦略の停止を検討します

結論

この戦略は,トレンド市場における逆転機会を把握するために,トレンド判断とオーバーバイト/オーバーセールレベルを統合する. VSTOPはリスク管理のための体系的なストップ損失管理を提供します. 戦略はパラメータ最適化および他の指標を組み合わせることでさらに強化できます. トレーダーは主要なリスクである失敗した逆転に注意する必要があります.


/*backtest
start: 2022-10-02 00:00:00
end: 2023-10-08 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Vstop and RSI", overlay=true)

//RSI Section
length = input(2, "RSI Period") 
overSold = input(30, "Oversold Level") 
overBought = input(70, "Overbought Level") 
price = close 
vrsi = rsi (price, length) 

//VSTOP Section
vlength = input(2, "Vstop Length") 
mult = input(2, "Vstop Mult") 
atr_ = atr(vlength) 

max1=0.0 
min1=0.0 
is_uptrend_prev = false 
stop=0.0 
vstop_prev=0.0 
vstop1=0.0 
is_uptrend=false 
is_trend_changed=false 
max_ = 0.0 
min_ = 0.0 
vstop=0.0 

max1 := max(nz(max_[1]), close)
min1 := min(nz(min_[1]), close)


is_uptrend_prev := nz(is_uptrend[1], true)

stop := is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_
vstop_prev := nz(vstop[1])
vstop1 := is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend := close - vstop1 >= 0
is_trend_changed := is_uptrend != is_uptrend_prev
max_ := is_trend_changed ? close : max1
min_ := is_trend_changed ? close : min1
vstop := is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1
plot(vstop, color = is_uptrend ? green : red, style=cross, linewidth=2)

if vrsi > overBought
    strategy.entry("Buy", strategy.long, comment="Buy")
     
if vrsi < overSold and vstop > price
    strategy.entry("Sell", strategy.short, comment="Sell")

もっと