
この戦略は,RVI ((相対性強度指数) とEMA ((指数移動平均) の2つの指標に基づいて構築されている.これは,RVIが利潤を許すとき,速いEMAが遅いEMAの上に多めにし,速いEMAが遅いEMAの上に空白をさせ,トレンドとオーバーバイのオーバーセルの上に基づく量化取引戦略を実現する.
RVIを用いて超買超売り状況を判断する。RVI指標ライン上を信号ラインを通過すると超買信号に多めにする;RVI指標ライン下を信号ラインを通過すると超売り信号に空きする。
二重EMAでトレンドの方向を判断する. 速いEMAが遅いEMAの上にいる時,看板トレンド,遅いEMAが速いEMAの上にいる時,下落トレンドである.
RVIが利潤を許し,EMAが負債であると判断した場合のみ,多操作を行う.RVIが利潤を許し,EMAが負債であると判断した場合のみ,空白操作を行う.
最近の低点以下でatr*atrSL距離,止まりは,最近の高点より上にあるatr*atrTP 距離; 最新の高点より上にある空いた後のストップatr*atrSL 距離,ストップは最近の低点より下にあるatr*atrTP距離について
偽突破を避けるために,トレンドと超買超売の指標を組み合わせる.
ダイナミックストップ・ストップ・ストップは,大局を把握するのに役立ちます.
トレンドの質と超買超売の程度を考慮して,取引信号は正確である.
返信データは充実しており,パラメータは最適化され,リッドディスクは良好なパフォーマンスをしている.
大規模な波動市場では,EMAの判断の傾向は頻繁に変化し,取引頻度は高すぎます.
RVIパラメータとEMA周期は,異なる取引品種に応じてそれぞれ最適化する必要がある.そうでなければ,取引の効果が劣る可能性があります.
ストップ・ストップ・係数は,市場の波動性に応じて合理的に設定されることも必要であり,そうでなければ,リスクを効果的に制御することはできません.
トレンドの質を判断する補助指標,例えば振動指標,ブリンラインチャネルなどの追加は,取引決定をより精密にするために考慮することができます.
ATRのような波動率指標を組み合わせて,ストップ・ストップ距離を動的に調整し,大幅な波動時にストップ・範囲を適切に放宽することができる.
異なる品種に対して別々にテストするパラメータの組み合わせで,最適のパラメータを選択し,戦略の安定性を高めることができる.
この戦略は,RVI指標とEMA指標の優位性を組み合わせて,大トレンドの方向を兼ねながら,超買い超売りを判断し,衝突取引を回避する.ダイナミックな止損制約機構は,市場の主要方向を把握するのに有利である.パラメータの最適化と厳格なリスク制御を経て,この戦略は,投資の比較的安定した収益率を得ることができる.実物アプリケーションでは,さらなる調整と最適化の余地があり,投資家は,自分のリスクの好みと品種の特性に応じて戦略の調整を行うことができる.
/*backtest
start: 2024-01-22 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//this strategy works well on h4 (btc or eth)
//@version=5
strategy(title="Relative Vigor Index", shorttitle="RVGI",overlay=true)
//indicator(title="Relative Vigor Index", shorttitle="RVGI", format=format.price, precision=4, timeframe="", timeframe_gaps=true)
len = input.int(4, title="Length rvi", minval=1)
rvi = math.sum(ta.swma(close-open), len)/math.sum(ta.swma(high-low),len)
sig = ta.swma(rvi)
offset = input.int(0, "Offset rvi", minval = -500, maxval = 500)
atrlength = input.int(19,title="Atr Length",minval=1)
ema1 = input.int(95,title="Long EMA rapida",minval=1,step=10)
ema2 = input.int(200,title="Long EMA lenta",minval=1,step=10)
atrSL = input.float(2.0,title="Atr SL", step=0.1)
atrTP = input.float(1.0,title="Atr TP", step=0.1)
atr = ta.atr(atrlength)
esalcista = low > ta.ema(close,ema1) and ta.ema(close,ema1) > ta.ema(close,ema2)
bajista = high < ta.ema(close,ema1) and ta.ema(close,ema1) < ta.ema(close,ema2)
//plot(high + atr)
//plot(low - atr)
//strategy.entry("compra",strategy.long, when=ta.crossover(rvi,sig))
//strategy.close("compra",when=ta.crossunder(rvi,sig))
//plot(rvi, color=#008000, title="RVGI", offset = offset)
//plot(sig, color=#FF0000, title="Signal", offset = offset)
//plotshape(true,style=shape.xcross)
var TP = 0.0
var SL = 0.0
comprado = strategy.position_size>0
vendido = strategy.position_size<0
crucepositivo = ta.crossover(rvi,sig)
crucenegativo = ta.crossunder(rvi,sig)
if comprado
// ver SL
if low < SL
strategy.close("BUY",comment="SL")
if comprado
//ver tp
if high > TP
strategy.close("BUY",comment="TP")
if not comprado and not vendido
if crucepositivo and esalcista
strategy.entry("BUY",strategy.long)
SL := low - (atr * atrSL)
TP := high + (atr * atrTP)
alert("BUY",alert.freq_once_per_bar)
//---------------
if vendido
// ver SL
if high > SL
strategy.close("SELL",comment="SL")
if vendido
//ver tp
if low < TP
strategy.close("SELL",comment="TP")
if not vendido and not comprado
if crucenegativo and bajista
strategy.entry("SELL",strategy.short)
SL := high + (atr * atrSL)
TP := low - (atr * atrTP)
alert("SELL",alert.freq_once_per_bar)
//----------------
//plotshape(comprado,style=shape.xcross)
plot( comprado ? SL : na, color=color.red,style=plot.style_circles)
plot( comprado ? TP : na, color=color.blue,style=plot.style_circles)
plot( ta.ema(close,ema1),color=color.orange)
plot( ta.ema(close,ema2),color=color.yellow)
plot( vendido ? SL : na, color=color.red,style=plot.style_circles)
plot( vendido ? TP : na, color=color.blue,style=plot.style_circles)