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
DEFPARAM ParameterName = ValueParámetros
| Nombre | Tipo | Por defecto | Descripción |
|---|---|---|---|
| CumulateOrders | booleano | true | Cuando 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. |
| FlatBefore | hora (HHMMSS) | ninguno | Hora antes de la cual la estrategia permanece sin posición: las posiciones se cierran y no se colocan nuevas órdenes hasta esa hora. |
| FlatAfter | hora (HHMMSS) | ninguno | Hora 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. |
| PreLoadBars | entero | 200 | Número de bars históricos cargados antes del inicio para que los indicadores tengan datos desde el primer bar evaluado. |
| NoCashUpdate | booleano | false | Cuando 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)
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 PMEsta 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)
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
ENDIFPrecargar 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)
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
ENDIFCon 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.
Instrucciones relacionadas
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.