VSTOPとRSIに基づく取引戦略


作成日: 2023-10-09 15:48:46 最終変更日: 2023-10-09 15:48:46
コピー: 0 クリック数: 706
1
フォロー
1617
フォロワー

概要

この戦略は,VSTOPとRSIの2つの指標を組み合わせ,RSIが超買い超売りするときに多空操作を行うことを実現し,同時にVSTOPを使用してトレンドの方向を判断し,トレンドが逆転するときに時効的に止まる.

戦略原則

  1. RSI指標値を計算し,超買線と超売線を設定する. RSIが超買線より大きいときは,多行; RSIが超売線より小さいときは,空行する.

  2. VSTOPを計算する.これは,価格の波動範囲に基づいて設定されたストップラインである.具体的計算手順は以下の通りです.

    • ATRの係数multを設定してATRの係数を計算する

    • max と min を記録する

    • is_uptrendの上昇傾向にあるかによって,現在のストップラインを計算する = is_uptrend ? max - mult * ATR: min + mult * ATR

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

    • トレンドが逆転すると,ストップラインのvstopをリセットします.

  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")