Comisión, slippage y capital en Pine (strategy() + Generator)

Define initial_capital, commission, slippage y pyramiding alineado con Step 5 — en Code Generator y Properties antes de confiar en el Tester.

📖 5 min read

📝 923 words

🏷️ Pine Script and TradingView

Compartir este artículo:

Los cuatro parámetros que deciden tu backtest

Los costes en Pine viven en la declaración strategy(), no en la lógica. Una estrategia con entradas perfectas y sin costes configurados no es un backtest optimista: es el backtest de un mercado que no te cobra por operar.

ParámetroQué fijaValores [1]
commission_valuecoste por operaciónun número, interpretado por commission_type
commission_typecómo se lee ese númerostrategy.commission.percent o strategy.commission.cash_per_contract
slippagemovimiento de precio entre orden y ejecuciónticks, no puntos ni divisa
initial_capitalfondos inicialesun número

Dos se malinterpretan constantemente.

slippage va en ticks [1]. No en pips, ni en divisa, ni en porcentaje. Un tick es el incremento mínimo de precio del instrumento, así que el mismo número significa cosas muy distintas en EURUSD y en un CFD de índice. Equivocarse por un factor de diez es fácil y silencioso.

commission_type cambia por completo lo que significa commission_value. Con strategy.commission.percent, commission_value = 0.1 es una décima de por ciento del valor de la operación. Con strategy.commission.cash_per_contract ese mismo 0.1 son diez céntimos por unidad. Fija uno y asume el otro y el backtest se equivoca por órdenes de magnitud.

El tamaño de posición forma parte del cuadro de costes

default_qty_type acepta strategy.fixed — un número constante de contratos — o strategy.percent_of_equity, una parte del capital disponible [1]. default_qty_value es el número que lo acompaña.

Esa elección decide si tu curva compone. El porcentaje de capital compone y hará que una ventaja mediocre parezca espectacular en un backtest largo; el tamaño fijo no, y es la prueba más difícil de superar.

Controles de ejecución que cambian resultados sin cambiar la lógica

ParámetroEfecto [1]
pyramidingmáximo de entradas simultáneas desde strategy.entry()por defecto 1
process_orders_on_closeejecuta al cierre de la barra en lugar de la apertura siguiente
calc_on_order_fillsrecalcula al ejecutarse órdenes, permitiendo ejecución intrabarra

Que pyramiding valga 1 por defecto conviene saberlo antes de depurar «por qué no entró mi segunda orden». No era tu condición: era la declaración.

Una advertencia oficial que merece repetirse

TradingView afirma con claridad que los tipos de gráfico no estándar producen resultados poco realistas por defecto, y que deben usarse gráficos estándar para un backtest realista [1]. Heikin Ashi y Renko en particular producirán una curva que no puede reproducirse con ejecuciones reales.


Elegir valores que puedas defender

No existe un número de comisión correcto que copiar. Los spreads, las comisiones y el slippage habitual difieren por bróker, por instrumento y por tipo de cuenta, así que cualquier cifra publicada aquí sería incorrecta para la mayoría de lectores de una forma que no podrían ver. Lo que se transfiere es el método.

Toma los números de tu propia cuenta, no de un artículo. Tu bróker publica su tabla de comisiones y el spread típico por instrumento. Ese es el dato. Si no lo encuentras, eso ya es algo que conviene saber antes de arriesgar capital.

Fija el slippage desde el tamaño de tick del instrumento, no por costumbre. El slippage va en ticks [1], así que empieza por lo que vale un tick en el instrumento que pruebas y decide después cuántos ticks te cuesta una ejecución realista al tamaño y en la sesión en que realmente operas.

Prueba la estrategia con más de un nivel de coste. Este es el paso que separa una ventaja de un artefacto. Ejecuta la misma estrategia con tus costes esperados y otra vez con aproximadamente el doble. Una estrategia que sobrevive a ambos es interesante. Una que solo funciona con la cifra baja te está diciendo que todo su resultado es la suposición de coste.

Leer el resultado con honestidad

Dos preguntas para cualquier backtest una vez incluidos los costes:

¿Cuánto del beneficio se comieron los costes? Compara neto con bruto. Una estrategia cuyos costes consumen casi toda una ventaja bruta pequeña es una estrategia cuyo resultado depende de conseguir mejores ejecuciones de las que vas a conseguir.

¿Tiene sentido el número de operaciones para ese modelo de costes? Los costes escalan con la frecuencia. Un resultado de alta frecuencia es mucho más sensible a un pequeño error en el slippage que uno de posición, así que una estrategia de scalping necesita la estimación más precisa, que es justo el caso en que es más difícil.

El punto académico, dicho con cuidado

La evidencia revisada sobre reglas técnicas encuentra un panorama mucho más débil una vez contabilizados los costes de transacción [2]. Ese es el hallazgo, y merece citarse precisamente porque es incómodo: no que las reglas nunca funcionen, sino que los resultados antes de costes no son evidencia de nada.

Por eso los parámetros de coste merecen más atención que la lógica de entrada que tienen encima.



Tactix AI en este flujo

AlfaTactix incluye Tactix AI: usa Tactix Studio para describir tu idea en lenguaje natural y rellenar timeframes, señales, filtros y riesgo en el mismo formulario de seis pasos — o abre Tactix Guide en cualquier paso si solo necesitas explicar un campo. Revisa cada valor y luego exporta MQL5 o Pine Script desde Code Generator (form-first — no prompt-to-code sin probar).

Preguntas frecuentes

En strategy() y Properties. strategy() [1]. Editor · Tester.

Coste realista del broker, no cero. Variaciones.

No exactamente. Spread live UNSUPPORTED. Filtros.

Alineado con maxOpenPositions de Step 5.

Park e Irwin (2007) (DOI [2]).

Referencias

  1. TradingView. Strategies. https://www.tradingview.com/pine-script-docs/concepts/strategies
  2. Park, C.-H., & Irwin, S. H. (2007), Journal of Economic Surveys. What do we know about the profitability of technical analysis?. https://doi.org/10.1111/j.1467-6419.2007.00519.x