DEFPARAM
DEFPARAM sets execution parameters for a ProRealTime™ strategy, such as CumulateOrders, FlatBefore, and FlatAfter, and must appear at the top of the code.
Syntaxe
DEFPARAM ParameterName = ValueParamètres
| Nom | Type | Par défaut | Description |
|---|---|---|---|
| CumulateOrders | booléen | true | Si true, les nouveaux signaux s'ajoutent à la position ouverte. Si false, une seule position est ouverte à la fois et un nouveau signal remplace la position actuelle. |
| FlatBefore | heure (HHMMSS) | aucun | Heure avant laquelle la stratégie reste hors position : les positions sont fermées et aucun nouvel ordre n'est placé avant cette heure. |
| FlatAfter | heure (HHMMSS) | aucun | Heure après laquelle la stratégie se met hors position : les positions ouvertes sont fermées et aucune nouvelle position n'est ouverte pour le reste de la séance. |
| PreLoadBars | entier | 200 | Nombre de bars d'historique chargés avant le début pour que les indicateurs disposent de données dès le premier bar évalué. |
| NoCashUpdate | booléen | false | Si true, les gains et pertes réalisés ne modifient pas le capital utilisé pour la position size, qui reste à sa valeur initiale. |
Comment ça marche
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 détermine ce que signifie un signal d'entrée répété. Avec la valeur par défaut true, chaque signal empile un ordre supplémentaire sur la position. Le mettre à false impose une seule position ouverte, ce qui est le comportement attendu par la plupart des stratégies à entrée unique.
FlatBefore et FlatAfter limitent la stratégie à une fenêtre de trading à l'intérieur de la séance. Tous deux prennent une heure au format HHMMSS, interprétée dans le fuseau horaire local de la place de cotation de l'instrument. PreLoadBars et NoCashUpdate règlent la simulation elle-même : la quantité d'historique que les indicateurs peuvent voir au départ, et si la position size se compose avec les résultats.
Exemples
Exemple 1, Fenêtre de séance avec positions uniques (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 PMCet en-tête maintient la stratégie hors position en dehors de 9:00 à 17:30 heure de la place de cotation et remplace les positions à chaque nouveau signal plutôt que de les accumuler.
Exemple 2, Historique préchargé pour indicateurs lents (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
ENDIFPrécharger 300 bars signifie que la moyenne à 200 périodes est valide dès le premier bar testé, et NoCashUpdate maintient constante la taille des positions du backtest, quels que soient les gains ou pertes accumulés.
Exemple 3, Pyramidage avec ordres cumulés (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
ENDIFAvec CumulateOrders activé, chaque nouveau croisement ajoute un contrat jusqu'à ce que la limite de position soit atteinte, et la sortie ferme l'ensemble de la pile en une seule fois.
Erreurs et pièges courants
- DEFPARAM below other code. La directive doit précéder la logique de la stratégie. Un DEFPARAM placé après des instructions exécutables est rejeté à la compilation.
- Oublier que CumulateOrders vaut true par défaut. Une stratégie qui émet un signal sur chaque bar d'une tendance continuera d'ajouter des positions à moins que CumulateOrders ne soit explicitement mis à false. Des positions anormalement grandes dans un backtest viennent généralement de cette valeur par défaut.
- Mauvais format d'heure. FlatBefore et FlatAfter attendent HHMMSS sous forme de nombre simple, donc 9:00 AM s'écrit 090000 et 5:30 PM s'écrit 173000. Les valeurs sont lues dans le fuseau horaire local de la place de cotation, pas celui de la machine, ce qui importe lorsqu'on trade des marchés étrangers.
- Trop peu de bars préchargés. Si PreLoadBars est inférieur au plus long historique d'indicateur, les premières barres calculent les indicateurs sur des données partielles et peuvent produire des signaux différents de ceux du graphique. Réglez-le au-dessus de la plus grande période utilisée dans le code.
Instructions liées
CumulateOrders, le paramètre d'accumulation des ordres en détail.FLATBEFORE, la contrainte de début de séance en détail.FLATAFTER, la contrainte de fin de séance en détail.PRELOADBARS, le paramètre de préchargement de l'historique en détail.NOCASHUPDATE, le paramètre de gestion du capital en détail.ONCE, initialisation unique de variable dans le corps du script.