REM
REM starts a comment line in ProBuilder. Together with // and /* */ it lets ProRealTime™ code carry notes that the compiler ignores completely during execution.
Syntaxis
REM This is a comment
// This is another way to comment the code
/* This is another way to comment the code
with multiple lines */Hoe het werkt
Alles wat op dezelfde regel na REM volgt, wordt door de compiler genegeerd. Het keyword bestaat puur voor documentatie: uitleggen wat een blok berekent, waarom een drempel is gekozen, of secties van een langer script markeren. Commentaren hebben geen runtimekosten omdat ze voor de uitvoering worden verwijderd.
ProBuilder ondersteunt drie commentaarvormen. REM en // zetten beide de rest van één regel in commentaar en zijn uitwisselbaar. De / / paar zet alles tussen de markeringen in commentaar, inclusief regeleindes, wat geschikt is voor langere uitleg en voor het tijdelijk uitschakelen van codeblokken tijdens debuggen. Commentaarmarkeringen kunnen niet in elkaar worden genest, een / / blok start niet opnieuw als een ander /* erin voorkomt.
Commentaar is overal geldig in indicator-, strategie- en screenercode. Gebruikelijke conventies zijn een headercommentaar dat het doel en de parameters van het script beschrijft, een korte notitie boven elke niet-evidente berekening, en // commentaar achter de regel dat afzonderlijke toewijzingen uitlegt. Een regel uitschakelen door hem te laten voorafgaan door REM of // is de standaardmanier om varianten te testen zonder code te verwijderen.
Omdat variabelenamen in ProBuilder vaak kort zijn, dragen commentaren een groot deel van de last om een script onderhoudbaar te maken. Een script dat maanden later opnieuw wordt bekeken, wordt eerst via zijn commentaren gelezen.
Voorbeelden
Voorbeeld 1, Een berekening documenteren (Indicator)
REM Compute the 10-period simple moving average of the high
i1 = average[10](high)
// i1 now holds the SMA value
/*
multi-line comment describing
the rest of the script
*/
RETURN i1 AS "SMA high 10"Alle drie de commentaarstijlen komen samen voor. Geen van hen beïnvloedt de teruggegeven waarde.
Voorbeeld 2, Strategieheader en uitgeschakelde testregel (ProOrder)
REM Trend-following system, hourly timeframe
REM Entries on MA crossover, fixed percentage stop
DEFPARAM CumulateOrders = false
fastMA = average[20](close)
slowMA = average[100](close)
// BUY 2 CONTRACT AT MARKET <- disabled while testing size 1
IF fastMA crosses over slowMA THEN
BUY 1 CONTRACT AT MARKET
ENDIF
SET STOP %LOSS 2REM lines document the system at the top, and a // prefix houdt een alternatieve orderregel in het bestand zonder die uit te voeren.
Voorbeeld 3, Geannoteerde screenervoorwaarde (ProScreener)
REM Filter: price above its 50-bar average with rising volume
avgPrice = average[50](close)
volUp = volume > volume[1]
SCREENER[close > avgPrice AND volUp] (close AS "Last price")De REM-regel vermeldt de bedoeling van de filter, dus de voorwaarde eronder heeft geen verdere uitleg nodig.
Veelvoorkomende fouten en valkuilen
- Geen nesting. Commentaarmarkeringen kunnen elkaar niet bevatten. Een
/binnen een bestaande/ /blok opent geen tweede blok, en de eerste/beëindigt het commentaar hoe dan ook. - REM comments the whole rest of the line. Code die na REM op dezelfde regel staat, wordt genegeerd.
REM init a = 5wijst niets toe. - Niet-afgesloten blokcommentaren. A
/zonder bijbehorende/slokt alle resterende code op en komt doorgaans naar voren als een verwarrende compileerfout ver van het openingsteken. - Verouderde commentaren misleiden. Commentaren worden niet tegen de code gecontroleerd. Werk na het aanpassen van een berekening de notitie erboven bij, een verouderd commentaar is slechter dan geen.
Gerelateerde instructies
IF, conditioneel blok dat baat heeft bij een commentaar dat de bedoeling vermeldt.FOR, getelde lus, vaak geannoteerd met wat de iteratie opbouwt.RETURN, geeft de indicatorwaarde terug die de headercommentaren beschrijven.DEFPARAM, instellingen voor de uitvoering van de strategie, gewoonlijk gegroepeerd onder een headercommentaar.ONCE, eenmalige initialisatie, het waard om met een commentaar te markeren.CALL, roept een andere indicator aan, commentaar moet vermelden wat de aangeroepen code teruggeeft.