CALL
CALL führt einen benutzerdefinierten Indikator aus ProBuilder-Code aus und gibt seine Werte zurück. Verwenden Sie eigene Indikatorlogik in Indikatoren, Strategien und Screenern wieder.
Syntax
myValue = CALL "myIndicator"[parameter1, parameter2]Mehrere Rückgabewerte erfassen:
myValue1, myValue2, myValue3 = CALL "myIndicator"[parameter1, parameter2]Nicht benötigte Werte überspringen:
myValue1, ignored, myValue3 = CALL "myIndicator"[parameter1, parameter2]Eine bestimmte Kurskonstante anwenden:
myValue = CALL "myIndicator"[parameter1, parameter2] (Close)Parameter
| Name | Typ | Standard | Beschreibung |
|---|---|---|---|
| Indikatorname | Zeichenkette | erforderlich | Exakter Name des benutzerdefinierten Indikators, in Anführungszeichen. |
[p1, p2, ...] | Liste | keine | Argumente, die den deklarierten Variablen des Indikators in der Reihenfolge übergeben werden. |
| Kurskonstante | Schlüsselwort | Indikator-Standard | Optionaler angewandter Kurs wie Close, High, oder Low, in runden Klammern nach den eckigen Klammern. |
So funktioniert es
CALL bridges scripts. A custom indicator built in the indicator editor exposes whatever its RETURN statement emits, and any other script can pull those values in with CALL instead of duplicating the logic. Changes to the shared indicator then propagate to every caller automatically.
The values listed in brackets are bound, in order, to the indicator's declared parameters, so their count and meaning must match what the indicator expects. When the indicator returns several values, the left-hand side lists one variable per returned value in the same order as the RETURN statement. The keyword ignored dient als Platzhalter für Ausgaben, die der Aufrufer nicht benötigt, wodurch die Zuweisung stimmig bleibt, ohne Wegwerfvariablen zu erfinden.
Eine optionale Kurskonstante in Klammern steuert, auf welche Kursserie der aufgerufene Indikator angewendet wird. Wenn der aufgerufene Indikator rechnet auf customclose intern, die Angabe von (Close) oder eine andere Konstante an der Aufrufstelle hält die beiden Skripte konsistent. Lässt man sie weg, bleibt der Standard des aufgerufenen Indikators in Kraft.
Jedes CALL wertet den gesamten aufgerufenen Indikator über die Historie aus, die für die Antwort auf dem aktuellen Bar benötigt wird. Skripte, die mehrere Indikatoren mit CALL aufrufen oder CALL innerhalb von Schleifen verwenden, vervielfachen diese Kosten, was eine häufige Ursache für langsame Backtests ist. Wo Performance zählt, ist das direkte Einfügen kurzer Formeln in das aufrufende Skript oft schneller als ein CALL.
Beispiele
Beispiel 1, Einen eigenen Indikator mit zwei Parametern aufrufen (Indikator)
// Fetch the value of a personal indicator with parameters 7 and 14
myValue = CALL "my Personal Indicator Name"[7, 14]
// Post-process the result before plotting
a = myValue / 2
RETURN aDer eigene Indikator wird mit den beiden übergebenen Parametern ausgewertet, und das aufrufende Skript halbiert das Ergebnis, bevor es es zurückgibt.
Beispiel 2, Handelssignale aus einem gemeinsam genutzten Indikator (ProOrder)
DEFPARAM CumulateOrders = false
// The custom indicator "TrendGauge" returns a trend line and a signal flag
trendLine, signalFlag = CALL "TrendGauge"[20, 2]
// Enter long when the shared indicator flags a signal above its trend line
IF signalFlag = 1 AND close > trendLine THEN
BUY 1 CONTRACT AT MARKET
ENDIF
IF signalFlag = -1 THEN
SELL AT MARKET
ENDIFDie Strategie verwendet beide Ausgaben eines eigenen Indikators. Die Signallogik in einem Indikator zu halten bedeutet, dass Chartanzeige und Strategie niemals auseinanderlaufen können.
Beispiel 3, Screening auf einen eigenen Oszillator (ProScreener)
// Only the second output of "DualOscillator" is needed here
ignored, oscValue = CALL "DualOscillator"[14, 3] (Close)
// Keep instruments where the custom oscillator signals oversold
SCREENER[oscValue < 20] (oscValue AS "Oscillator")Der Screener verwendet einen eigenen Oszillator wieder, überspringt dessen erste Ausgabe mit ignored, und legt den verwendeten Kurs fest auf Close sodass die Ergebnisse mit der Chart-Version übereinstimmen.
Häufige Fehler und Stolperfallen
- Der Name muss exakt übereinstimmen. Die Zeichenkette in Anführungszeichen muss den Namen des Indikators genau wiedergeben, einschließlich Leerzeichen. Ein umbenannter oder fehlender Indikator macht jedes Skript unbrauchbar, das ihn mit CALL aufruft.
- Parameteranzahl und -reihenfolge. Die Argumente in Klammern werden positionsabhängig den deklarierten Variablen des Indikators zugeordnet. Zu wenige, zu viele oder umgestellte Argumente erzeugen falsche Werte oder Kompilierungsfehler.
- Performance-Kosten. Jedes CALL wertet den gesamten aufgerufenen Indikator erneut aus. Mehrere CALLs oder ein CALL auf einen Indikator, der selbst andere mit CALL aufruft, können Charts und Backtests dramatisch verlangsamen.
- Nicht passender angewandter Kurs. Verwendet der aufgerufene Indikator
customclose, kann das Auslassen der Kurskonstante an der Aufrufstelle unbemerkt eine andere Serie anwenden als die Chart-Version. Geben Sie sie explizit an, zum Beispiel(Close).
Verwandte Befehle
RETURN, definiert die Werte, die ein Indikator an Aufrufer weitergibt.Close, Schlusskurskonstante, die in CALL als angewandter Kurs verwendbar ist.High, Höchstkurskonstante, die als angewandter Kurs verwendbar ist.Low, Tiefstkurskonstante, die als angewandter Kurs verwendbar ist.CustomClose, vom Nutzer wählbare Kursreihen innerhalb eigener Indikatoren.DEFPARAM, Parameter auf Skriptebene des aufrufenden Programms.