Стратегия торговли биткоинами на основе RVI и EMA


Дата создания: 2024-02-22 13:50:17 Последнее изменение: 2024-02-22 13:50:17
Копировать: 0 Количество просмотров: 776
1
Подписаться
1617
Подписчики

Стратегия торговли биткоинами на основе RVI и EMA

Обзор

Стратегия построена на двух показателях: RVI (индекс относительной силы) и EMA (индекс движущейся средней). Она позволяет RVI быть выгодной, а быстрая EMA - более низкой, а быстрая EMA - более низкой, реализуя количественную торговую стратегию, основанную на тренде и перекупе перепродаже.

Стратегический принцип

  1. Используйте RVI, чтобы определить перекуп и перепродажу. Сделайте больше для сигнала перекупа, когда проходите его по сигнальной линии на RVI-индикаторной линии; сделайте пустоту для сигнала перепродажи, когда проходите его по сигнальной линии под RVI-индикаторной линии.

  2. Используйте двойную ЭМА для определения направления тренда. Когда быстрая ЭМА находится выше медленной ЭМА, она является позивной, а когда медленная ЭМА находится выше быстрой ЭМА, она является нисходящей.

  3. Проведение многоопераций осуществляется только в том случае, если RVI допускает прибыль, а EMA считает, что она является положительной, и только в том случае, если RVI допускает прибыль, а EMA считает, что она является отрицательной.

  4. Стоп-потеря после переделывания находится ниже последнего минимумаatr*расстояние atrSL, остановка расположена выше ближайшей высотыatr*atrTP расстояние; стоп-потери после дефолта находятся выше ближайшего максимумаatr*расстояние atrSL, остановка находится ниже ближайшего минимума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)