Iscriviti ora
Istruzioni/probacktest · proorder

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

probuilder
DEFPARAM ParameterName = Value

Parametri

NomeTipoPredefinitoDescrizione
CumulateOrdersbooleanotrueQuando è true, i nuovi segnali si aggiungono alla posizione aperta. Quando è false, è aperta una sola posizione alla volta e un nuovo segnale sostituisce quella corrente.
FlatBeforeorario (HHMMSS)nessunoOrario prima del quale la strategia resta flat: le posizioni vengono chiuse e non viene inserito alcun nuovo ordine fino a questo orario.
FlatAfterorario (HHMMSS)nessunoOrario dopo il quale la strategia va flat: le posizioni aperte vengono chiuse e non vengono aperte nuove posizioni per il resto della sessione.
PreLoadBarsintero200Numero di bar storici caricati prima dell'inizio affinché gli indicatori abbiano dati dal primo bar valutato.
NoCashUpdatebooleanofalseQuando è 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)

probuilder
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 PM

Questa 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)

probuilder
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
ENDIF

Precaricare 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)

probuilder
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
ENDIF

Con 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.
  • 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.