DEFPARAM
DEFPARAM sets execution parameters for a ProRealTime™ strategy, such as CumulateOrders, FlatBefore, and FlatAfter, and must appear at the top of the code.
Syntaxis
DEFPARAM ParameterName = ValueParameters
| Naam | Type | Standaard | Beschrijving |
|---|---|---|---|
| CumulateOrders | boolean | true | Bij true voegen nieuwe signalen toe aan de open positie. Bij false is er maar één positie tegelijk open en vervangt een nieuw signaal de huidige. |
| FlatBefore | tijd (HHMMSS) | geen | Tijd waarvóór de strategie flat blijft: posities worden gesloten en er worden tot dat tijdstip geen nieuwe orders geplaatst. |
| FlatAfter | tijd (HHMMSS) | geen | Tijd waarna de strategie flat gaat: open posities worden gesloten en er worden voor de rest van de sessie geen nieuwe posities geopend. |
| PreLoadBars | geheel getal | 200 | Aantal historische bars dat vóór de start wordt geladen zodat indicatoren vanaf de eerste geëvalueerde bar data hebben. |
| NoCashUpdate | boolean | false | Bij true veranderen gerealiseerde winsten en verliezen het kapitaal dat voor de position sizing wordt gebruikt niet; dat blijft op de beginwaarde. |
Hoe het werkt
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 bepaalt wat een herhaald instapsignaal betekent. Met de standaardwaarde true stapelt elk signaal nog een order op de positie. Op false zetten dwingt één enkele open positie af, wat het gedrag is dat de meeste strategieën met één instap verwachten.
FlatBefore en FlatAfter beperken de strategie tot een handelsvenster binnen de sessie. Beide nemen een tijd in HHMMSS-formaat, geïnterpreteerd in de lokale tijdzone van de beurs van het instrument. PreLoadBars en NoCashUpdate stellen de simulatie zelf in: hoeveel historie de indicatoren aan het begin kunnen zien, en of de position sizing meegroeit met de resultaten.
Voorbeelden
Voorbeeld 1, Sessievenster met enkele posities (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 PMDeze header houdt de strategie flat buiten 9:00 tot 17:30 beurstijd en vervangt posities bij elk nieuw signaal in plaats van ze te accumuleren.
Voorbeeld 2, Voorgeladen historie voor langzame indicatoren (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
ENDIFHet voorladen van 300 bars betekent dat het 200-perioden gemiddelde geldig is vanaf de eerste geteste bar, en NoCashUpdate houdt de sizing van de backtest constant, ongeacht de opgebouwde winst of verlies.
Voorbeeld 3, Pyramiding met gecumuleerde orders (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
ENDIFMet CumulateOrders aan voegt elke nieuwe crossover een contract toe tot de positielimiet is bereikt, en de uitstap sluit de hele stapel in één keer.
Veelvoorkomende fouten en valkuilen
- DEFPARAM below other code. De directive moet vóór de strategielogica staan. Een DEFPARAM die na uitvoerbare instructies staat wordt bij het compileren geweigerd.
- Vergeten dat CumulateOrders standaard true is. Een strategie die op elke bar van een trend een signaal geeft blijft posities toevoegen, tenzij CumulateOrders expliciet op false wordt gezet. Onverwacht grote posities in een backtest zijn meestal terug te voeren op deze standaardinstelling.
- Verkeerd tijdformaat. FlatBefore en FlatAfter verwachten HHMMSS als een gewoon getal, dus 9:00 AM is 090000 en 5:30 PM is 173000. Waarden worden gelezen in de lokale tijdzone van de beurs, niet die van de machine, wat van belang is bij het traden van buitenlandse markten.
- Te weinig voorgeladen bars. Als PreLoadBars kleiner is dan de langste lookback van een indicator, berekenen de eerste bars indicatoren op onvolledige data en kunnen ze signalen opleveren die afwijken van de grafiek. Zet hem hoger dan de grootste periode die in de code wordt gebruikt.
Gerelateerde instructies
CumulateOrders, de parameter voor orderaccumulatie in detail.FLATBEFORE, de beperking voor het begin van de sessie in detail.FLATAFTER, de beperking voor het einde van de sessie in detail.PRELOADBARS, de parameter voor het voorladen van historie in detail.NOCASHUPDATE, de parameter voor kasverwerking in detail.ONCE, eenmalige variabele-initialisatie binnen de body van het script.