Esta estrategia genera señales comerciales cruzando el promedio móvil de Jurik (JMA) y el indicador RSI. Se hace largo cuando el JMA cruza por encima del RSI y se hace corto cuando se cruza por debajo.
La estrategia utiliza principalmente dos tipos de indicadores:
Indicador JMA: promedio móvil suavizado utilizando multiplicadores de potencia, con menor retraso y más rápido en la captura de los cambios de precios.
Indicador RSI: Indicador común de fuerza que refleja el impulso de compra/venta.
Cuando JMA cruza por encima del RSI, indica una tendencia alcista a corto plazo más fuerte que la tendencia a largo plazo y genera una señal de compra.
Al recibir la señal, la estrategia entra en el comercio en la dirección correspondiente, y sale cuando el precio alcanza una relación de ganancia predeterminada o los indicadores cruzan la dirección inversa.
Parámetros ajustables de la JMA adaptables a diferentes períodos.
El RSI filtra las fugas falsas.
La combinación de indicadores dobles reduce las señales falsas.
Control de pérdida de parada incorporado.
Indicador de rentabilidad para la orientación a la rentabilidad.
La combinación de dos indicadores puede generar muy pocas señales.
JMA todavía tiene retraso, puede perder puntos de inflexión.
La colocación incorrecta de la parada de pérdida puede ser golpeada para una mayor pérdida.
La dependencia excesiva de los indicadores puede producir señales falsas, puede añadir filtros de volumen o volatilidad.
Prueba los parámetros de JMA para encontrar los ajustes óptimos.
Pruebe diferentes parámetros de RSI para un mejor rendimiento.
Añadir el mecanismo de parada trasera para las paradas adaptativas.
Optimice el tamaño de la posición de entrada como añadir a las operaciones ganadoras.
Investiga filtros adicionales como KD, MACD.
La estrategia permite seguir la tendencia con los cruces de JMA y RSI y limita el riesgo a través de paradas. Pero las señales falsas siguen siendo probables, lo que requiere una mayor optimización de los parámetros y filtros. La pérdida de parada también necesita validación de pruebas posteriores. Proporciona un marco básico para el sistema de cruce de indicadores duales con margen para mejoras.
/*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)