Scripting: escribir una estrategia

Un script de estrategia define decide(bars, params, ctx, state) y devuelve una decisión por barra cerrada. Esa decisión mueve la cuenta de evaluación simulada y nada más.

Senzoukria · Documentación · Actualizado en septiembre de 2026


Dónde encontrarlo

Dónde
Página Scripting → Nueva estrategia
Punto de entrada
decide(bars, params, ctx, state), que devuelve una decisión o null
Cadencia
Una vez por barra cerrada: la barra en formación nunca se pasa
Cuenta
La cuenta de evaluación simulada de esta máquina; la plataforma no envía ninguna orden a un bróker
Lenguajes
JavaScript y Python comparten el mismo punto de entrada y la misma forma de decisión

Qué hace

Una estrategia se ejecuta en el mismo entorno aislado que un indicador. Detrás de tu código se añade un envoltorio corto —detrás, para que los números de línea sigan siendo los que ves en el editor— que llama a decide(), normaliza lo que vuelve y arrastra el objeto state hasta la barra siguiente.

Si decide() no está definida, la ejecución falla con un mensaje que dice que una estrategia debe definir decide(bars, params, ctx, state). Si devuelve undefined o null, esa es una respuesta válida que significa «ninguna operación en esta barra», y la cinta de ejecución informa «Ninguna operación en esta muestra».

El contexto lleva la posición simulada, un indicador de plano y el tamaño de tick, de modo que las distancias se expresan en ticks y el mismo script funciona en otro contrato sin tocar nada.

El objeto decisión

Lo que decide() puede devolver
CampoPor defectoQué cambia
action: "buy"Abre un largo a mercado en la cuenta simulada, sujeto a las salvaguardas de la cuenta.
action: "sell"Abre un corto a mercado, sujeto a las mismas salvaguardas.
action: "close"Cierra la posición abierta; inofensivo si ya estás plano.
qty1Contratos. Se trunca y se acota a 1 como mínimo.
stopTicksningunoDistancia de salida del lado de la pérdida, en ticks desde el precio de ejecución.
targetTicksningunoDistancia de salida del lado del beneficio, en ticks.
nullNinguna operación en esta barra.
state{}Todo lo que guardes en el objeto state se te devuelve en la barra siguiente; se borra cuando cambia el script.

Cómo usarlo

  • Parte de la plantilla de estrategia Ruptura: compra la ruptura del máximo de N barras con stop y objetivo fijos, y muestra cómo usar el estado arrastrado para contar las barras que llevas en posición.
  • Prueba primero con los datos de ejemplo: una ejecución de estrategia informa de si se devolvió alguna decisión, que es la vía más rápida para encontrar una condición que nunca se dispara.
  • Después móntala en el panel de estrategia automática del Replay para verla decidir barra a barra sobre datos reales reproducidos.
  • Expresa el riesgo en ticks, no en precios: el tamaño de tick llega en el contexto y la cuenta traduce la distancia a un nivel de salida.

Límites y trampas

  • Las salvaguardas de la cuenta se aplican antes de cualquier entrada: un drawdown superado, un límite de pérdida diaria alcanzado o un tope de contratos excedido la rechazan, y el panel muestra el motivo.
  • Un valor de retorno que no sea una decisión reconocida se informa como tal, nombrando las formas aceptadas.
  • Como las decisiones se toman sobre barras cerradas, una estrategia no puede actuar sobre un movimiento intrabarra: eso es lo que mantiene comparables una ejecución en simulado y un backtest del mismo código.
  • Ningún script puede llegar a un bróker. Una estrategia aquí es una estrategia en papel, y ningún resultado que produzca es una promesa sobre el trading real.

Esta página en otros idiomas

Preguntas frecuentes

¿Se puede escribir una estrategia en Python?
Sí. El envoltorio existe en cada lenguaje y se añade en el lenguaje del script, así que una estrategia Python recibe un envoltorio Python. Escribe las claves de decisión como stopTicks y targetTicks: el panel de estrategia automática lee esas. El bucle de backtest en Python también acepta stop_ticks y target_ticks.
¿Cómo conservo un valor entre barras?
Escríbelo en el objeto state que se pasa como cuarto argumento. Se te devuelve en la llamada siguiente y se reinicia cuando cambias de script.
¿Por qué se rechazó mi compra?
O una salvaguarda de la cuenta la bloqueó —el motivo se imprime— o no había precio en directo para el símbolo, y en ese caso la entrada espera en vez de inventarse una ejecución.