Эта стратегия основана на показателях RVI (Relative Vigor Index) и EMA (Exponential Moving Average). Она длится, когда RVI дает сигнал входа, а быстрая EMA находится выше медленной EMA, и становится короткой, когда RVI дает сигнал входа, а медленная EMA находится выше быстрой EMA, реализуя количественную торговую стратегию, основанную на тренде и условиях перекупки-перепродажи.
Используйте RVI, чтобы судить о условиях перекупления и перепродажи. Когда линия индикатора RVI пересекает линию своего сигнала, это сигнал о перекуплении, чтобы пойти длинным. Когда линия RVI пересекает линию своего сигнала, это сигнал о перепродаже, чтобы пойти коротким.
Используйте двойные EMA для определения направления тренда. Когда быстрая EMA выше медленной EMA, это быстрый тренд. Когда медленная EMA выше быстрой EMA, это медленная тенденция.
Продолжайте продавать только тогда, когда RVI дает сигнал о входе, а EMA показывает рост, а затем продолжайте продавать только тогда, когда RVI дает сигнал о входе, а EMA показывает спад.
Стоп-лосс после длинного хода устанавливается ниже недавнего минимума на расстояние AtrAtrSL, а прибыль от продажи установлена выше недавнего максимума на расстояние от atrСтоп-лосс после короткого выхода устанавливается выше недавнего максимума на расстояние отАТРSL, а прибыль от продажи была установлена ниже недавнего минимума на расстояние от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)