Эта стратегия создает сигнал “покупать или продать” путем скрещивания JURIK Moving Average (JMA) с RSI. Она пытается использовать комбинацию двух индикаторов, чтобы отфильтровать ложные сигналы и торговать, когда тенденция более очевидна.
В этой стратегии используются два основных типа показателей:
Индекс JMA: скользкий скользящий средний с использованием умножения кристаллов, обладающий меньшей задержкой и более быстрым захватом изменения цен.
RSI: наиболее распространенный индикатор силы и слабости, отражающий рыночные покупательские и покупательские силы.
Когда JMA пересекает RSI, это означает, что краткосрочный импульс роста цен сильнее, чем долгосрочная тенденция, что создает сигнал покупки; когда JMA пересекает RSI, это подсказывает сигнал провала.
После появления сигнала перекрёстка сделка открывает позицию в противоположном направлении. Условия заглаживания позиции для цены превышают указанный целевой процент или показатель перекрёстки вновь переворачивается.
Параметры индикатора JMA регулируются и могут быть оптимизированы для разных циклов.
RSI может отфильтровывать ложные прорывы.
Использование комбинации двух показателей позволяет уменьшить количество ложных сигналов.
Встроенные механизмы по удержанию убытков, которые могут ограничить потери.
Настраиваемые коэффициенты прибыли для достижения целевых показателей.
Двойная комбинация показателей inating, частота создания сигнала может быть слишком низкой. Можно скорректировать параметры, чтобы показатели были более чувствительными.
JMA также имеет проблемы с отставанием и может пропустить переломный момент цены.
Неправильная установка стоп-пойнтов может быть нарушена, что может привести к увеличению убытков. Подходящие стоп-пойнты должны быть определены на основе тестирования исторических данных.
В зависимости от показателя может возникнуть ложный сигнал. Можно добавить объем торгов или показатель волатильности для фильтрации.
Тестирование параметров JMA для поиска оптимальной комбинации.
Попробуйте различные параметры RSI Setting, чтобы оптимизировать эффект индикатора.
Включение мобильных механизмов по ограничению убытков, чтобы сделать их более адаптивными.
Оптимизация логики управления складскими позициями, например, добавление условий для наращивания и создания складских помещений.
Изучение других показателей фильтрационных сигналов, таких как 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)