DEFPARAM
DEFPARAM sets execution parameters for a ProRealTime™ strategy, such as CumulateOrders, FlatBefore, and FlatAfter, and must appear at the top of the code.
Sintassi
DEFPARAM ParameterName = ValueParametri
| Nome | Tipo | Predefinito | Descrizione |
|---|---|---|---|
| CumulateOrders | booleano | true | Quando è true, i nuovi segnali si aggiungono alla posizione aperta. Quando è false, è aperta una sola posizione alla volta e un nuovo segnale sostituisce quella corrente. |
| FlatBefore | orario (HHMMSS) | nessuno | Orario prima del quale la strategia resta flat: le posizioni vengono chiuse e non viene inserito alcun nuovo ordine fino a questo orario. |
| FlatAfter | orario (HHMMSS) | nessuno | Orario dopo il quale la strategia va flat: le posizioni aperte vengono chiuse e non vengono aperte nuove posizioni per il resto della sessione. |
| PreLoadBars | intero | 200 | Numero di bar storici caricati prima dell'inizio affinché gli indicatori abbiano dati dal primo bar valutato. |
| NoCashUpdate | booleano | false | Quando è true, gli utili e le perdite realizzati non modificano il capitale usato per la position size, che resta al suo valore iniziale. |
Come funziona
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 il significato di un segnale di ingresso ripetuto. Con il valore predefinito true, ogni segnale aggiunge un altro ordine alla posizione. Impostarlo a false impone una singola posizione aperta, che è il comportamento atteso dalla maggior parte delle strategie a ingresso singolo.
FlatBefore e FlatAfter limitano la strategia a una finestra operativa all'interno della sessione. Entrambi accettano un orario in formato HHMMSS, interpretato nel fuso orario locale della borsa dello strumento. PreLoadBars e NoCashUpdate regolano la simulazione stessa: quanto storico gli indicatori possono vedere all'inizio e se la position size si compone con i risultati.
Esempi
Esempio 1, Finestra di sessione con posizioni singole (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 PMQuesta intestazione mantiene la strategia flat fuori dalle 9:00 alle 17:30 dell'ora di borsa e sostituisce, anziché accumulare, le posizioni a ogni nuovo segnale.
Esempio 2, Storico precaricato per indicatori lenti (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
ENDIFPrecaricare 300 bar significa che la media a 200 periodi è valida dal primo bar testato, e NoCashUpdate mantiene costante la position size del backtest indipendentemente dal profitto o dalla perdita accumulati.
Esempio 3, Pyramiding con ordini cumulati (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 attivo, ogni nuovo incrocio aggiunge un contratto fino al raggiungimento del limite di posizione, e l'uscita chiude tutta la pila in una volta.
Errori e insidie comuni
- DEFPARAM below other code. La direttiva deve precedere la logica della strategia. Un DEFPARAM collocato dopo istruzioni eseguibili viene rifiutato in fase di compilazione.
- Dimenticare che CumulateOrders ha true come valore predefinito. Una strategia che genera segnali su ogni bar di un trend continuerà ad aggiungere posizioni a meno che CumulateOrders non sia impostato esplicitamente a false. Posizioni inaspettatamente grandi in un backtest derivano di solito da questo valore predefinito.
- Formato dell'ora errato. FlatBefore e FlatAfter si aspettano HHMMSS come numero semplice, quindi 9:00 AM è 090000 e 5:30 PM è 173000. I valori sono letti nel fuso orario locale della borsa, non in quello della macchina, cosa che conta quando si opera su mercati esteri.
- Troppo pochi bar precaricati. Se PreLoadBars è minore del lookback più lungo degli indicatori, le prime bar calcolano gli indicatori su dati parziali e possono produrre segnali diversi da quelli del grafico. Impostalo sopra il periodo più grande usato nel codice.
Istruzioni correlate
CumulateOrders, il parametro di accumulo degli ordini in dettaglio.FLATBEFORE, il vincolo di inizio sessione in dettaglio.FLATAFTER, il vincolo di fine sessione in dettaglio.PRELOADBARS, il parametro di precaricamento dello storico in dettaglio.NOCASHUPDATE, il parametro di gestione della liquidità in dettaglio.ONCE, inizializzazione una sola volta delle variabili nel corpo dello script.