Bli medlem i dag
Instruksjoner/probuilder · probacktest · proorder · proscreener

ELSE

ELSE in ProBuilder runs an alternative block of code when the preceding IF condition is false. Each IF statement accepts a single ELSE branch before ENDIF.

Syntaks

probuilder
IF (condition) THEN
  // statements when the condition is true
ELSE
  // statements when the condition is false
ENDIF

Slik fungerer det

En IF-setning alene kjører enten sin blokk eller gjør ingenting. Å legge til ELSE gjør den til en toveis forgrening: nøyaktig én av de to blokkene kjøres på hver bar, aldri begge og aldri ingen av dem. Kjøringen fortsetter deretter etter ENDIF uansett hvilken gren som kjørte.

ELSE cannot stand alone. It must appear inside an IF block, after the THEN block and any ELSIF branches, and before ENDIF. Each IF statement accepts at most one ELSE, and it must be the final branch. When several conditions need to be tested in order, chain them with ELSIF and reserve ELSE for the case where none of them matched.

Fordi én gren alltid kjører, er et IF/ELSE-par den idiomatiske måten å garantere at en variabel får en verdi på hver bar, slik at man unngår foreldede verdier som bæres over fra tidligere barer.

Eksempler

Eksempel 1, Klassifisering av gjeldende bar (Indikator)

probuilder
// compare the current high with the previous bar's high
IF (High > High[1]) THEN
  result = 1
ELSE
  result = -1
ENDIF
RETURN result

Når gjeldende høyeste overstiger forrige høyeste, result er 1, i alle andre tilfeller setter ELSE-grenen den til -1. Variabelen får garantert en ny verdi på hver bar.

Eksempel 2, Poengsetting over eller under et glidende gjennomsnitt (ProScreener)

probuilder
ma = Average[200](close)
// score the instrument by its position relative to the average
IF close > ma THEN
  score = (close - ma) / ma * 100
ELSE
  score = 0
ENDIF
SCREENER[score > 5] (score AS "Percent above MA")

Instrumenter som handles over 200-perioders gjennomsnittet får en prosentpoengsum, og ELSE-grenen nullstiller alt annet slik at screenerbetingelsen holder seg ryddig.

Eksempel 3, Valg av stoppavstand etter regime (ProOrder)

probuilder
DEFPARAM CumulateOrders = false
atr = AverageTrueRange[14](close)
// widen the stop in volatile conditions, tighten it otherwise
IF atr > Average[100](atr) THEN
  stopDist = 3 * atr
ELSE
  stopDist = 1.5 * atr
ENDIF
IF close CROSSES OVER Average[50](close) AND NOT onmarket THEN
  BUY 1 CONTRACT AT MARKET
  SET STOP pLOSS stopDist
ENDIF

ELSE-grenen gir standard stoppavstand når volatilitetstesten ikke slår til, så stopDist er definert før inngangslogikken bruker den.

Vanlige feil og fallgruver

  • ELSE without a matching IF. ELSE is only valid between an IF ... THEN block and its ENDIF. A stray ELSE, or one separated from its IF by a misplaced ENDIF, fails to compile.
  • Flere ELSE-grener. Hver IF-setning godtar høyst én ELSE. Flere gjensidig utelukkende tilfeller hører inn i ELSIF-grener plassert før ELSE.
  • ELSE with its own condition. ELSE takes no condition and no THEN. Writing ELSE (condition) THEN er en syntaksfeil, den betingede formen er ELSIF.
  • Feil grenparing i nøstede blokker. I nøstede IF-setninger bindes ELSE til den nærmeste ulukkede IF. Hvis en indre ENDIF mangler, knyttes ELSE stille til feil betingelse, noe som kompilerer men forgrener seg feil.
  • IF, åpner den betingede blokken som ELSE utvider.
  • ELSIF, betingede alternative grener som testes før ELSE.
  • ENDIF, lukker IF/ELSE-blokken.
  • THEN, påkrevd etter IF- og ELSIF-betingelser, aldri etter ELSE.
  • AND, kombinerer betingelser inne i IF-testen.
  • OR, alternative betingelser inne i IF-testen.
  • NOT, negerer en betingelse.