Únete hoy
ProBacktest/probacktest · proorder

MARKET

MARKET en ProBacktest y ProOrder ejecuta órdenes BUY y SELL al precio de mercado actual. Las órdenes se ejecutan en la apertura del siguiente bar sin límite de precio.

Sintaxis

probuilder
BUY quantity SHARES AT MARKET
SELL quantity SHARES AT MARKET

Cómo funciona

Toda instrucción de orden termina con un tipo de orden. AT MARKET significa que la orden no lleva condición de precio: se ejecuta al precio que el mercado ofrezca en el momento de la ejecución. Las alternativas, LIMIT y STOP, crean en su lugar órdenes pendientes que esperan un nivel de precio concreto.

Como el código de la estrategia se ejecuta una vez por bar al cierre, una orden a mercado generada en un bar se transmite y se ejecuta en la apertura del bar siguiente. ProBacktest lo modela ejecutando al precio de apertura del siguiente bar. En ProOrder en real, la orden llega al bróker en ese momento y se ejecuta al mejor precio disponible, que puede diferir del precio de apertura impreso en mercados rápidos o con poca liquidez.

Una orden a mercado cambia certeza de ejecución por incertidumbre de precio. Encaja con señales en las que estar en la operación importa más que el nivel exacto, como entradas seguidoras de tendencia o salidas forzadas. Cuando el propio nivel de entrada forma parte del edge, una orden pendiente LIMIT o STOP orden expresa mejor esa intención.

AT MARKET se combina con todos los verbos de órdenes: BUY y SELLSHORT para abrir posiciones, SELL y EXITSHORT para cerrarlas.

Ejemplos

Ejemplo 1, Compra inmediata de diez acciones (ProBacktest)

probuilder
// enter when price closes above the 50-bar average
IF NOT OnMarket AND close > Average[50](close) THEN
  BUY 10 SHARES AT MARKET
ENDIF

Cuando no hay posición abierta y la condición se cumple al cierre del bar, se envía una orden de diez acciones que se ejecuta en la apertura del siguiente bar al precio vigente.

Ejemplo 2, Salida forzada de un short a mercado (ProOrder)

probuilder
// cover the short as soon as momentum turns positive
exitSignal = RSI[14](close) crosses under 30

IF ShortOnMarket AND exitSignal THEN
  EXITSHORT AT MARKET
ENDIF

Toda la posición short se cierra a mercado. No se indica cantidad, por lo que se aplica el valor por defecto y se cubre la posición completa.

Ejemplo 3, Cruce de medias móviles en ambas direcciones (ProOrder)

probuilder
fastMA = Average[20](close)
slowMA = Average[50](close)

IF fastMA crosses over slowMA THEN
  IF ShortOnMarket THEN
    EXITSHORT AT MARKET
  ENDIF
  BUY 1 CONTRACT AT MARKET
ENDIF

IF fastMA crosses under slowMA THEN
  IF LongOnMarket THEN
    SELL AT MARKET
  ENDIF
  SELLSHORT 1 CONTRACT AT MARKET
ENDIF

Un sistema stop-and-reverse. Cada cruce cierra cualquier posición contraria y abre una nueva, todo con órdenes a mercado, de modo que la estrategia siempre está posicionada con el cruce.

Errores y trampas habituales

  • Las ejecuciones se producen en la apertura del siguiente bar. La condición se evalúa en el cierre del bar, pero el precio de ejecución es la apertura del siguiente bar. La aritmética de backtest que asume la entrada al cierre del bar de la señal sobrestima los resultados siempre que los bars abren con hueco.
  • Sin garantía de precio. Las órdenes a mercado garantizan la ejecución, no el precio. En real, las ejecuciones pueden desviarse más allá del precio de apertura del backtest en condiciones volátiles, por lo que los resultados reales se degradan respecto a ProBacktest, que asume ejecuciones limpias.
  • SELL y EXITSHORT no son intercambiables. SELL AT MARKET cierra las posiciones long y EXITSHORT AT MARKET cierra shorts. Usar el verbo equivocado para el lado abierto deja la posición intacta.
  • MARKET no es una instrucción independiente. La palabra clave solo existe como parte de una instrucción de orden después de AT. Escribir MARKET en su propia línea no compila.
  • BUY, abre o amplía una posición long.
  • SELL, cierra parte o toda una posición long.
  • SELLSHORT, abre o amplía una posición short.
  • EXITSHORT, cierra parte o toda una posición short.
  • LIMIT, orden pendiente que se ejecuta a un precio fijado o mejor.
  • STOP, orden pendiente que se activa cuando el precio alcanza un nivel.
  • ONMARKET, verdadero mientras hay alguna posición abierta.
  • LONGONMARKET, verdadero mientras hay una posición long abierta.
  • SHORTONMARKET, verdadero mientras hay una posición short abierta.