LONGONMARKET
LONGONMARKET en ProBacktest y ProOrder devuelve verdadero mientras una posición long está abierta. Se utiliza para proteger entradas, salidas y la gestión del stop en el código de la estrategia.
Sintaxis
LongOnMarketCómo funciona
LONGONMARKET no toma argumentos y devuelve verdadero cuando la estrategia mantiene actualmente una posición long, independientemente de su tamaño. Devuelve falso cuando la estrategia está sin posición y también cuando está short; su equivalente en el lado short es SHORTONMARKET, y ONMARKET cubre ambas direcciones a la vez.
El valor refleja solo las órdenes ejecutadas. Una entrada limitada o stop pendiente que no se ha ejecutado deja LONGONMARKET en false hasta que se produce la ejecución. Con CumulateOrders activado, varias entradas long acumuladas se siguen leyendo como un único valor true; usa COUNTOFPOSITION para inspeccionar el position size.
Los dos patrones estándar son IF NOT LongOnMarket THEN ... ENDIF para evitar entradas long duplicadas, y IF LongOnMarket THEN ... ENDIF para que el código de salida o de gestión de stops se ejecute solo mientras una operación long está abierta.
Ejemplos
Ejemplo 1, Protección de entrada contra longs duplicados (ProBacktest)
// Open a long only when no long position is already held
IF NOT LongOnMarket THEN
BUY 1 LOT AT MARKET TomorrowOpen
ENDIFSin la protección, la estrategia enviaría una nueva orden de compra en cada bar. Este es el ejemplo de la referencia oficial.
Ejemplo 2, Sistema de media móvil con protecciones de entrada y salida (ProOrder)
DEFPARAM CumulateOrders = false
fastMA = Average[20](close)
slowMA = Average[50](close)
// Enter long on a bullish cross, only when flat
IF NOT LongOnMarket AND fastMA CROSSES OVER slowMA THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Exit the long on a bearish cross
IF LongOnMarket AND fastMA CROSSES UNDER slowMA THEN
SELL AT MARKET
ENDIFCada bloque está condicionado al estado de la posición, por lo que las entradas solo se activan sin posición y las salidas solo mientras se está long.
Ejemplo 3, Gestión del stop limitada a longs abiertos (ProOrder)
// Promote the stop to breakeven after 15 points of open profit
IF LongOnMarket THEN
IF close - tradeprice >= 15 * pointsize THEN
SET STOP BREAKEVEN
ENDIF
ENDIFLas instrucciones de gestión de posición como SET STOP BREAKEVEN requieren una posición abierta, por lo que la protección LONGONMARKET evita errores de ejecución cuando no hay posición.
Errores y trampas habituales
- Suponer que falso significa estar sin posición. LONGONMARKET es false tanto cuando la estrategia está fuera de mercado como cuando está short. El código que solo deba ejecutarse cuando no hay ninguna posición abierta debe comprobar
NOT OnMarketen su lugar. - Las órdenes pendientes no cuentan. Entre la colocación de una entrada limitada o stop y su ejecución, LONGONMARKET permanece falso, por lo que un bloque de entrada sin protección puede encolar órdenes adicionales. LongTriggered ayuda a detectar el bar en el que se ejecutó una entrada long.
- Sin información de tamaño. El flag no dice nada sobre cuántos contratos se mantienen. La lógica de pirámide que acumula entradas bajo
CumulateOrdersnecesita COUNTOFPOSITION para limitar la exposición. - Ámbito incorrecto. Pegar fragmentos de estrategia en un indicador arrastra LONGONMARKET, y el indicador entonces no compila. El estado de posición solo existe en ProBacktest y ProOrder.
Instrucciones relacionadas
ONMARKET, verdadero mientras cualquier posición esté abierta, long o short.SHORTONMARKET, verdadero mientras hay una posición short abierta.MARKET, ejecuta las órdenes al precio de mercado actual.BUY, abre una posición long.SELL, cierra una posición long.LongTriggered, indica que se ejecutó una orden de entrada long.COUNTOFPOSITION, el tamaño de la posición abierta.TRADEPRICE, el precio de ejecución de una operación pasada.