Jetzt beitreten
Befehle/probuilder · probacktest · proorder · proscreener

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

probuilder
REM This is a comment
// This is another way to comment the code
/* This is another way to comment the code
with multiple lines */

So funktioniert es

Alles, was auf REM in derselben Zeile folgt, wird vom Compiler ignoriert. Das Schlüsselwort existiert ausschließlich zur Dokumentation: um zu erklären, was ein Block berechnet, warum ein Schwellenwert gewählt wurde, oder um Abschnitte eines längeren Skripts zu markieren. Kommentare haben keine Laufzeitkosten, da sie vor der Ausführung entfernt werden.

ProBuilder unterstützt drei Kommentarformen. REM und // kommentieren beide den Rest einer Zeile aus und sind austauschbar. Das / / Paar kommentiert alles zwischen den Markern aus, einschließlich Zeilenumbrüchen, was sich für längere Erläuterungen und das zeitweise Deaktivieren von Codeblöcken beim Debuggen eignet. Kommentarmarker können nicht ineinander verschachtelt werden, ein / / Block startet nicht neu, wenn ein anderer /* darin vorkommt.

Kommentare sind überall in Indikator-, Strategie- und Screener-Code gültig. Übliche Konventionen sind ein Kopfkommentar, der Zweck und Parameter des Skripts beschreibt, eine kurze Notiz über jeder nicht offensichtlichen Berechnung, und // Suffix-Kommentare, die einzelne Zuweisungen erläutern. Eine Zeile lässt sich deaktivieren durch ein vorangestelltes REM oder // ist der übliche Weg, Varianten zu testen, ohne Code zu löschen.

Da Variablennamen in ProBuilder oft kurz sind, tragen Kommentare einen großen Teil der Last, ein Skript wartbar zu machen. Ein Skript, das Monate später wieder aufgegriffen wird, wird zuerst über seine Kommentare gelesen.

Beispiele

Beispiel 1, Eine Berechnung dokumentieren (Indikator)

probuilder
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 drei Kommentarstile erscheinen zusammen. Keiner von ihnen beeinflusst den zurückgegebenen Wert.

Beispiel 2, Strategie-Kopfzeile und deaktivierte Testzeile (ProOrder)

probuilder
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 2

REM lines document the system at the top, and a // Präfix behält eine alternative Order-Zeile in der Datei, ohne sie auszuführen.

Beispiel 3, Kommentierte Screener-Bedingung (ProScreener)

probuilder
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")

Die REM-Zeile gibt die Absicht des Filters an, sodass die Bedingung darunter keine weitere Erklärung benötigt.

Häufige Fehler und Stolperfallen

  • Keine Verschachtelung. Kommentarmarkierungen können einander nicht enthalten. Ein / innerhalb eines bestehenden / / Block öffnet keinen zweiten Block, und der erste / beendet den Kommentar dennoch.
  • REM comments the whole rest of the line. Code nach REM in derselben Zeile wird ignoriert. REM init a = 5 weist nichts zu.
  • Nicht geschlossene Blockkommentare. A / ohne ein passendes / verschluckt den gesamten restlichen Code und zeigt sich meist als verwirrender Compile-Fehler weit entfernt vom öffnenden Marker.
  • Veraltete Kommentare führen in die Irre. Kommentare werden nicht gegen den Code geprüft. Aktualisieren Sie nach dem Bearbeiten einer Berechnung die Notiz darüber, ein veralteter Kommentar ist schlechter als keiner.
  • IF, bedingter Block, der von einem Kommentar profitiert, der seine Absicht angibt.
  • FOR, gezählte Schleife, oft mit einer Anmerkung versehen, was die Iteration ansammelt.
  • RETURN, gibt den Indikatorwert aus, den die Kopfkommentare beschreiben.
  • DEFPARAM, Einstellungen zur Strategieausführung, üblicherweise unter einem Kopfkommentar gruppiert.
  • ONCE, einmalige Initialisierung, die einen Kommentar wert ist.
  • CALL, ruft einen anderen Indikator auf, Kommentare sollten angeben, was der aufgerufene Code zurückgibt.