La estrategia genera una señal de compra y venta a través de la cruz de la media móvil Jurik (JMA) con el indicador RSI. Hacer más cuando JMA supera el RSI y hacer menos cuando JMA supera el RSI. La estrategia trata de utilizar la combinación de los dos indicadores para filtrar las falsas señales y negociar cuando la tendencia es más evidente.
La estrategia se basa en una combinación de dos indicadores:
Indicador JMA: un promedio móvil plano multiplicado por el cubo, con menor retraso y captura de los cambios de precios más rápido.
RSI: Indicador de la fuerza y debilidad más común, que refleja la tendencia de compra y venta en el mercado.
Cuando el JMA cruza el RSI, indica que el impulso al alza de precios a corto plazo es más fuerte que la tendencia a largo plazo, generando una señal de compra; cuando el JMA cruza el RSI, sugiere una señal de baja.
Una vez emitida la señal de cruce, el comercio abre posiciones en la dirección correspondiente. Las condiciones de posición en blanco son que el precio supera el porcentaje de objetivo especificado o el indicador se cruza de nuevo.
Los parámetros del indicador JMA son ajustables y se pueden optimizar para diferentes períodos.
El RSI puede filtrar brechas falsas.
El uso de combinaciones de dos indicadores reduce las falsas señales.
El mecanismo de suspensión de pérdidas integrado permite limitar las pérdidas.
Se puede personalizar el porcentaje de ganancias para alcanzar los objetivos de ganancias.
La combinación de dos indicadores puede generar una frecuencia demasiado baja. Se pueden ajustar los parámetros para que los indicadores sean más sensibles.
El indicador JMA también tiene problemas de retraso y puede perder el punto de inflexión de precios. Se puede optimizar en combinación con otros indicadores pioneros.
La configuración inadecuada del punto de parada puede ser rompida y causar la expansión de las pérdidas. Se debe determinar el punto de parada adecuado en función de las pruebas de datos históricos.
Se puede filtrar el volumen de transacciones o el índice de volatilidad.
Prueba los parámetros de JMA para encontrar la combinación óptima de parámetros.
Prueba diferentes configuraciones de los parámetros RSI para optimizar el efecto del indicador.
La inclusión de un mecanismo móvil de suspensión de pérdidas para que la suspensión sea más adaptable.
Optimización de la lógica de gestión de la posición de almacenaje, como la adición de condiciones de almacenaje y construcción por lotes.
Estudiar otros indicadores de las señales de filtro, como KD, MACD, etc.
La estrategia se basa en el seguimiento de tendencias de los dos indicadores cruzados JMA y RSI, y se puede configurar para limitar el riesgo de stop loss. Sin embargo, todavía existe una cierta probabilidad de señales falsas, y es necesario continuar optimizando los parámetros del indicador y las condiciones de filtrado para reducir los errores de negociación. La estrategia de stop loss también requiere pruebas de optimización en función de los datos de retroalimentación.
/*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)