DEFPARAM
DEFPARAM sets execution parameters for a ProRealTime™ strategy, such as CumulateOrders, FlatBefore, and FlatAfter, and must appear at the top of the code.
Syntax
DEFPARAM ParameterName = ValueParametrar
| Namn | Typ | Standard | Beskrivning |
|---|---|---|---|
| CumulateOrders | boolesk | true | När true lägger nya signaler till den öppna positionen. När false är bara en position öppen i taget och en ny signal ersätter den nuvarande. |
| FlatBefore | tid (HHMMSS) | ingen | Tid före vilken strategin förblir flat: positioner stängs och inga nya order läggs förrän denna tid. |
| FlatAfter | tid (HHMMSS) | ingen | Tid efter vilken strategin går flat: öppna positioner stängs och inga nya positioner öppnas under resten av sessionen. |
| PreLoadBars | heltal | 200 | Antal historiska barer som laddas före starten så att indikatorer har data från den första utvärderade baren. |
| NoCashUpdate | boolesk | false | När true ändrar realiserade vinster och förluster inte det kapital som används för position size, vilket förblir vid sitt ursprungliga värde. |
Så fungerar det
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 styr vad en upprepad entrysignal betyder. Med standardvärdet true staplar varje signal ytterligare en order på positionen. Att sätta det till false tvingar fram en enda öppen position, vilket är det beteende som de flesta strategier med en enda entry förväntar sig.
FlatBefore och FlatAfter begränsar strategin till ett handelsfönster inuti sessionen. Båda tar en tid i formatet HHMMSS, tolkad i den lokala tidszonen för instrumentets börs. PreLoadBars och NoCashUpdate justerar själva simuleringen: hur mycket historik indikatorerna kan se vid starten, och om position size räknas upp i takt med resultaten.
Exempel
Exempel 1, Sessionsfönster med enskilda positioner (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 PMDen här rubriken håller strategin flat utanför 9:00 till 17:30 börstid och ersätter, snarare än ackumulerar, positioner vid varje ny signal.
Exempel 2, Förinläst historik för långsamma indikatorer (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
ENDIFAtt förinläsa 300 barer innebär att 200-periodsgenomsnittet är giltigt från den första testade baren, och NoCashUpdate håller backtestets position size konstant oavsett ackumulerad vinst eller förlust.
Exempel 3, Pyramidering med ackumulerade order (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
ENDIFMed CumulateOrders aktiverat lägger varje ny korsning till ett kontrakt till dess att positionstaket nås, och exiten stänger hela stapeln på en gång.
Vanliga fel och fallgropar
- DEFPARAM below other code. Direktivet måste komma före strategilogiken. Ett DEFPARAM som placeras efter körbara satser avvisas vid kompilering.
- Att glömma att CumulateOrders har true som standardvärde. En strategi som ger signal på varje bar i en trend fortsätter att lägga på positioner om inte CumulateOrders uttryckligen sätts till false. Oväntat stora positioner i en backtest går oftast tillbaka till detta standardvärde.
- Fel tidsformat. FlatBefore och FlatAfter förväntar sig HHMMSS som ett vanligt tal, så 9:00 AM är 090000 och 5:30 PM är 173000. Värden läses i börsens lokala tidszon, inte datorns, vilket spelar roll när du handlar utländska marknader.
- För få förinlästa barer. Om PreLoadBars är mindre än den längsta indikatorns lookback beräknar tidiga barer indikatorer på ofullständiga data och kan ge signaler som skiljer sig från diagrammet. Sätt den högre än den största period som används i koden.
Relaterade instruktioner
CumulateOrders, parametern för orderackumulering i detalj.FLATBEFORE, begränsningen för sessionens start i detalj.FLATAFTER, begränsningen för sessionens slut i detalj.PRELOADBARS, parametern för förinläsning av historik i detalj.NOCASHUPDATE, parametern för kontanthantering i detalj.ONCE, engångsinitiering av variabler inuti skriptkroppen.