Bli medlem i dag
ProBacktest/probacktest · proorder

ONMARKET

ONMARKET i ProBacktest og ProOrder returnerer sann så lenge en posisjon er åpen, long eller short. Brukes til å hindre dupliserte innganger og til å sikre posisjonshåndtering.

Syntaks

probuilder
ONMARKET

Slik fungerer det

ONMARKET tar ingen argumenter og returnerer sann når strategien har minst én åpen posisjon, long eller short, og falsk når den er flat. Den er den retningsuavhengige søskenformen til LONGONMARKET og SHORTONMARKET, som tester én side hver.

Verdien gjenspeiler bare utførte ordrer. En ventende limit- eller stoppordre som ikke er utført, lar ONMARKET være false, og flagget går tilbake til false på baren etter at posisjonen er helt lukket. Med CumulateOrders aktivert, leses en stabel av innganger fortsatt som én enkelt sann verdi; COUNTOFPOSITION rapporterer den faktiske størrelsen.

Typisk bruk faller i to grupper. Inngangskode pakkes inn i IF NOT OnMarket THEN ... ENDIF så en ny handel bare starter fra flat posisjon. Håndteringskode, som trailinglogikk eller tilbakestilling av tilstand, pakkes inn i IF OnMarket THEN ... ENDIF, eller dens inverse brukes til å initialisere variabler på nytt mellom handler.

Eksempler

Eksempel 1, Inngangsvakt fra flat posisjon (ProBacktest)

probuilder
// Open a position only when nothing is currently held
IF NOT ONMARKET THEN
    BUY 1 CONTRACT AT MARKET
ENDIF

Strategien kjøper én kontrakt bare når den er flat, så posisjoner akkumuleres aldri. Dette er eksempelet fra den offisielle referansen.

Eksempel 2, Symmetriske long- og short-innganger (ProOrder)

probuilder
DEFPARAM CumulateOrders = false

fastMA = Average[20](close)
slowMA = Average[50](close)

// Take either direction, but only from flat
IF NOT onmarket THEN
  IF fastMA CROSSES OVER slowMA THEN
    BUY 1 CONTRACT AT MARKET
  ELSIF fastMA CROSSES UNDER slowMA THEN
    SELLSHORT 1 CONTRACT AT MARKET
  ENDIF
ENDIF

Én ONMARKET-vakt dekker begge retninger, noe som er enklere enn å kombinere separate LONGONMARKET- og SHORTONMARKET-sjekker rundt hver inngang.

Eksempel 3, Nullstilling av handelstilstandsvariabler mellom posisjoner (ProOrder)

probuilder
// Clear the breakeven flag whenever the strategy is flat
IF NOT onmarket THEN
  beArmed = 0
ENDIF

// Arm breakeven once the long shows 10 points of profit
IF longonmarket AND close - tradeprice >= 10 * pointsize THEN
  beArmed = 1
ENDIF

IF beArmed = 1 THEN
  SET STOP BREAKEVEN
ENDIF

ONMARKET er den naturlige nullstillingsutløseren for tilstand per handel. Flagget tømmes mens posisjonen er flat, så hver ny posisjon starter med rent bord.

Vanlige feil og fallgruver

  • Retningsblind av design. ONMARKET kan ikke skille long fra short. Utgangs- eller stoppkode som bare er meningsfull på én side må bruke LONGONMARKET eller SHORTONMARKET, ellers kan en short-posisjon utløse håndtering for long-siden.
  • Ventende ordrer teller ikke. Mellom plassering av en limit- eller stop-inngang og utførelsen av den forblir ONMARKET falsk, så en ubeskyttet blokk kan legge flere ordrer i kø som alle utføres senere. Kanseller eller tell ventende ordrer i inngangslogikken.
  • Ingen størrelsesinformasjon. Med CumulateOrders aktivert, forblir ONMARKET sann enten posisjonen holder én kontrakt eller tjue. Begrens pyramidering med COUNTOFPOSITION i stedet for den boolske verdien.
  • Feil omfang. ONMARKET inne i en ProBuilder-indikator eller ProScreener kompilerer ikke. Posisjonstilstand finnes bare i ProBacktest- og ProOrder-kode.