Qué se toca primero, tu stop o tu objetivo
Si el rango de una barra contiene tu stop y tu objetivo, uno se ejecutó y el otro no. El backtest tuvo que elegir. Casi todo lo escrito sobre esto lo adivina; TradingView lo documenta.
La regla
El emulador de bróker deduce el recorrido del precio dentro de la barra según dónde esté la apertura respecto al máximo y al mínimo [1]:
Si el precio de apertura de una barra está más cerca del máximo que del mínimo, el emulador asume que el precio de mercado se movió en este orden: apertura → máximo → mínimo → cierre. Si la apertura está más cerca del mínimo que del máximo, el emulador asume este orden: apertura → mínimo → máximo → cierre. [1]
Así que para una posición larga:
| La apertura está | Recorrido asumido | Qué nivel se alcanza primero |
|---|---|---|
| más cerca del máximo | apertura → máximo → mínimo → cierre | tu objetivo |
| más cerca del mínimo | apertura → mínimo → máximo → cierre | tu stop |
Ese es todo el mecanismo. Es determinista, se puede saber barra por barra, y es una suposición, no una medición.
Por qué importa más de lo que parece
Cualquier estrategia donde un stop y un objetivo puedan caer dentro del rango de una misma barra tiene un backtest decidido en parte por esta heurística. Cuanto más corta sea tu temporalidad respecto a la distancia de tu stop, más a menudo se aplica — una estrategia de scalping con stops ajustados en un instrumento volátil puede tener la mayoría de sus salidas resueltas así.
De ahí se siguen dos cosas, ambas accionables:
Puedes averiguarlo. Abre la List of Trades, toma las salidas y comprueba cuántas están en barras cuyo rango contiene ambos niveles. Si esa fracción es grande, tu curva de capital es en buena medida producto de la regla anterior.
Separar más el stop del objetivo reduce la exposición. No porque los stops amplios sean mejores, sino porque un stop y un objetivo que no pueden caer ambos dentro de una barra no dejan nada que el emulador tenga que adivinar.
Aquí es también exactamente donde difiere MetaTrader 5: su tester puede reproducir ticks reales acumulados por el bróker sin simulación, así que no necesita deducir el recorrido [2]. Ninguno de los dos enfoques está mal, pero no pueden coincidir, y la comparación explica por qué.
Los huecos se tratan como vacíos
Otro comportamiento documentado con consecuencia real: si el precio cruza el nivel de una orden durante el hueco entre el cierre de una barra y la apertura de la siguiente, el emulador asume que dentro del hueco no existen datos intrabarra [1].
Así que un stop dentro de un hueco de fin de semana no se ejecuta a tu precio de stop. Se resuelve cuando el mercado reabre, y la diferencia es el hueco mismo. Cualquier estrategia que mantenga posiciones a través de una pausa de sesión debe esperar que sus pérdidas reales en esas operaciones sean peores que en el backtest.
Solo se ejecuta una orden de salida
Si una sola llamada a strategy.exit() produce más de un tipo de orden de
salida para una entrada, la estrategia ejecuta solo la primera que se activa
y cancela automáticamente las demás [1].
Ese es el comportamiento que quieres, y conviene saberlo porque significa que un stop y un objetivo sobre la misma entrada son genuinamente exclusivos: no puedes ejecutarte en ambos y acabar con una doble salida.
Salidas: absolutas frente a relativas
strategy.exit() acepta tu stop y tu objetivo en dos monedas distintas, y
mezclarlas es como un stop acaba en un sitio que no pretendías.
| Parámetro [1] | Expresado como |
|---|---|
stop | un precio absoluto |
limit | un precio absoluto |
loss | una distancia relativa en ticks |
profit | una distancia relativa en ticks |
trail_price | el precio absoluto en que empieza el trailing |
trail_points | el disparador del trailing como distancia relativa |
trail_offset | a qué distancia del precio va el trailing |
qty / qty_percent | cuánto de la posición cerrar |
from_entry | a qué entrada pertenece esta salida |
De ahí salen dos reglas, y ambas causan fallos reales.
No fijes a la vez la versión absoluta y la relativa del mismo lado. Si pasas
stop y loss juntos, has especificado el stop dos veces, en dos unidades.
Elige uno por lado.
El cero es un valor, no «sin definir». profit = 0 no significa «sin
objetivo»; significa un objetivo a cero ticks, es decir, el precio de entrada. En
v6, cuando una llamada de salida tiene nivel relativo y absoluto, gana el que se
active primero, así que esto ahora sale de inmediato en la entrada en lugar de
quedar anulado. Está en la lista de cambios de v6 justo por eso —
los cambios silenciosos
tienen la tabla. Omite un parámetro para decir «no se usa».
Stops en ticks frente a stops en ATR
Un stop fijo en ticks es la misma distancia en cualquier condición de mercado, lo que significa que es demasiado estrecho con volatilidad alta y demasiado amplio con volatilidad baja. Un stop basado en ATR escala con el rango reciente, así que el mismo código se comporta de forma comparable entre regímenes e instrumentos.
La diferencia práctica para una estrategia convertida: un stop en ticks hay que reajustarlo en cada símbolo al que lo apliques, y uno en ATR en general no. Por eso también un stop en ATR hace que probar entre instrumentos tenga sentido — ver los filtros de ATR y sesión.
Ninguno es «más seguro». Un stop en ATR se ensancha precisamente cuando el mercado está violento, que es cuando quizá más quieras estar fuera.
El tamaño de posición es un control de riesgo, no un ajuste cosmético
default_qty_type decide si tu curva de capital compone [1]:
strategy.fixed— un número constante de contratos. No compone, y es la prueba más difícil de superar.strategy.percent_of_equity— una parte del capital disponible. Compone, y hará que una ventaja mediocre parezca espectacular en un backtest largo.
Si estás juzgando una estrategia en lugar de proyectar rentabilidades, prueba con tamaño fijo. El porcentaje de capital responde a «en qué se habría convertido esto», que es una pregunta distinta y mucho más halagadora.
Y desde v6, margin_long y margin_short valen 100 por defecto, así que una
estrategia que necesita más dinero del disponible no abre la entrada [1]. Una
estrategia v5 que estaba sobreapalancada en silencio simplemente tomará menos
operaciones: sin error, solo una lista de operaciones distinta.
Los límites de riesgo que actúan como interruptor
Más allá de las salidas por operación hay stops a nivel de cuenta, que se
ejecutan en el emulador y no en tu lógica. strategy.risk.allow_entry_in()
restringe en qué dirección puede abrir la estrategia [1] — el uso honesto es
impedir que una idea solo-largos gane dinero en silencio con cortos que nunca
pretendió tomar.
Merece la pena fijarlos a propósito incluso esperando no alcanzarlos nunca, porque la versión de una estrategia que sobrevive a un régimen inesperado suele ser la que tenía un límite que saltó.
Tactix AI — Studio vs Guide
Tactix AI es la marca del asistente de AlfaTactix (abrir Tactix AI).
- Tactix Studio convierte una descripción de estrategia en una frase en un borrador de Timeframe, Señales, Filtros y Riesgo en el Strategy Builder visual. Revisas y editas cada campo antes de que Code Generator escriba MQL5 o Pine Script.
- Tactix Guide explica el paso en el que estás — qué rellenar, qué significa un control o cómo formular una regla — sin volcar código sin probar.
Es automatización form-first: el LLM no sustituye a Code Generator, y conservas límites de plan y validación en tiempo real.

