estrategia · código abierto
Estrategia de cruce de EMAs (9 / 21)
Estrategia de cruce de EMAs 9/21: compra el cruce alcista y sal en el bajista, con bracket 2%/6%. Reglas, código y backtest con costes. Gratis en el navegador. Deepwick Script ejecuta un subconjunto de Pine Script.
Reglas de entrada y salida
- Solo largos y una posición a la vez (
strategy.position_size == 0antes de entrar). Las señales se evalúan al cierre de la vela; Deepwick ejecuta las órdenes de mercado en la apertura de la vela siguiente. - EMA rápida =
ta.ema(close, 9), EMA lenta =ta.ema(close, 21). - Entrada: sin posición y cuando la EMA rápida cruza por encima de la lenta, compra en la apertura siguiente.
- Señal de salida: la EMA rápida cruza por debajo de la lenta → cierre en la apertura siguiente.
- Bracket de protección desde el precio medio de entrada: stop-loss un 2% por debajo y take-profit un 6% por encima (inputs
Stop Loss %yTake Profit %; Take Profit % = 0 desactiva el objetivo). Stops y objetivos se comprueban siguiendo el recorrido de la vela (apertura → extremo más cercano → extremo más lejano → cierre). - Tamaño y costes en
strategy(): capital inicial 10.000, 10% del capital por operación, comisión del 0,05% por ejecución, slippage no definido (0 por defecto). Los backtests guardados pagan además medio spread real en cada ejecución de mercado y de stop.
Referencia del lenguaje: Deepwick Script.
Ajustes por defecto
| Ajuste | Valor | Mín. | Máx. |
|---|---|---|---|
Fast EMA | 9 | 2 | 50 |
Slow EMA | 21 | 10 | 200 |
Stop Loss % | 2 | 0.5 | 10 |
Take Profit % | 6 | 0 | 20 |
Cómo ejecuta Deepwick esta estrategia
- Las órdenes de mercado se ejecutan en la apertura de la vela siguiente.
- Stops y límites siguen el recorrido de la vela: apertura → extremo más cercano → extremo más lejano → cierre.
- Los gaps se ejecutan en la apertura.
- La comisión se cobra en cada ejecución, y el slippage se aplica a las órdenes de mercado y de stop, según lo definido en
strategy().
Código fuente
Deepwick Script (un subconjunto de Pine Script)
//@version=5
strategy("EMA Crossover", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.05)
fast = input.int(9, "Fast EMA", minval=2, maxval=50, step=1)
slow = input.int(21, "Slow EMA", minval=10, maxval=200, step=1)
stopPct = input.float(2, "Stop Loss %", minval=0.5, maxval=10, step=0.1)
tpPct = input.float(6, "Take Profit %", minval=0, maxval=20, step=0.1)
colorMid = input.color("color.orange", "Color Mid")
colorLine = input.color("color.blue", "Color Line")
colorUp = input.color("color.green", "Color Up")
colorDown = input.color("color.red", "Color Down")
fastE = ta.ema(close, fast)
slowE = ta.ema(close, slow)
longSignal = strategy.position_size == 0 and ta.crossover(fastE, slowE)
exitSignal = strategy.position_size > 0 and ta.crossunder(fastE, slowE)
if longSignal
strategy.entry("Long", strategy.long)
if strategy.position_size > 0
strategy.exit("Risk", stop=stopPct > 0 ? strategy.position_avg_price * (1 - stopPct / 100) : na, limit=tpPct > 0 ? strategy.position_avg_price * (1 + tpPct / 100) : na)
if exitSignal
strategy.close("Long", comment="EMA cross down")
p_Fast_EMA = plot(fastE, "Fast EMA", color=colorMid, linewidth=2)
p_Slow_EMA = plot(slowE, "Slow EMA", color=colorLine, linewidth=2)
plotshape(longSignal, "Long", style=shape.triangleup, location=location.belowbar, color=colorUp, text="L")
plotshape(exitSignal, "Exit", style=shape.triangledown, location=location.abovebar, color=colorDown, text="X")
alertcondition(longSignal, "EMA long entry", "Fast EMA crossed above slow EMA")
alertcondition(exitSignal, "EMA exit", "Fast EMA crossed below slow EMA")
Pruébala en Deepwick
- Abre un gráfico de cualquier cripto o CFD.
- Pulsa «Scripts» y añade esta estrategia.
- Pulsa «Run» y revisa las operaciones en el Strategy Tester.
Preguntas frecuentes
¿Qué cruce de EMAs es mejor, 9/21 o 50/200?
Ninguno en general. 9/21 opera a menudo y sirve para pruebas intradía o swing; 50/200 es el estilo lento de golden cross (ver la página de cruce de SMAs). Compáralos con el mismo símbolo, periodo y costes, y mira operaciones, drawdown y profit factor, no solo el beneficio neto.
¿Por qué pierde el cruce de EMAs en rangos?
En lateral las EMAs se cruzan una y otra vez, y cada cruce paga comisión y spread. Por eso la tabla del backtest muestra costes y número de operaciones junto al beneficio neto.
¿Puedo añadir un filtro de tendencia?
Sí. Un cambio habitual es tomar solo cruces con el precio por encima de una media larga, p. ej. close > ta.ema(close, 200). Añádelo a la condición de entrada y repite el backtest con los mismos costes.