Iscriviti ora
ProBacktest/probacktest · proorder

NextBarOpen

NextBarOpen è un modificatore deprecato di ProBacktest e ProOrder che rinviava gli ordini all'apertura del bar successivo, ora il comportamento predefinito per ogni ordine a mercato.

Sintassi

probuilder
AT MARKET NextBarOpen

Come funziona

Nelle prime versioni della piattaforma, NextBarOpen veniva aggiunto a un ordine a mercato per indicare esplicitamente che l'ordine doveva essere eseguito al prezzo di apertura del bar successivo anziché al prezzo corrente. L'intento era modellare un'esecuzione realistica: un segnale calcolato su un bar concluso può essere negoziato solo all'inizio del bar successivo.

Quel modello di esecuzione è poi diventato l'unico. Il codice della strategia viene valutato una volta per bar, alla chiusura, e qualsiasi ordine a mercato generato durante quella valutazione viene trasmesso immediatamente dopo, eseguendosi all'apertura del bar successivo. Il comportamento NextBarOpen serviva a richiedere è ora il comportamento predefinito incondizionato, il che rende il modificatore ridondante.

La posizione ufficiale è che l'istruzione non è più valida e non serve a nulla. Il codice esistente che contiene il modificatore documenta un'intenzione che il motore già garantisce, e il codice nuovo non dovrebbe mai includerlo. Quando la parola chiave compare in strategie più vecchie trovate in archivi o forum, può essere eliminata senza modificare il comportamento della strategia con l'attuale modello di esecuzione.

NextBarOpen non deve essere confuso con TomorrowOpen, che è un'istruzione distinta relativa al timing degli ordini su bars giornaliere e resta una parola chiave separata.

Esempi

Esempio 1, Ingresso legacy con il modificatore (ProBacktest)

probuilder
// legacy code: NextBarOpen is redundant under the current engine
IF NOT ONMARKET THEN
  BUY 2 CONTRACTS AT MARKET NextBarOpen
ENDIF

L'ordine viene eseguito all'apertura del bar successivo con o senza il modificatore. Questa è la forma presente nelle strategie pubblicate più vecchie.

Esempio 2, Ingresso short legacy (ProOrder)

probuilder
short = close < Average[100](close)

// older strategies attached NextBarOpen to short entries as well
IF NOT ShortOnMarket AND short THEN
  SELLSHORT 1 CONTRACT AT MARKET NextBarOpen
ENDIF

Lo stesso pattern sul lato short. Rimuovere la parola chiave finale lascia l'esecuzione identica, lo short si apre al prezzo di apertura del bar successivo in entrambi i casi.

Esempio 3, Migrazione di codice vecchio (ProBacktest)

probuilder
// before: BUY 2 CONTRACTS AT MARKET NextBarOpen
// after, same behavior:
IF NOT ONMARKET THEN
  BUY 2 CONTRACTS AT MARKET
ENDIF

La forma modernizzata. Eliminare NextBarOpen da una vecchia strategia è una semplice pulizia, non serve alcuna compensazione altrove nel codice.

Errori e insidie comuni

  • Aspettarsi una differenza di temporizzazione. Aggiungere o rimuovere NextBarOpen non cambia nulla. Tutti gli ordini a mercato generati alla chiusura di un bar vengono eseguiti all'apertura del bar successivo. I confronti di codice che attribuiscono risultati diversi al modificatore stanno guardando la variabile sbagliata.
  • Possibile rifiuto da parte dei compilatori attuali. L'istruzione è documentata come non più valida. A seconda della versione della piattaforma, il codice che la contiene può non compilare, quindi la migrazione sicura consiste nell'eliminare la parola chiave invece di conservarla per nostalgia.
  • Confusione con TomorrowOpen. I nomi sembrano correlati ma le istruzioni non sono interscambiabili. TomorrowOpen riguarda l'invio di ordini su bar giornaliere ed è ancora una parola chiave attiva, NextBarOpen è un modificatore inattivo.
  • Presumere che esista l'esecuzione sullo stesso bar. Rimuovere il modificatore non abilita le esecuzioni sullo stesso bar. Non esiste un tipo di ordine che venga eseguito alla chiusura del bar di segnale, il modello di apertura del bar successivo è intrinseco al motore.
  • TomorrowOpen, istruzione di temporizzazione degli ordini per bar giornalieri.
  • MARKET, esecuzione immediata al prezzo di mercato corrente.
  • BUY, apre o incrementa una posizione long.
  • SELL, chiude parzialmente o totalmente una posizione long.
  • SELLSHORT, apre o incrementa una posizione short.
  • EXITSHORT, chiude parzialmente o totalmente una posizione short.
  • LIMIT, ordine pendente che viene eseguito a un prezzo stabilito o migliore.
  • STOP, ordine pendente che si attiva quando il prezzo raggiunge un livello.