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
ONMARKETSlik 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)
// Open a position only when nothing is currently held
IF NOT ONMARKET THEN
BUY 1 CONTRACT AT MARKET
ENDIFStrategien 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)
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)
// 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
ENDIFONMARKET 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
CumulateOrdersaktivert, 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.
Relaterte instruksjoner
LONGONMARKET, sann så lenge en long-posisjon er åpen.SHORTONMARKET, sann så lenge en short-posisjon er åpen.MARKET, utfører ordrer til gjeldende markedspris.BUY, åpner en long-posisjon.SELLSHORT, åpner en short-posisjon.COUNTOFPOSITION, størrelsen på den åpne posisjonen.POSITIONPERF, resultatet for den åpne posisjonen.TRADEPRICE, utførelsesprisen for en tidligere handel.