Word nu lid
ProBacktest/probacktest · proorder

NextBarOpen

NextBarOpen is een verouderde modifier in ProBacktest en ProOrder die orders uitstelde tot de opening van de volgende bar, wat nu het standaardgedrag is voor elke marktorder.

Syntaxis

probuilder
AT MARKET NextBarOpen

Hoe het werkt

In vroege versies van het platform, NextBarOpen werd aan een market order toegevoegd om expliciet aan te geven dat het order moest worden uitgevoerd op de openingskoers van de volgende bar in plaats van op de huidige koers. De bedoeling was realistische uitvoering te modelleren: een signaal dat op een afgeronde bar is berekend, kan pas worden verhandeld als de volgende bar begint.

Dat uitvoeringsmodel werd later het enige. Strategiecode wordt één keer per bar geëvalueerd, op de close, en elke marktorder die tijdens die evaluatie ontstaat wordt direct daarna verzonden en gevuld op de open van de volgende bar. Het gedrag NextBarOpen vroeger opvroeg, is nu de onvoorwaardelijke standaard, waardoor de modifier overbodig is.

Het officiële standpunt is dat de instructie niet langer geldig is en geen doel dient. Bestaande code die de modifier bevat, documenteert een intentie die de engine al garandeert, en nieuwe code mag hem nooit bevatten. Wanneer het sleutelwoord opduikt in oudere strategieën uit archieven of forums, kan het worden verwijderd zonder het gedrag van de strategie onder het huidige uitvoeringsmodel te veranderen.

NextBarOpen moet niet worden verward met TomorrowOpen, wat een aparte instructie is die te maken heeft met ordertiming op dagbars en een los keyword blijft.

Voorbeelden

Voorbeeld 1, Verouderde instap met de modifier (ProBacktest)

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

De order wordt gevuld op de opening van de volgende bar, met of zonder de modifier. Dit is de vorm die je in oudere gepubliceerde strategieën tegenkomt.

Voorbeeld 2, Verouderde short-instap (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

Hetzelfde patroon aan de short-kant. Het weglaten van het afsluitende sleutelwoord laat de uitvoering identiek, de short opent in beide gevallen op de openingsprijs van de volgende bar.

Voorbeeld 3, Oude code migreren (ProBacktest)

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

De gemoderniseerde vorm. Het verwijderen van NextBarOpen uit een oude strategie is een pure opschoning, elders in de code is geen compensatie nodig.

Veelvoorkomende fouten en valkuilen

  • Een verschil in timing verwachten. Toevoegen of verwijderen NextBarOpen verandert niets. Alle marktorders die bij een barclose worden gegenereerd, worden uitgevoerd op de open van de volgende bar. Codevergelijkingen die verschillende resultaten aan de modifier toeschrijven, kijken naar de verkeerde variabele.
  • Mogelijke afwijzing door huidige compilers. De instructie staat gedocumenteerd als niet langer geldig. Afhankelijk van de platformversie kan code die hem bevat niet compileren, dus de veilige migratie is het sleutelwoord te verwijderen in plaats van het uit nostalgie te behouden.
  • Verwarring met TomorrowOpen. De namen lijken verwant, maar de instructies zijn niet uitwisselbaar. TomorrowOpen betreft het plaatsen van orders op dagbars en is nog steeds een actief keyword, NextBarOpen is een dode modifier.
  • Aannemen dat uitvoering op dezelfde bar bestaat. Het verwijderen van de modifier maakt geen fills op dezelfde bar mogelijk. Er is geen ordertype dat uitvoert op de close van de signaalbar; het model van opening op de volgende bar is inherent aan de engine.
  • TomorrowOpen, instructie voor ordertiming bij dagbars.
  • MARKET, onmiddellijke uitvoering tegen de huidige marktprijs.
  • BUY, opent een long positie of breidt deze uit.
  • SELL, sluit een deel of de hele long positie.
  • SELLSHORT, opent een short positie of breidt deze uit.
  • EXITSHORT, sluit een deel of de hele short positie.
  • LIMIT, pending order die wordt uitgevoerd tegen een vastgestelde prijs of beter.
  • STOP, pending order die wordt geactiveerd zodra de prijs een niveau bereikt.