REM
REM starts a comment line in ProBuilder. Together with // and /* */ it lets ProRealTime™ code carry notes that the compiler ignores completely during execution.
Sintassi
REM This is a comment
// This is another way to comment the code
/* This is another way to comment the code
with multiple lines */Come funziona
Tutto ciò che segue REM sulla stessa riga viene ignorato dal compilatore. La parola chiave esiste puramente per la documentazione: spiegare cosa calcola un blocco, perché è stata scelta una soglia, o contrassegnare sezioni di uno script più lungo. I commenti non hanno costo di esecuzione perché vengono rimossi prima dell'esecuzione.
ProBuilder supporta tre forme di commento. REM e // commentano entrambi il resto di una riga e sono interscambiabili. Il / / la coppia commenta tutto ciò che si trova tra i marcatori, incluse le interruzioni di riga, il che è adatto a spiegazioni più lunghe e a disattivare temporaneamente blocchi di codice durante il debug. I marcatori di commento non possono essere annidati l'uno nell'altro, un / / il blocco non riparte se un altro /* appare al suo interno.
I commenti sono validi in qualsiasi punto del codice di indicatori, strategie e screener. Le convenzioni comuni includono un commento di intestazione che descrive lo scopo e i parametri dello script, una breve nota sopra ogni calcolo non ovvio e // commenti in coda che spiegano le singole assegnazioni. Disattivare una riga prefissandola con REM o // è il modo standard per testare varianti senza eliminare codice.
Poiché i nomi delle variabili in ProBuilder sono spesso brevi, i commenti si fanno carico di gran parte del lavoro di rendere uno script manutenibile. Uno script ripreso mesi dopo si legge prima di tutto attraverso i suoi commenti.
Esempi
Esempio 1, Documentare un calcolo (Indicatore)
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"Tutti e tre gli stili di commento compaiono insieme. Nessuno di essi influisce sul valore restituito.
Esempio 2, Intestazione della strategia e riga di test disattivata (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 // il prefisso mantiene nel file una riga di ordine alternativa senza eseguirla.
Esempio 3, Condizione di screener commentata (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")La riga REM dichiara l'intento del filtro, quindi la condizione sottostante non richiede ulteriori spiegazioni.
Errori e insidie comuni
- Nessun annidamento. I marcatori di commento non possono contenersi a vicenda. Un
/dentro un esistente/ /blocco non apre un secondo blocco, e il primo/termina comunque il commento. - REM comments the whole rest of the line. Il codice posto dopo REM sulla stessa riga viene ignorato.
REM init a = 5non assegna nulla. - Commenti di blocco non chiusi. A
/senza un corrispondente/inghiotte tutto il codice restante e in genere si manifesta come un errore di compilazione confuso, lontano dal marcatore di apertura. - I commenti obsoleti ingannano. I commenti non vengono verificati rispetto al codice. Dopo aver modificato un calcolo, aggiorna la nota sopra di esso, un commento obsoleto è peggio di nessun commento.
Istruzioni correlate
IF, blocco condizionale che trae vantaggio da un commento che ne dichiari l'intento.FOR, ciclo contato, spesso annotato con ciò che l'iterazione accumula.RETURN, restituisce il valore dell'indicatore descritto dai commenti di intestazione.DEFPARAM, impostazioni di esecuzione della strategia, convenzionalmente raggruppate sotto un commento di intestazione.ONCE, inizializzazione una sola volta, vale la pena segnalarla con un commento.CALL, richiama un altro indicatore, i commenti dovrebbero dichiarare cosa restituisce il codice chiamato.