Эта стратегия генерирует торговые сигналы путем скрещивания Jurik Moving Average (JMA) и индикатора RSI. Она длится, когда JMA пересекает выше RSI, и становится короткой, когда пересекает ниже. Стратегия пытается отфильтровать ложные сигналы путем сочетания двух индикаторов и торговать, когда тенденция более очевидна.
Стратегия в основном использует два типа показателей:
Индикатор JMA: сглаженная скользящая средняя с использованием мощных мультипликаторов, с меньшим отставанием и более быстрым отслеживанием изменений цен.
Индикатор RSI: общий индикатор силы, отражающий импульс покупки/продажи.
Когда JMA пересекает RSI, это указывает на более сильный краткосрочный восходящий тренд по сравнению с долгосрочным трендом и генерирует сигнал покупки.
После сигнала стратегия вступает в торговлю в соответствующем направлении. Выходит, когда цена достигает заранее определенного коэффициента прибыли или индикаторы пересекают обратное направление.
Параметры JMA, поддающиеся регулированию и адаптируемые к различным периодам.
РСИ отфильтровывает ложные прорывы.
Сочетание двойных индикаторов уменьшает ложные сигналы.
Встроенное управление потерями.
Устройство коэффициента прибыли для целенаправленного использования прибыли.
Комбинация двойных индикаторов может генерировать слишком мало сигналов, может изменить параметры чувствительности.
JMA все еще имеет отставание, может пропустить переломные моменты.
Неправильное размещение стоп-лосса может привести к большим потерям.
Чрезмерная зависимость от индикаторов может привести к ложным сигналам, увеличению объема или волатильности.
Проверьте параметры JMA для поиска оптимальных настроек.
Попробуйте разные параметры RSI для лучшей производительности.
Добавить механизм задержки для адаптивных остановок.
Оптимизируйте размер входных позиций, как добавление к выигрышным сделкам.
Исследуйте дополнительные фильтры, такие как KD, MACD.
Стратегия позволяет следовать тренду с JMA и RSI перекрестками и ограничивает риск через остановки. Но ложные сигналы остаются вероятными, требуя дальнейшей оптимизации параметров и фильтров. Стоп-лосс также нуждается в проверке обратного теста.
/*backtest start: 2023-01-01 00:00:00 end: 2023-03-15 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // Stratégie marche le mieux sur du 2 jours strategy("JMA(7,50,RSI) crossing RSI(14,close)", overlay=false, currency=currency.EUR, default_qty_type=strategy.cash, default_qty_value=5000) // Strategy Tester Start Time sYear = input(2019, title = "Start Year") sMonth = input(06, title = "Start Month", minval = 01, maxval = 12) sDay = input(01, title = "Start Day", minval = 01, maxval = 31) sHour = input(00, title = "Start Hour", minval = 00, maxval = 23) sMinute = input(00, title = "Start Minute", minval = 00, maxval = 59) startTime = true // Strategy Tester End Time eYear = input(2019, title = "End Year") eMonth = input(12, title = "End Month", minval = 01, maxval = 12) eDay = input(01, title = "End Day", minval = 01, maxval = 31) eHour = input(00, title = "End Hour", minval = 00, maxval = 23) eMinute = input(00, title = "End Minute", minval = 00, maxval = 59) endTime = true // === RSI === src = close, len = input(14, minval=1, title="Length") up = rma(max(change(src), 0), len) down = rma(-min(change(src), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) plot(rsi, color=color.purple) band1 = hline(70) band0 = hline(30) // === JMA === _length = input(7, title="Length") _phase = input(50, title="Phase") _power = input(2, title="Power") highlightMovements = input(true, title="Highlight Movements ?") // srcJMA = input(rsi, title="Source") srcJMA = rsi phaseRatio = _phase < -100 ? 0.5 : _phase > 100 ? 2.5 : _phase / 100 + 1.5 beta = 0.45 * (_length - 1) / (0.45 * (_length - 1) + 2) alpha = pow(beta, _power) jma = 0.0 e0 = 0.0 e0 := (1 - alpha) * srcJMA + alpha * nz(e0[1]) e1 = 0.0 e1 := (srcJMA - e0) * (1 - beta) + beta * nz(e1[1]) e2 = 0.0 e2 := (e0 + phaseRatio * e1 - nz(jma[1])) * pow(1 - alpha, 2) + pow(alpha, 2) * nz(e2[1]) jma := e2 + nz(jma[1]) // === End of JMA def === jmaColor = highlightMovements ? (jma > jma[1] ? color.green : color.red) : #6d1e7f plot(jma, title="JMA switch", linewidth=2, color=jmaColor, transp=0) // === Inputs === // risk management useStop = input(true, title = "Use Initial Stop Loss?") goLong() => crossover(rsi, jma) killLong() => crossunder(rsi, jma) // ======= DEBUGGGGGGGG ============ long_price = 0.0 short_price = 0.0 if(startTime and endTime) if(goLong()) long_price := close strategy.entry("Buy", strategy.long, when = goLong()) strategy.close("Buy", when = killLong() and close > long_price) // Shorting if using goShort() => killLong() killShort() => goLong() if(startTime and endTime) if(goShort()) short_price := close strategy.entry("Sell", strategy.short, when = goShort() and close < short_price) strategy.close("Sell", when = killShort()) // ========================= if (useStop) strategy.exit("XLS", from_entry ="Buy", stop = strategy.position_avg_price / 1.08) strategy.exit("XSS", from_entry ="Sell", stop = strategy.position_avg_price * 1.08)