Únete hoy
Instrucciones/probacktest · proorder

DEFPARAM

DEFPARAM sets execution parameters for a ProRealTime™ strategy, such as CumulateOrders, FlatBefore, and FlatAfter, and must appear at the top of the code.

Sintaxis

probuilder
DEFPARAM ParameterName = Value

Parámetros

NombreTipoPor defectoDescripción
CumulateOrdersbooleanotrueCuando es true, las nuevas señales se añaden a la posición abierta. Cuando es false, solo hay una posición abierta a la vez y una nueva señal reemplaza la actual.
FlatBeforehora (HHMMSS)ningunoHora antes de la cual la estrategia permanece sin posición: las posiciones se cierran y no se colocan nuevas órdenes hasta esa hora.
FlatAfterhora (HHMMSS)ningunoHora a partir de la cual la estrategia se queda sin posición: las posiciones abiertas se cierran y no se abren nuevas posiciones durante el resto de la sesión.
PreLoadBarsentero200Número de bars históricos cargados antes del inicio para que los indicadores tengan datos desde el primer bar evaluado.
NoCashUpdatebooleanofalseCuando es true, las ganancias y pérdidas realizadas no modifican el capital utilizado para el position size, que se mantiene en su valor inicial.

Cómo funciona

DEFPARAM lines are directives, not per-bar instructions. They are read when the strategy starts and fix its execution environment for the whole run. Place them at the top of the code, before any variable assignments or trading logic, one parameter per line.

CumulateOrders determina qué significa una señal de entrada repetida. Con el valor por defecto true, cada señal apila otra orden sobre la posición. Fijarlo en false obliga a una única posición abierta, que es el comportamiento que esperan la mayoría de las estrategias de entrada única.

FlatBefore y FlatAfter restringen la estrategia a una ventana de negociación dentro de la sesión. Ambos toman una hora en formato HHMMSS, interpretada en la zona horaria local del mercado del instrumento. PreLoadBars y NoCashUpdate ajustan la simulación en sí: cuánto histórico pueden ver los indicadores al inicio y si el position size se compone con los resultados.

Ejemplos

Ejemplo 1, Ventana de sesión con posiciones únicas (ProOrder)

probuilder
DEFPARAM CumulateOrders = false  // one position at a time
DEFPARAM FlatBefore = 090000     // stay flat before 9:00 AM
DEFPARAM FlatAfter = 173000      // go flat after 5:30 PM

Esta cabecera mantiene la estrategia sin posición fuera del intervalo de 9:00 a 17:30 hora del mercado y reemplaza, en lugar de acumular, las posiciones en cada nueva señal.

Ejemplo 2, Histórico precargado para indicadores lentos (ProBacktest)

probuilder
DEFPARAM PreLoadBars = 300   // enough history for the 200-bar average
DEFPARAM NoCashUpdate = true // size positions on initial capital only
ma = Average[200](close)
IF close CROSSES OVER ma AND NOT onmarket THEN
  BUY 1 CONTRACT AT MARKET
ENDIF
IF close CROSSES UNDER ma THEN
  SELL AT MARKET
ENDIF

Precargar 300 bars significa que la media de 200 periodos es válida desde el primer bar probado, y NoCashUpdate mantiene constante el tamaño de posición del backtest independientemente de las ganancias o pérdidas acumuladas.

Ejemplo 3, Piramidación con órdenes acumuladas (ProOrder)

probuilder
DEFPARAM CumulateOrders = true  // allow entries to stack
IF close CROSSES OVER Average[20](close) AND countofposition < 3 THEN
  // add one contract per signal, up to three
  BUY 1 CONTRACT AT MARKET
ENDIF
IF close CROSSES UNDER Average[50](close) THEN
  SELL AT MARKET
ENDIF

Con CumulateOrders activado, cada nuevo cruce añade un contrato hasta alcanzar el límite de posición, y la salida cierra toda la pila de una vez.

Errores y trampas habituales

  • DEFPARAM below other code. La directiva debe preceder a la lógica de la estrategia. Un DEFPARAM colocado después de instrucciones ejecutables se rechaza en tiempo de compilación.
  • Olvidar que CumulateOrders es true por defecto. Una estrategia que genera señal en cada bar de una tendencia seguirá añadiendo posiciones a menos que CumulateOrders se fije explícitamente en false. Las posiciones inesperadamente grandes en un backtest suelen deberse a este valor por defecto.
  • Formato de hora incorrecto. FlatBefore y FlatAfter esperan HHMMSS como un número simple, así que 9:00 AM es 090000 y 5:30 PM es 173000. Los valores se leen en la zona horaria local del mercado, no en la de la máquina, lo que importa al operar en mercados extranjeros.
  • Demasiados pocos bars precargados. Si PreLoadBars es menor que el periodo de cálculo más largo de un indicador, las primeras bars calculan los indicadores con datos parciales y pueden producir señales distintas a las del gráfico. Fíjalo por encima del periodo mayor usado en el código.
  • CumulateOrders, el parámetro de acumulación de órdenes en detalle.
  • FLATBEFORE, la restricción de inicio de sesión en detalle.
  • FLATAFTER, la restricción de fin de sesión en detalle.
  • PRELOADBARS, el parámetro de precarga de histórico en detalle.
  • NOCASHUPDATE, el parámetro de gestión del efectivo en detalle.
  • ONCE, inicialización de variables una sola vez dentro del cuerpo del script.