RVI と EMA に 基づく ビットコイン トレーディング 戦略

作者: リン・ハーンチャオチャン開催日:2024年2月22日 13:50:17
タグ:

img

概要

この戦略は,RVI (Relative Vigor Index) と EMA (指数関数移動平均線) の指標に基づいています.RVIがエントリーシグナルを与え,急速なEMAがスローEMAよりも高くなった場合,RVIがエントリーシグナルを与え,スローEMAが高速EMAよりも高くなった場合,RVIがエントリーシグナルを与え,スローEMAがスローEMAよりも高くなった場合,RVIがエントリーシグナルを与え,急速なEMAよりも高くなった場合,RVIがエントリーシグナルを与え,高速EMAがスローEMAよりも高くなった場合,RVIがエントリーシグナルを与え,高速EMAがスローEMAよりも高くなった場合,RVIがエントリーシグナルを与え,高速EMAがスローEMAよりも高くなった場合,RVIがエントリーシグナルを与え,高速EMAがスローEMAよりも低い場合は,RVIがエントリーシグナルを与えると,RVIがエントリーシグナルを与え,高速EMAがスローEMAよりも低い場合,RVIが低くなってきます.

戦略原則

  1. オーバーバイトとオーバーセール条件を判断するためにRVIを使用します.RVIインジケーターラインが信号ラインの上を横切ると,それはロングに行くオーバーバイト信号です.RVIラインが信号ラインの下を横切ると,それはショートに行くオーバーセール信号です.

  2. トレンド方向を決定するためにダブルEMAを使用する.速いEMAがスローEMAよりも高くなった場合,それは上昇傾向である.遅いEMAが速いEMAよりも高くなった場合,それは下落傾向である.

  3. RVIがエントリーシグナルを示し,EMAが上昇傾向を示したときにのみロング,RVIがエントリーシグナルを示し,EMAが下落傾向を示したときにのみショート.

  4. ストップ・ロスは,先行後,最近の低値以下に atr の距離で設定されます.ATRの距離で最近の高値より高く設定されます.atrTP ショートした後のストップロスは,最近の高値よりATRSLとTake Profitは,ATRの距離で最近の低水準を下回るatrTP.

利点分析

  1. 傾向指標と過買い過売の指標を組み合わせることで 誤ったブレイクアウトを回避できます

  2. ダイナミックなストップ・ロストと 利益を取ることは 大きな動きを捉えるのに役立ちます

  3. トレンド品質と過剰購入/過剰販売レベルをバランスさせ,信号の精度を向上させる.

  4. 幅広いバックテスト,最適化されたパラメータ,良い実際の取引パフォーマンス.

リスク分析

  1. EMA が 市場 変動 の 中 で 評価 し て いる 傾向 の 頻繁 な 変化 は,過大 取引 に 導い て い ます.

  2. RVI パラメータと EMA 期間は,異なる取引手段に対して最適化する必要がある.そうでなければパフォーマンスが損なわれる可能性があります.

  3. ストップ・ロストと得益係数は,市場の変動に基づいて合理的に設定されるべきで,そうでなければリスクは効果的に制御できない.

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

  1. トレンドの質を判断する指標は,オシレーター,ボリンジャー帯など,追加され,取引決定がより正確になります.

  2. ストップ・ロスト/テイク・プロフィート距離は,ATRのような変動指標に基づいて動的に調整され,高変動期間のストップ距離がより広いことが可能になります.

  3. パラメータの組み合わせは,戦略の信頼性を高めるために,異なるツールに対して個別にテストして最適化することができます.

結論

この戦略は,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)


もっと