Индикатор JMA кроссовер RSI индикатор торговая стратегия


Дата создания: 2023-09-18 21:42:50 Последнее изменение: 2023-09-18 21:42:50
Копировать: 0 Количество просмотров: 1340
1
Подписаться
1617
Подписчики

Обзор

Эта стратегия создает сигнал “покупать или продать” путем скрещивания JURIK Moving Average (JMA) с RSI. Она пытается использовать комбинацию двух индикаторов, чтобы отфильтровать ложные сигналы и торговать, когда тенденция более очевидна.

Принципы

В этой стратегии используются два основных типа показателей:

  1. Индекс JMA: скользкий скользящий средний с использованием умножения кристаллов, обладающий меньшей задержкой и более быстрым захватом изменения цен.

  2. RSI: наиболее распространенный индикатор силы и слабости, отражающий рыночные покупательские и покупательские силы.

Когда JMA пересекает RSI, это означает, что краткосрочный импульс роста цен сильнее, чем долгосрочная тенденция, что создает сигнал покупки; когда JMA пересекает RSI, это подсказывает сигнал провала.

После появления сигнала перекрёстка сделка открывает позицию в противоположном направлении. Условия заглаживания позиции для цены превышают указанный целевой процент или показатель перекрёстки вновь переворачивается.

Преимущества

  1. Параметры индикатора JMA регулируются и могут быть оптимизированы для разных циклов.

  2. RSI может отфильтровывать ложные прорывы.

  3. Использование комбинации двух показателей позволяет уменьшить количество ложных сигналов.

  4. Встроенные механизмы по удержанию убытков, которые могут ограничить потери.

  5. Настраиваемые коэффициенты прибыли для достижения целевых показателей.

Риски и решения

  1. Двойная комбинация показателей inating, частота создания сигнала может быть слишком низкой. Можно скорректировать параметры, чтобы показатели были более чувствительными.

  2. JMA также имеет проблемы с отставанием и может пропустить переломный момент цены.

  3. Неправильная установка стоп-пойнтов может быть нарушена, что может привести к увеличению убытков. Подходящие стоп-пойнты должны быть определены на основе тестирования исторических данных.

  4. В зависимости от показателя может возникнуть ложный сигнал. Можно добавить объем торгов или показатель волатильности для фильтрации.

Оптимизация

  1. Тестирование параметров JMA для поиска оптимальной комбинации.

  2. Попробуйте различные параметры RSI Setting, чтобы оптимизировать эффект индикатора.

  3. Включение мобильных механизмов по ограничению убытков, чтобы сделать их более адаптивными.

  4. Оптимизация логики управления складскими позициями, например, добавление условий для наращивания и создания складских помещений.

  5. Изучение других показателей фильтрационных сигналов, таких как 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)