REM
REM starts a comment line in ProBuilder. Together with // and /* */ it lets ProRealTime™ code carry notes that the compiler ignores completely during execution.
Syntax
REM This is a comment
// This is another way to comment the code
/* This is another way to comment the code
with multiple lines */Så fungerar det
Allt som följer efter REM på samma rad ignoreras av kompilatorn. Nyckelordet finns enbart för dokumentation: att förklara vad ett block beräknar, varför ett tröskelvärde valdes, eller att markera avsnitt i ett längre skript. Kommentarer har ingen körtidskostnad eftersom de tas bort före exekvering.
ProBuilder stöder tre kommentarsformer. REM och // kommenterar båda ut resten av en rad och är utbytbara. Den / / paret kommenterar ut allt mellan markörerna, inklusive radbrytningar, vilket passar längre förklaringar och att tillfälligt stänga av kodblock vid felsökning. Kommentarmarkörer kan inte nästlas inuti varandra, en / / blocket startar inte om ifall ett annat /* förekommer inom den.
Kommentarer är tillåtna var som helst i kod för indikatorer, strategier och screeners. Vanliga konventioner är en huvudkommentar som beskriver skriptets syfte och parametrar, en kort notering ovanför varje icke-uppenbar beräkning, och // suffixkommentarer som förklarar enskilda tilldelningar. Att inaktivera en rad genom att inleda den med REM eller // är standardsättet att testa varianter utan att ta bort kod.
Eftersom variabelnamn i ProBuilder ofta är korta bär kommentarerna en stor del av bördan för att göra ett skript underhållbart. Ett skript som man återvänder till månader senare läses först genom sina kommentarer.
Exempel
Exempel 1, Dokumentera en beräkning (Indikator)
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"Alla tre kommentarsstilarna förekommer tillsammans. Ingen av dem påverkar det returnerade värdet.
Exempel 2, Strategihuvud och inaktiverad testrad (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 // prefixet behåller en alternativ orderrad i filen utan att köra den.
Exempel 3, Kommenterat screenervillkor (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")REM-raden anger filtrets syfte, så villkoret nedan behöver ingen ytterligare förklaring.
Vanliga fel och fallgropar
- Ingen nästling. Kommentarsmarkörer kan inte innehålla varandra. En
/inuti en befintlig/ /blocket öppnar inte ett andra block, och det första/avslutar kommentaren ändå. - REM comments the whole rest of the line. Kod som placeras efter REM på samma rad ignoreras.
REM init a = 5tilldelar ingenting. - Oavslutade blockkommentarer. A
/utan en matchande/slukar all återstående kod och visar sig oftast som ett förvirrande kompileringsfel långt från den öppnande markören. - Inaktuella kommentarer vilseleder. Kommentarer kontrolleras inte mot koden. När du har ändrat en beräkning, uppdatera anteckningen ovanför den, en inaktuell kommentar är värre än ingen.
Relaterade instruktioner
IF, villkorsblock som gynnas av en kommentar som anger dess syfte.FOR, räknad loop, ofta kommenterad med vad iterationen ackumulerar.RETURN, matar ut indikatorvärdet som huvudkommentarerna beskriver.DEFPARAM, inställningar för strategikörning, konventionellt grupperade under en huvudkommentar.ONCE, engångsinitiering, värd att markera med en kommentar.CALL, anropar en annan indikator, kommentarer bör ange vad den anropade koden returnerar.