FMZ PINE Script Dokumentation

Schriftsteller:Kleine Träume, Erstellt: 2022-05-06 14:27:06, aktualisiert: 2024-02-23 15:36:48

[TOC]

Schlüsselwörter, Grammatik, Einrichtung von Kurzbeschreibungen

Codestruktur

Die allgemeine Struktur, der Code in Pine folgt:

<version>
<declaration_statement>
<code>

Kommentare

FMZ-Notizersymbole für die Pine-Sprache: Einzeilenotation//Das ist ein sehr schwieriges Thema./* */Die Anmerkungen in den folgenden Beispielen werden beispielsweise geschrieben:

[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)  // 计算MACD指标

/*
plot函数在图表上画出指标线
*/
plot(macdLine, color = color.blue, title='macdLine')
plot(signalLine, color = color.orange, title='signalLine')
plot(histLine, color = color.red, title='histLine')

Ausgabe

Eine Kompilatorinstruktion in der folgenden Form teilt dem Kompilator mit, in welcher Version Pine das Skript geschrieben wurde:

//@version=5

V5 ist die Standardversion, die man aus dem Code entfernen kann.//@version=5

Die Erklärung

  • indicator()
  • strategy()

Statements bestimmen den Typ eines Skripts, der wiederum bestimmt, was er zulässt und wie er verwendet und ausgeführt wird. Sie setzen wichtige Eigenschaften des Skripts ein, wie z. B. seinen Namen, wo er erscheint, wenn er in ein Diagramm hinzugefügt wird, die Präzision und das Format der Zahlen, die er anzeigt, und bestimmte Zahlen, die er bei der Ausführung verhält, wie z. B. die maximale Anzahl von Zeichnungsobjekten, die er in einem Diagramm anzeigt. Für Strategien umfassen Eigenschaften Parameter, die die Rücksichtnahme kontrollieren, wie z. B. Anfangskapital, Provisionen, Gleitpunkte usw.indicator()Oderstrategy()Ich habe mich in meinem eigenen Land niedergelassen.

Der Code

Eine Zeile in einem Skript, die keine Anmerkungen oder Kompilatoranweisungen enthält, ist ein Satz, der die Algorithmen des Skripts implementiert. Eine Statement kann eine dieser Inhalte sein.

  • Variablenerklärung
  • Wiedervergütung der Variablen
  • Funktionserklärung
  • Eingebaute Funktionsanrufe, benutzerdefinierte Funktionsanrufe
  • ifforwhileoderswitchÄquivalente Strukturen

Sätze können auf verschiedene Weise sortiert werden.

  • Einige Statements können mit einer Zeile ausgedrückt werden, wie zum Beispiel die meisten Variablenerklärungen, die nur eine Funktionsanrufzeile oder eine Einzeilinie enthalten. Andere, wie Strukturen, benötigen immer mehrere Zeilen, da sie einen lokalen Block benötigen.
  • Die globalen Aussagen des Drehbuchs (d.h. Teile, die nicht zu den Teilblöcken gehören) können nicht mit空格oder制表符(Tab-Taste) beginnen. Ihr erstes Zeichen muss auch das erste Zeichen der Zeile sein. Die Zeile, die an der ersten Position der Zeile beginnt, ist per Definition Teil des globalen Bereichs des Skripts.
  • Eine Struktur oder eine mehrstrichige Funktionserklärung benötigt immer einelocal block│ Ein Localblock muss in einen Zeichnersatz oder vier Räume zusammengefasst werden (sonst wird er als serieller Code der vorherigen Zeile analysiert, d.h. als kontinuierlicher Inhalt der vorherigen Code-Zeile beurteilt), wobei jedes Localblock eine andere Lokalfläche definiert.
  • Mehrere Einzeilsätze können in einer Zeile durch Komma ((,) als Trennzeichen verknüpft werden.
  • Eine Zeile kann Kommentare enthalten oder nur Kommentare haben.
  • Die Zeilen können auch zusammengepackt werden (weiter in mehreren Zeilen).

Beispielsweise besteht aus drei Lokalblöcken, von denen eine in der Angabe einer benutzerdefinierten Funktion und zwei in der Angabe einer Variablen die If-Struktur verwenden, die folgenden Code enthalten:

indicator("", "", true)             // 声明语句(全局范围),可以省略不写

barIsUp() =>                        // 函数声明(全局范围)
    close > open                    // 本地块(本地范围)

plotColor = if barIsUp()            // 变量声明 (全局范围)
    color.green                     // 本地块 (本地范围)
else
    color.red                       // 本地块 (本地范围)

runtime.log("color", color = plotColor)  // 调用一个内置函数输出日志 (全局范围)

Codewechsel

Eine lange Zeile kann in mehrere Zeilen aufgeteilt oder "umgepackt" werden. Eine umgepackte Zeile muss in jede Anzahl von Räumen verkleinert werden, solange sie nicht ein Vielfaches von 4 ist (diese Grenzen werden für die Verkleinerung von Teilen verwendet).

a = open + high + low + close

Kann so verpackt werden (beachten Sie, dass die Anzahl der Schrumpffflächen pro Zeile keine Vielfache von 4 ist):

a = open +
      high +
          low +
             close

Ein langer Plot ((() -Aufruf kann in.

close1 = request.security(syminfo.tickerid, "D", close)      // syminfo.tickerid 当前交易对的日线级别收盘价数据系列
close2 = request.security(syminfo.tickerid, "240", close)    // syminfo.tickerid 当前交易对的240分钟级别收盘价数据系列
plot(ta.correlation(close, open, 100),                       // 一行长的plot()调用可以被包装
   color = color.new(color.purple, 40),
   style = plot.style_area,
   trackprice = true)

Ein Satz in einer vom Benutzer definierten Funktionserklärung kann auch verpackt werden. Da jedoch ein Lokalblock syntaxgetreu mit einem Schrumpfbeginn beginnen muss ((4 Räume oder 1 Zeichnersatz), muss der Fortlauf des Satzes bei seiner Aufteilung in die nächste Zeile mit mehr als einem Schrumpfbeginn beginnen ((nicht gleich einem Multiplikator von 4 Räumen); zum Beispiel:

test(c, o) =>
    ret = c > o ?
       (c > o+5000 ? 
          1 :
              0):
       (c < o-5000 ? 
          -1 : 
              0)

a = test(close, open)
plot(a, title="a")

Zeitreihenfolge

Eine Zeitreihe ist kein Datentyp oder Format. Sie ist ein grundlegendes Konzept in der Sprache PINE. Sie dient dazu, Werte zu speichern, die sich zeitlich kontinuierlich ändern. Jede Werte entspricht einem Zeitpunkt. Die Variablen sind eingebautopenDas ist ein Beispiel.openDie Variable erfasst den Eröffnungspreis für jede K-Line BAR, wenn dieseopenDas ist die Daten für die 5-minütige K-Linien-Zyklus.openDie Variablen enthalten den Startpreis der K-Line BAR (Säule) alle 5 Minuten.openDas heißt, wir beziehen uns auf den Startpreis der aktuellen K-Line BAR. Um einen früheren Wert in der Zeitreihe zu beziehen, verwenden wir[]Der historische Operator, der, wenn die Strategie auf einer K-Line BAR ausgeführt wird, dieopen[1]Das bedeutet, dass der Startpreis des vorherigen K-Line-BARs der aktuellen K-Line-BAR zitiert wird.

ObwohlZeitreihenfolgeEs ist leicht, an Datenstrukturen wie "Arrays" zu denken, obwohl die PINE-Sprache auch Arraytypen hat. Sie sind jedoch ein völlig anderes Konzept als Zeitreihen.

Die PINE-Sprache kann Zeitreihen so entwerfen, dass die Summe der Schlusskosten in der Strategiecode sehr einfach berechnet werden kann, und es ist nicht notwendig, eine Loop-Struktur wie for zu verwenden, sondern nur die eingebauten Funktionen der PINE-Sprache zu verwenden.ta.cum(close)Oder zum Beispiel: Wir müssen den Durchschnitt der höchsten und niedrigsten Preise der letzten 14 K-Linien BAR (d. h. die 14 K-Linien BAR, die am aktuellen Zeitpunkt der Codeausführung am nächsten sind) berechnen.ta.sma(high - low, 14)

Das Ergebnis eines Aufrufs einer Funktion auf der Zeitreihe hinterlässt auch einen Spuren auf der Zeitreihe.[]Der historische Operator bezieht sich auf den vorhergehenden Wert. Zum Beispiel können wir schreiben, ob der Schlusskurs der aktuellen K-Linie BAR den Maximalwert des höchsten Preises in den letzten 10 K-Linie BAR übersteigt (ohne die aktuelle K-Linie BAR).breach = close > ta.highest(close, 10)[1]Das kann auch so geschrieben werden:breach = close > ta.highest(close[1], 10)Ich bin nicht derjenige.ta.highest(close, 10)[1]undta.highest(close[1], 10)Ich bin nicht derjenige, der das sagt.

Sie können mit dem folgenden Code überprüfen:

strategy("test pine", "test", true) 

a = ta.highest(close, 10)[1]
b = ta.highest(close[1], 10)

plotchar(true, title="a", char=str.tostring(a), location=location.abovebar, color=color.red)
plotchar(true, title="b", char=str.tostring(b), location=location.belowbar, color=color.green)

Der obige Testcode liefert a und b an jeder BAR ihre Werte in der entsprechenden Zeitreihe aus, so dass man sehen kann, dass a und b immer gleich sind, so dass die beiden Anwendungen gleichwertig sind.

Die Templateparameter für die Pine-Language-Transaktions-Klasse

Die PINE-Strategien haben eine integrierte Vorlage für die "Pine-Sprachhandlungsklasse" und eine Anleitung zur Einstellung der Parameter.

Transaktions-Einstellungen

  • Ausführung Schließpreismodell: Das Modell wird erst ausgeführt, wenn die aktuelle BAR abläuft, und die Transaktionen werden ausgeführt, wenn die unteren BARs beginnen. Echtzeit-Preismodelle: Bei jeder Preisänderung wird das Modell ausgeführt, mit dem Signal, um den Handel sofort auszuführen.
  • Standardeinstellung: Wenn die Handelsanweisung keine Anzahl von Transaktionen angibt, wird die Anzahl der Transaktionen nach dieser Einstellung ausgeführt.
  • Maximaler Einzeltrag: Die maximale Anzahl von Einzelträgen wird anhand der tatsächlichen Auflistung und in Verbindung mit diesem Parameter festgelegt, um die Auflistung pro Auflistung zu vermeiden.
  • Anzahl der Gleitpreise: je nach定价货币精度Die Parameter und dieser Parameter bestimmen den Gleitpreis bei der Bestellung. Zum Beispiel wird die Preispräzision auf 2 gesetzt, d. h. genau bis zum zweiten Teilpunkt und genau bis 0.01; dann steht jeder Gleitpreispunkt für 0.01 Pricing-Einheiten.
  • Die längste Periodenzahl der Variablen: beeinflusst die Anzahl der BAR-Linien des Diagramms K, mitjavascriptAnrufe in der StrategieSetMaxBarLenDie Funktion ist die gleiche.

Futures-Optionen

  • Der Code der Sorte: Vertragskode, die nur eingestellt werden muss, wenn ein Austauschobjekt ein Nicht-Kontakt-Austauschobjekt ist.
  • Mindeste Anzahl von Aufträgen: Mindeste Anzahl von Aufträgen beim Auftragen.

Festplattenoptionen

  • Auto-Restore-Progress: Automatisiert den Status, in dem sich die letzte Politik befand, bevor sie gestoppt wurde.
  • Anzahl der Auftragswiederholungen: Wenn keine Transaktion stattfindet, wird die Bestellung widerrufen und der Auftrag erneut aufgegeben. Der Parameter wird verwendet, um die maximale Anzahl der Wiederholungen zu begrenzen.
  • Netzwerkanfragenintervall (millisekunden): Wirksam nur für den REST-Protokoll, um die Intervalle der Netzwerkanfragen zu kontrollieren und zu vermeiden, dass die Anfragen zu häufig sind und die Grenzen der Börse überschreiten.
  • Konto-Synchronisierungszeit ((Sekunden): Zeiträume für die Synchronisierung von Konto-Daten.
  • Post-Posit Synchronisation Zeit (milliseconds): Nur für einige Börsen, die durch Datenverzögerungen verursacht werden, kann eine größere Synchronisation Zeit eingestellt werden, um solche Probleme zu lindern.
  • Hebel multiplier: Setzen Sie Hebel multiplier.

Bargeldgeschäfte, andere Einstellungen

  • Einhandstransaktionen: Die Standard-Einhandstransaktionen gelten nur für Bargeld.
  • Minimaler Umsatz: Minimaler Umsatz.
  • Preisgenauigkeit: Preisgenauigkeit, d.h. die geringe Zahl der Preise.
  • Transaktionsspezifische Präzision: die Präzision der nächsten Einheit, also die geringen Zahlenzahlen der nächsten Einheit.
  • Gebühren: Für die Berechnung einiger Daten unter dieser Einstellung steht 0.002 für 2 auf tausend.
  • Gewinn-und-Verlust-Statistik-Intervall: Nur auf der echten Platte zeigen Sie die Gewinn-und-Verlust-Statistiken.
  • Versagen des Wiederversuchs (millisekunden): Wiederversuchsintervall, wenn die Netzwerkanfrage fehlschlägt.
  • Benutzervertreter: Nur für den REST-Protokoll gültig.
  • Häufige Fehler im Netz verbergen: Häufige Fehler im Log-Bereich verbergen.
  • Wechseln Sie die Basisadresse: Nur für den REST-Protokoll gültig.
  • Schieben Sie Benachrichtigungen: Schieben Sie Nachrichten in Ihre E-Mails.

Nachfolgender Deal

Eröffnung

strategy(title = "open long example", pyramiding = 3)                                // pyramiding 允许的同方向下单的次数
strategy.entry("long1", strategy.long, 0.01)                                         // 市价开多仓,指定分组标签为long1
strategy.entry("long2", strategy.long, 0.02, when = close > ta.ema(close, 10))       // 条件触发,执行下单,市价开多仓
strategy.entry("long3", strategy.long, 0.03, limit = 30000)                          // 指定(较低的)价格,计划下买单订单,等待成交开仓,限价开仓

Plateau

strategy(title = "close long example", pyramiding = 2)                              // pyramiding 允许的同方向下单的次数
strategy.entry("long1", strategy.long, 0.1)                                         // 市价开多仓,指定分组标签为long1
strategy.entry("long2", strategy.long, 0.1)                                         // 市价开多仓,指定分组标签为long2
strategy.close("long1", when = strategy.position_size > 0.1, qty_percent = 50, comment = "close buy entry for 50%")   // 平仓,指定平掉分组标签为long1的仓位的50%持仓
strategy.close("long2", when = strategy.position_size > 0.1, qty_percent = 80, comment = "close buy entry for 80%")   // 平仓,指定平掉分组标签为long2的仓位的80%持仓

Handelsmechanismen

Der Haltungsmechanismus der PINE-Sprache ist ähnlich wie bei einer einseitigen Haltung. Beispielsweise wird bei einer Position in mehreren Richtungen ("Mehrseitige Haltung") der Haltungsmechanismus, wenn es einen Verkaufsaufgabe-Order, eine Planliste usw. gibt, ausgelöst.

Planungsliste

Bei der Verwendung der Anweisung zu bestellen, ist die Marktpreisliste der Standard, wenn kein Preis angegeben wird. Außer der Marktpreisliste kann man auch mit der Planliste bestellen, die nicht sofort mit der Planliste arbeitet. Die Planliste kann in der Plan-Auftrags-Warteschlange eines Programms, das nicht ausgelöst wurde, ausgeführt werden.Festplatte / RückmessungDie Zeit-Status-Informationen (d. h. Status-Tabellen, wenn die Strategie ausgeführt wird) sind in der Tabelle "Planning Orders" zu sehen. Das System wird diese Pläne nur dann tatsächlich ausgeben, wenn die Bedingungen für den Markt in Echtzeit erfüllt sind. Daher sind diese Pläne mit geringen Abweichungen in den Transaktionspreisen normal.strategy.entryWenn wir eine Funktion auflisten, können wir sagen,limitstopParameter.

var isTrade = false 
if not barstate.ishistory and not isTrade
    isTrade := true 
    strategy.entry("test 1", strategy.long, 0.1, stop=close*1.3, comment="test 1 order")                     // stop
    strategy.entry("test 2", strategy.long, 0.2, limit=close*0.7, comment="test 2 order")                    // limit
    strategy.entry("test 3", strategy.short, 0.3, stop=close*0.6, limit=close*1.4, comment="test 3 order")   // stop-limit    
  • Limit-Bestellungen

    Setzen Sie den Preis für die Bestellung ein, wenn die Bestellung als Bezahlung (d.h.directionDie Parameter sind:strategy.longDie Bestellung wird nur dann ausgelöst, wenn der aktuelle Marktpreis darunter liegt. Wenn die Bestellung als Verkaufsauftrag erfolgt (d.h.directionDie Parameter sind:strategy.shortDie Bestellung wird nur dann ausgelöst, wenn der aktuelle Marktpreis höher ist als dieser Preis.

  • Stop-Bestellung

    Setzen Sie den Stop-Loss-Preis für die Bestellung, wenn die Bestellung ein Kauf ist und die Bestellung nur dann ausgelöst wird, wenn der aktuelle Marktpreis höher ist als dieser Preis. Wenn es sich um einen Verkaufs- oder Verkaufsauftrag handelt, wird der Auftrag nur dann ausgelöst, wenn der aktuelle Marktpreis darunter liegt.

  • Stop-Limit-Bestellungen

    Sie können gleichzeitig eingestellt werden.limitstopParameter, bei denen die Bestellung zuerst zu dem Preis ausgelöst wird, der die Bedingungen erfüllt.

Erklärung, logische Struktur und Schlüsselwörter

Ver-

var ist das Schlüsselwort für die Zuordnung und Einmalinitialierung von Variablen. Normalerweise führt eine Variablenbezeichnungssymmetrie, die nicht das Schlüsselwort var enthält, dazu, dass der Wert der Variablen jedes Mal überschattet wird, wenn die Daten aktualisiert werden. Im Gegensatz dazu können Variablen, die mit dem Schlüsselwort var zugewiesen werden, den Status-Satz beibehalten, obwohl die Daten aktualisiert werden, und nur dann geändert werden, wenn die Bedingungen in den if-expressions erfüllt sind.

var variable_name = expression

Erläuterung:

  • variable_name- Jeder Name der in Pine Script zulässigen Benutzervariablen (kann mit Groß- und Kleinbuchstaben, Zahlen und Unterzeichen (_) versehen sein, kann aber nicht mit Zahlen beginnen)
  • expression- Jede Arithmetische Ausdrucksform, wie die Definition einer regulären Variable.

Beispiele

// Var keyword example
var a = close
var b = 0.0
var c = 0.0
var green_bars_count = 0
if close > open
    var x = close
    b := x
    green_bars_count := green_bars_count + 1
    if green_bars_count >= 10
        var y = close
        c := y
plot(a, title = "a")
plot(b, title = "b")
plot(c, title = "c")

Die Variable a hält den Schlusspreis der ersten Spalte in jeder Spalte in der Reihe. Die Variablen B bleiben bei der Eröffnungs- und Schlusskurs der ersten in der Reihe. Die Variable C hält den Schlusskurs der zehnten in der Serie stehenden grünen Kürze.

Auf der FMZ gibt es zwei Modelle: ein Echtzeit-Preismodell, ein Schlusspreismodell und ein Modell für die Berechnung der Preise.varvaripDie Variablen, die erklärt werden, testen wir mit der folgenden Code.

strategy("test pine", "test 1", true) 

// 测试 var varip
var i = 0
varip ii = 0

// 将策略逻辑每轮改变的i、ii打印在图上
plotchar(true, title="ii", char=str.tostring(ii), location=location.abovebar, color=color.red)
plotchar(true, title="i", char=str.tostring(i), location=location.belowbar, color=color.green)

// 每轮逻辑执行都给i、ii递增1
if true
    i := i + 1
    ii := ii + 1
  • Echtzeit-Preismodell Die oben genannten Testcodes werden in zwei Phasen ausgeführt: 1. Die historische K-Linienphase. 2. Die reale K-Linienphase.varvaripDie erklärte Variable i, ii wird bei jeder Ausführung des Strategiecodes inkrementell ausgeführt, weil (((if trueSo kann man sehen, dass die Zahlen, die auf der K-Linien-BAR für die Wiederholung des Ergebnisses angezeigt werden, jeweils inkrementell 1 sind.varvaripDa es sich um ein Real-Time-Preis-Modell handelt, wird bei jeder Preisänderung in einer K-Line-BAR wiederholt Strategie-Code ausgeführt.i := i + 1undii := ii + 1Der Unterschied ist, dass ii jedes Mal geändert wird. i wird zwar jedes Mal geändert, aber bei der nächsten Ausführung der Strategielogik wird der vorherige Wert wiederhergestellt, bis die aktuelle K-Linie BAR abläuft, bevor sie den festgelegten Wert aktualisiert (d. h. bei der nächsten Ausführung der Strategielogik nicht mehr wiederhergestellt wird).

  • Modell für die Abschlusspreise Da das Schlusspreismodell nur eine Strategie-Logik ausführt, wenn jede K-Linie BAR abläuft.varvaripDie erklärten Variablen zeigen sich in den oben genannten Beispielen in absoluter Übereinstimmung mit einer Zunahme von 1 für jede K-Leitung BAR.

Variation

varip ((var intrabar persist) ist ein Schlüsselwort für die Zuordnung und Einmalinitialierung von Variablen. Es ist ähnlich dem Schlüsselwort var, aber Variablen mit der Varip-Deklaration behalten ihren Wert zwischen Echtzeit-K-Linien-Aktualisierungen.

varip variable_name = expression

Erläuterung:

  • variable_name- Jeder Name der Benutzervariablen, der im Pine-Skript zulässig ist (kann Groß- und Kleinbuchstaben, Zahlen und Unterzeichen enthalten, kann aber nicht mit Zahlen beginnen)
  • expression- irgendein arithmetischer Ausdruck, wie bei der Definition einer normalen Variable. In der ersten K-Linie wird der Ausdruck nur einmal berechnet und der Variable einmal zugewiesen.

Beispiele

// varip
varip int v = -1
v := v + 1
plot(v)

Bei der Verwendung von var kehrt das Diagramm den Wert von bar_index zurück. Bei der Verwendung von varip erfolgt das gleiche Verhalten auf historischen K-Linien, aber in Echtzeit-K-Linien kehrt das Diagramm einen Wert zurück, der für jeden Tick um einen erhöht wird.

AnmerkungenKann nur mit einfachen Typen wie float, int, bool, string und Arrays dieser Typen verwendet werden.

- Das stimmt.

Der Wert einer Boole-Variablen oder wenn der Ausdruck verwendet wirdVergleichoderLogikDer Wert, den man berechnen kann, wenn man einen Operator benutzt.

AnmerkungenSiehe auchVergleichDie Operatoren undLogikBeschreibung der Operatoren.

Bis dann bool

falsche

Der Wert einer Variablen des Boole-Typs und die Ergebnisse der Vergleichsoperationen und Logikoperationen werden angegeben.

AnmerkungenSiehe auchVergleichDie Operatoren undLogikBeschreibung der Operatoren.

Bis dann bool

wenn

Die If-Sprache definiert die Satzblöcke, die ausgeführt werden müssen, wenn die Ausdrucksbedingungen erfüllt werden. Die vierten Version der Pine-Skriptsprache erlaubt Ihnen die Verwendung der else-if--Symmetrie.

Der allgemeine Code stammt von:

var_declarationX = if condition
    var_decl_then0
    var_decl_then1
    ...
    var_decl_thenN
    return_expression_then
else if [optional block]
    var_decl_else0
    var_decl_else1
    ...
    var_decl_elseN
    return_expression_else
else
    var_decl_else0
    var_decl_else1
    ...
    var_decl_elseN
    return_expression_else

Anmerkungen var_declarationX- Diese Variable erhält den Wert der if-Sätzecondition- Wenn die Bedingung true ist, wird der Satzblock verwendet.thenDie Logikvar_decl_then0var_decl_then1Ähnlich wie) ⇒ Wenn die Bedingung false ist, wird der Satzblock verwendet.else ifOderelseDie Logikvar_decl_else0var_decl_else1Und so weiter.return_expression_then , return_expression_else- Der letzte Ausdruck im Modul oder der Ausdruck aus dem Blockelse gibt den Endwert des Satzes zurück. Wenn eine Variable am Ende angegeben wird, ist ihr Wert der Ergebniswert.

Die Art des zurückgegebenen Werts der if-Stricture hängt vonreturn_expression_thenundreturn_expression_elseDie Typen müssen übereinstimmen, wenn sie in der TradingView ausgeführt werden: Es ist unmöglich, einen ganzen Wert aus dem then-Satzblock zurückzugeben, wenn Sie einen Stringwert in einem Else-Block haben.

Beispiele

// This code compiles
x = if close > open
    close
else
    open  

// This code doesn’t compile by trading view
// y = if close > open
//     close
// else
//     "open"
plot(x)

Kann ausgelassen werdenelseBlocks. In diesem Fall wird der Variable var_declarationX ein empty-Threshold (na, false oder ) zugewiesen, wenn die Bedingung false ist:

Beispiele

// if
x = if close > open
    close
// If current close > current open, then x = close.
// Otherwise the x = na.
plot(x)

Es können mehrere else if-Blöcke verwendet oder gar nicht verwendet werden.

Beispiele

// if
x = if open > close
    5
else if high > low
    close
else
    open
plot(x)

Sie können es ignorieren.ifDer Ergebniswert des Satzes ((var_declarationX= kann übersprungen werden) ). Es kann nützlich sein, wenn Sie eine Nebenfunktion des Ausdrucks benötigen, z. B. im Strategiehandel:

Beispiele

if (ta.crossover(high, low))
    strategy.entry("BBandLE", strategy.long, stop=low)
else
    strategy.cancel(id="BBandLE")

Die If-Sätze können miteinander verknüpft sein:

Beispiele

// if
float x = na
if close > open
    if close > close[1]
        x := close
    else
        x := close[1]
else
    x := open
plot(x)

für

Die 'for'-Struktur erlaubt die Wiederholung mehrerer Sätze:

[var_declaration =] for counter = from_num to to_num [by step_num]
    statements | continue | break
    return_expression

var_declaration- Eine optionelle Variablenerklärung, die als Wert für die return_expression in der Rückrunde zugewiesen wird.counter- Speichert die Variablen für den Rücklaufzählerwert, wobei bei jeder Wiederholung des Rücklaufs der Wert von 1 oder step_num erhöht/verringert wird.from_num- Startwert des Zählers. Die Verwendung der Ausdrücke series int/float threshold ist erlaubt.to_num- Endwert des Zählers. Der Kreislauf wird unterbrochen, wenn der Zähler größer als to_num ist (oder kleiner als to_num im Fall von from_num > to_num).step_num- Zunahme/Abnahme des Zählers. Es ist optional. Der Standardwert ist +1 oder -1, je nachdem, welcher der größten von from_num oder to_num ist.statements | continue | break- beliebig viele Sätze, oder das Schlüsselwort "continue" oder "break" in vier Räume oder Tabs zusammengefasst;return_expression- Der Rückgabewert des Loops, wenn vorhanden, wird der Variable in der var_declaration zugewiesen. Wenn der Loop aufgrund der Schlüsselwörter continue oder break beendet wird, wird der Rückgabewert des Loops der Wert der letzten Variable sein, der vor dem Ausgang des Loops zugewiesen wurde.continue- ein Schlüsselwort, das nur in der Umlaufphase verwendet werden kann.break- Das Schlüsselwort für den Rückzug.

Beispiele

// Here, we count the quantity of bars in a given 'lookback' length which closed above the current bar's close
qtyOfHigherCloses(lookback) =>
    int result = 0
    for i = 1 to lookback
        if close[i] > close
            result += 1
    result
plot(qtyOfHigherCloses(14))

Bis dann for...in while

Für... in

for...inDie Struktur erlaubt die Wiederholung mehrerer Statements für jedes Element in der Array. Sie kann mit einem beliebigen Parameter verwendet werden:array_element, oder zusammen mit zwei Parametern:[index, array_element]Die zweite Form beeinflusst nicht die Funktion des Loops. Sie verfolgt die Index der aktuellen Ideration in der ersten Variable der Elemente.

[var_declaration =] for array_element in array_id
    statements | continue | break
    return_expression

[var_declaration =] for [index, array_element] in array_id
    statements | continue | break
    return_expression

var_declaration- eine optionale Variablenerklärung, die dem Loop zugewiesen wirdreturn_expressionDer Wert von.index- Optionale Variablen für den aktuellen Iterationsindex verfolgen. ■ Index beginnt bei 0. ■ Variable sind im Kreislauf unveränderlich. ■ Wenn sie verwendet werden, muss sie in einem ebenfalls enthaltenen enthalten sein.array_elementDas ist eine der größten Schwierigkeiten, die es gibt.array_element- enthält eine Variable für jedes in einem Kreislauf zu bearbeitende Elemente in einem kontinuierlichen Array. Diese Variable ist im Kreislauf unveränderlich.array_id- Array-IDs mit Kreislauf-Ideration.statements | continue | break- beliebig viele Sätze, oder das Schlüsselwort "continue" oder "break" in vier Räume oder Tabs zusammengefasst;return_expression- Die Rückgabe des Kreislaufs wird zugewiesenvar_declarationDie Variablen, wenn vorhanden. Wenn die Schleife aufgrund der Schlüsselwörter continue oder break aussteigt, ist der Rücklaufwert der Schleife die letzte Variable, die der Schleife vor dem Aussteigen zugewiesen wurde.continue- ein Schlüsselwort, das nur in der Umlaufphase verwendet werden kann.break- Das Schlüsselwort für den Rückzug.

Ermöglicht die Änderung von Elementen oder ihrer Größe in einem Loop. Hier benutzen wirfor...inDie Einzelländerungsform kann bestimmt werden, wie viele OHLC-Werte von K-Linien auf jeder K-Line größer sind als die SMA für den Threshold von close:

Beispiele

// Here we determine on each bar how many of the bar's OHLC values are greater than the SMA of 'close' values
float[] ohlcValues = array.from(open, high, low, close)
qtyGreaterThan(value, array) =>
    int result = 0
    for currentElement in array
        if currentElement > value
            result += 1
        result
plot(qtyGreaterThan(ta.sma(close, 20), ohlcValues))

Hier haben wir die zwei For...in-Formen benutzt, um unsereisPosDie Werte der Arrays werden alstrueSie sind in unserem Land.valuesArrayDie entsprechenden Werte in der Array sind:

Beispiele

// for...in
var valuesArray = array.from(4, -8, 11, 78, -16, 34, 7, 99, 0, 55)
var isPos = array.new_bool(10, false)  

for [index, value] in valuesArray
    if value > 0
        array.set(isPos, index, true)  

if barstate.islastconfirmedhistory
    runtime.log(str.tostring(isPos))

Bis dann for while array.sum array.min array.max

während

whileStatements erlauben die Bedingungen der lokalen Codeblöcke zu wiederholen.

variable_declaration = while boolean_expression
    ...
    continue
    ...
    break
    ...
    return_expression

Erläuterung:variable_declaration- Optionale Variablenerklärungen.return expressionSie können einen Initialitätswert für diese Variable angeben.boolean_expression- Wenn wahr, dann ausgeführtwhileWenn es falsch ist, ist es in der Liste der lokalen Blöcke.whileNach dem Satz wird das Skript weiter ausgeführt.continue - continueDie Schlüsselwörter führen zu einer Kreislaufverzweigung bis zur nächsten Iteration.break - breakDie Schlüsselwörter führen zum Ende der Schleife.whileDie Rede wird nach dem Satz fortgesetzt.return_expression- BereitstellungwhileEine Optionszeile, die einen Wert zurückgibt.

Beispiele

// This is a simple example of calculating a factorial using a while loop.
int i_n = input.int(10, "Factorial Size", minval=0)
int counter   = i_n
int factorial = 1
while counter > 0
    factorial := factorial * counter
    counter   := counter - 1

plot(factorial)

AnmerkungenAnfangswhileDer lokale Codeblock nach der Zeile muss in vier Räume oder einen Zeichner zusammengefasst werden.whileDie Kreisläufe.whileDie folgenden Boole-Expressionen müssen schließlich false werden, oder sie müssen ausgeführt werdenbreak

Wechseln

Die switch-Operator verlagert die Kontrolle an einen der folgenden Satzungen, je nach Bedingungen und Ausdruckswerten.

[variable_declaration = ] switch expression
    value1 => local_block
    value2 => local_block
    ...
    => default_local_block

[variable_declaration = ] switch
    boolean_expression1 => local_block
    boolean_expression2 => local_block
    ...
    => default_local_block

Der Schalter mit der Ausdrucksweise:

Beispiele

// Switch using an expression

string i_maType = input.string("EMA", "MA type", options = ["EMA", "SMA", "RMA", "WMA"])

float ma = switch i_maType
    "EMA" => ta.ema(close, 10)
    "SMA" => ta.sma(close, 10)
    "RMA" => ta.rma(close, 10)
    // Default used when the three first cases do not match.
    => ta.wma(close, 10)

plot(ma)

Ein Schalter ohne Ausdruckszeichen:

Beispiele

strategy("Switch without an expression", overlay = true)

bool longCondition  = ta.crossover( ta.sma(close, 14), ta.sma(close, 28))
bool shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))

switch
    longCondition  => strategy.entry("Long ID", strategy.long)
    shortCondition => strategy.entry("Short ID", strategy.short)

Rückgabe von WertenDer Wert des letzten Ausdrucks im ausgeführten lokalen Satzblock.

AnmerkungenNur ausgeführt werdenlocal_blockBeispiel oderdefault_local_blockEiner von ihnen.default_local_blockNur mit=>Die Markierung wird zusammen eingeführt und nur dann ausgeführt, wenn der vorherige Block nicht ausgeführt wurde.switchDas Ergebnis des Satzes wird einer Variable zugewiesen und nicht angegebendefault_local_blockWenn es nicht ausgeführt wirdlocal_blockDas Wort wird zurückgegeben.naIch werde.switchWenn man die Ergebnisse der Aussage einer Variablen zuweist, werden allelocal_blockDie Instanz muss einen Wert desselben Typs zurückgeben.

Bis dann if ?:

Reihe

series ist ein Schlüsselwort für den Datenserientyp.seriesDie Schlüsselwörter sind in der Regel unnötig.

Die Operatoren

=

Wird verwendet, um Variablen zu bezeichnen, aber nur, wenn Variablen erklärt werden (für den ersten Mal verwendet).

:=

Bewertungsoperator, der die Variablen auf der linken Seite bewertet.

!=

Es ist nicht gleich. Für jede Art von Ausdruck.

expr1 != expr2

Rückgabe von WertenEin Boole-Wert, oder eine Reihe von Boole-Werten.

%

Modul ((Integratum) ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠

expr1 % expr2

Rückgabe von WertenEine ganze Zahl oder ein Fluktuationswert oder eine Reihe von Werten.

AnmerkungenIn der Pine-Skriptatik wird der Trader beim Berechnen der Restzahl der ganzen Zahlen abgeschnitten; d. h. er wird bis zum kleinsten absoluten Wert in Vier- und Fünfstel gestellt.

Beispiel: -1 % 9 = -1 - 9 * truncate ((-1/9) = -1 - 9 * truncate ((-0.111) = -1 - 9 * 0 = -1.

%=

Modulbezeichnungen. Für Zahlenfragen.

expr1 %= expr2

Beispiele

// Equals to expr1 = expr1 % expr2.
a = 3
b = 3
a %= b
// Result: a = 0.
plot(a)

Rückgabe von WertenEine ganze Zahl oder ein Fluktuationswert oder eine Reihe von Werten.

*

Multiplikation. Für Zahlen.

expr1 * expr2

Rückgabe von WertenEine ganze Zahl oder ein Fluktuationswert oder eine Reihe von Werten.

*=

Multiplikationsbezeichnungen.

expr1 *= expr2

Beispiele

// Equals to expr1 = expr1 * expr2.
a = 2
b = 3
a *= b
// Result: a = 6.
plot(a)

Rückgabe von WertenEine ganze Zahl oder ein Fluktuationswert oder eine Reihe von Werten.

+

Zusätzliche oder einheitliche Anzeichen. Für Zahlenäußerungen oder Strings.

expr1 + expr2
+ expr

Rückgabe von WertenBinärität der String+Die Kombination von exp1 und exp2 wird zurückgegeben Die Zahlen geben einen ganzen Wert oder einen Schwellpunktwert oder eine Reihe von Werten zurück: Das binäre P +'gibt den Ausdruck 1 plus den Ausdruck 2 zurück. Ein-Zahlen-Zahlen + Zahlen-Zahlen kehrt expr ((für die Ein-Zahlen-Operator-Symmetrie keine Inhalte hinzugefügt) zurück).

AnmerkungenSie können Arithmetische Operatoren mit Zahlen und Zahlen von Variablen verwenden. Wenn Sie Zahlen verwenden, werden die Operatoren für Elemente verwendet.

+=

Die Verknüpfungsbezeichnung. gilt für Zahlenäußerungen oder Strings.

expr1 += expr2

Beispiele

// Equals to expr1 = expr1 + expr2.
a = 2
b = 3
a += b
// Result: a = 5.
plot(a)

Rückgabe von WertenFür die String, die Expr1- und Expr2-Serie zurückkehrt. Für die Zahlen, die eine ganze Zahl oder einen Schwellpunktwert oder eine Reihe von Werten zurückkehrt.

AnmerkungenSie können Arithmetische Operatoren mit Zahlen und Zahlen von Variablen verwenden. Wenn Sie Zahlen verwenden, werden die Operatoren für Elemente verwendet.

-

Subtraktionsregeln oder einheitliche negative Zahlen.

expr1 - expr2
- expr

Rückgabe von WertenEr gibt einen ganzen Wert oder einen Fluktuationswert oder eine Reihe von Werten zurück: Das binäre P+' gibt den Expr1 minus den Expr2 zurück. Ein Euro-Die Negativformel von expr wird zurückgegeben.

AnmerkungenSie können Arithmetische Operatoren mit Zahlen und Zahlen von Variablen verwenden. Wenn Sie Zahlen verwenden, werden die Operatoren für Elemente verwendet.

-=

Subtraktionsbezeichnungen.

expr1 -= expr2

Beispiele

// Equals to expr1 = expr1 - expr2.
a = 2
b = 3
a -= b
// Result: a = -1.
plot(a)

Rückgabe von WertenEine ganze Zahl oder ein Fluktuationswert oder eine Reihe von Werten.

/

Die Ausnahme ─ gilt für Zahlenäußerungen ─.

expr1 / expr2

Rückgabe von WertenEine ganze Zahl oder ein Fluktuationswert oder eine Reihe von Werten.

/=

Ausnahmebezeichnungen. Für numerische Ausdrücke.

expr1 /= expr2

Beispiele

// Equals to expr1 = expr1 / expr2.
a = 3
b = 3
a /= b
// Result: a = 1.
plot(a)

Rückgabe von WertenEine ganze Zahl oder ein Fluktuationswert oder eine Reihe von Werten.

<

Weniger als. Gilt für Zahlenäußerungen.

expr1 < expr2

Rückgabe von WertenEin Boole-Wert, oder eine Reihe von Boole-Werten.

<=

Weniger als oder gleich. Für Zahlenäußerungen.

expr1 <= expr2

Rückgabe von WertenEin Boole-Wert, oder eine Reihe von Boole-Werten.

==

Äquivalent an. Kann für jede Art von Ausdruck verwendet werden.

expr1 == expr2

Rückgabe von WertenEin Boole-Wert, oder eine Reihe von Boole-Werten.

=>

Der '=>' wird für die Benutzerdefinierten Funktionserklärungen undswitchIch habe mich in meinem eigenen Leben nicht geäußert.

Die Syntax der Funktionserklärung lautet:

<identifier>([<parameter_name>[=<default_value>]], ...) =>
    <local_block>
    <function_result>

Einer<local_block>Es sind null oder mehr Pine-Sätze.<function_result>Eine Variable, ein Ausdruck oder eine Elementegruppe.

Beispiele

// single-line function
f1(x, y) => x + y
// multi-line function
f2(x, y) => 
    sum = x + y
    sumChange = ta.change(sum, 10)
    // Function automatically returns the last expression used in it
plot(f1(30, 8) + f2(1, 3))

AnmerkungenWeitere Informationen zu Benutzerdefinitionsfunktionen finden Sie auf der Seite der Benutzerhandbuchserklärungen und der Skriptbibliothek.

>

Größer als. Gilt für numerische Ausdrücke.

expr1 > expr2

Rückgabe von WertenEin Boole-Wert, oder eine Reihe von Boole-Werten.

>=

größer als oder gleich. Für Zahlenäußerungen gilt.

expr1 >= expr2

Rückgabe von WertenEin Boole-Wert, oder eine Reihe von Boole-Werten.

?:

Die drei-Stufen-Konditions-Operatoren.

expr1 ? expr2 : expr3

Beispiele

// Draw circles at the bars where open crosses close
s2 = ta.cross(open, close) ? math.avg(open,close) : na
plot(s2, style=plot.style_circles, linewidth=2, color=color.red)  

// Combination of ?: operators for 'switch'-like logic
c = timeframe.isintraday ? color.red : timeframe.isdaily ? color.green : timeframe.isweekly ? color.blue : color.gray
plot(hl2, color=c)

Rückgabe von WertenWenn express1 als true bewertet wird, wird express2 als express3 betrachtet. Die Nullwerte ((0 und NaN+, Infinity,-Infinity) werden als false betrachtet, alle anderen Werte als true.

AnmerkungenWenn Sie nicht möchten, verwenden Sie na als else-Verzweigung. Sie können zwei oder mehr?:Operatoren kombinieren, um Sätze zu realisieren, die ähnlich wie die Schaltfläche sind (siehe Beispiel oben). Sie können Arithmetische Operatoren mit Zahlen und Zahlen von Variablen verwenden. Wenn Sie Zahlen verwenden, werden die Operatoren für Elemente verwendet.

Bis dann na

[]

Reihe Unterzeichen ─ Bereitstellung von Zugriff auf frühere Werte der Reihe expr1 ─ Expr2 ist die Anzahl der letzten k-Streifen, die ein Wert sein muss ─ Schwimmen wird nach unten umgewandelt ─

expr1[expr2]

Beispiele

// [] can be used to "save" variable value between bars
a = 0.0 // declare `a`
a := a[1] // immediately set current value to the same as previous. `na` in the beginning of history
if high == low // if some condition - change `a` value to another
    a := low
plot(a)

Rückgabe von WertenEine Reihe von Werten.

Bis dann math.floor

und

Logische AND. Für die Boolean-Expressionen gilt:

expr1 and expr2

Rückgabe von WertenEin Boole-Wert, oder eine Reihe von Boole-Werten.

oder

Die Logik OR↑ gilt für die Boole-Expression↑

expr1 or expr2

Rückgabe von WertenEin Boole-Wert, oder eine Reihe von Boole-Werten.

- Nein.

Logische Gegenseitigkeit ((NOT) ⇒ gilt für den Boolean-Ausdruck.

not expr1

Rückgabe von WertenEin Boole-Wert, oder eine Reihe von Boole-Werten.

Datentyp Schlüsselwörter

Boole

Ein Schlüsselwort für den Typ "Bool" für explizit erklärte Variablen oder Parameter. Die Variablen "Bool" können als true, false oder na bezeichnet werden.

Beispiele

// bool
bool b = true    // Same as `b = true`
b := na
plot(b ? open : close)

AnmerkungenEine eindeutige Erwähnung des Typs in der Variablenerklärung ist optional, es sei denn, er wird mit na initialiert. Weitere Informationen zum Typ Pine finden Sie auf der Benutzerhandbuchseite des Typsystems.

Bis dann var varip int float color string true false

Inneres

Schlüsselwörter mit dem Typ int ((Integer) für explizit erklärte Variablen oder Parameter.

Beispiele

// int
int i = 14    // Same as `i = 14`
i := na
plot(i)

AnmerkungenEine eindeutige Erwähnung des Typs in der Variablenerklärung ist optional, es sei denn, er wird mit na initialiert. Weitere Informationen zum Typ Pine finden Sie auf der Benutzerhandbuchseite des Typsystems.

Bis dann var varip float bool color string

Schwimmen

Ein Schlüsselwort für den Typ "float" (Schwimmbereich) für explizit erklärte Variablen oder Parameter.

Beispiele

// float
float f = 3.14    // Same as `f = 3.14`
f := na
plot(f)

AnmerkungenEine eindeutige Erwähnung des Typs in der Variablenerklärung ist optional, es sei denn, er wird mit na initialiert.

Bis dann var varip int bool color string

String

Ein Schlüsselwort für den Typ "string", bei dem Variablen oder Parameter explizit erklärt werden.

Beispiele

// string
string s = "Hello World!"    // Same as `s = "Hello world!"`
// string s = na // same as "" 
plot(na, title=s)

AnmerkungenEine eindeutige Erwähnung des Typs in der Variablenerklärung ist optional, es sei denn, er wird mit na initialiert. Weitere Informationen zum Typ Pine finden Sie auf der Benutzerhandbuchseite des Typsystems.

Bis dann var varip int float bool str.tostring str.format

Farbe

Ein Schlüsselwort für den Typ "color", der Variablen oder Parameter eindeutig deklariert.

Beispiele

// color
color textColor = color.green
if barstate.islastconfirmedhistory
    runtime.log("test", textcolor = textColor)

AnmerkungenDie Farbzeichen haben folgende Formate: #RRGGBB oder #RRGGBBAA. Die Buchstaben repräsentieren die sechzehnstelligen Werte 00 bis FF (die zehnstelligen 0 bis 255), wobei RR, GG und BB die Werte der Farbdichte Rot, Grün und Blau sind. AA ist der Optionswert für die Farbtransparenz (oder Alpha-Dichte), wobei 00 unsichtbar ist und FF unsichtbar. Eine eindeutige Erwähnung des Typs in der Variablenerklärung ist optional, es sei denn, er wird mit na initialiert. Weitere Informationen zum Typ Pine finden Sie auf der Benutzerhandbuchseite des Typsystems.

Bis dann var varip int float string color.rgb color.new

Reihenfolge

Schlüsselwörter für die Array-Array-Typen für explizit erklärte Variablen oder Parameter; kann verwendet werden.array.new<type>,array.fromDie Funktion erstellt Arrayobjekte (oder IDs).

Beispiele

// array
array<float> a = na
a := array.new<float>(1, close)
plot(array.get(a, 0))

AnmerkungenDie Arrayobjekte sind immer in der Form von Ketten.

Bis dann var array.new array.from

Eingebaute Funktionen

Bei Aufrufen von Funktionen können Parameter übertragen werden, Parameternamen zugewiesen werden, Variablen direkt an den entsprechenden Parameterpositionen übertragen werden und eine Mischnutzung unterstützt wird.

plot(close, title="test plot")     // 直接传参数 close ;指定参数 title ,赋值字符串"test plot"

Nach der Angabe des Parameternamens ist es nicht mehr möglich, die Variablen direkt als Parameter zu übertragen. Die folgenden Parameter müssen in Form von Parameternamenausgaben geschrieben werden.

// plot(close, title="test", color.red)    // 虽然plot第三个参数是颜色值,但是这样写就会报错
plot(close, title="test", color=color.red) // 正确写法
plot(close, "test", color.red)             // 正确写法

Zeitrahmen

Zeitrahmen.in_Sekunden

Wir werden es weitergebentimeframeDie Zeiträume der Parameter werden in Sekunden umgerechnet.

timeframe.in_seconds(timeframe)

Beispiele

// Get chart timeframe:
i_tf = input.timeframe("1D")

// Convert timeframe to the int value (number of seconds in 1 Day):
tf = timeframe.in_seconds(i_tf)

plot(tf)

Rückgabe von Werten timeframeDie Zahl der Sekunden in einer K-Zeile in der Form \ (\\displaystyle \mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathbf {\\mathb {\\mathb {\\mathb {\\mathb {\\mathb {\\mathb {\\mathb {\\mathb {\\mathb {\\mathbf {\\mathb }) \) \) \)

Parameter

  • timeframe(simple string) Zeitrahmen♦ Optional♦ Default ist timeframe.period♦

AnmerkungenFürtimeframe>= 1M Funktion Berechnet anhand von 30.4167 (365/12) Tagen im Monat;

Bis dann input.timeframe timeframe.period

Zähne

ticker.heikinashi

Erstellen Sie eine Code-Identifikatoranfrage, um den durchschnittlichen K-Linienwert zu glätten.

ticker.heikinashi(symbol)

Beispiele

heikinashi_close = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)

heikinashi_aapl_60_close = request.security(ticker.heikinashi(syminfo.tickerid), "60", close)
plot(heikinashi_close)
plot(heikinashi_aapl_60_close)

Rückgabe von Werten 股票代码的字符串值,可以提供给request.security函数。

Parameter

  • symbol(simple string) Warencode-Identifikator.

Bis dann syminfo.tickerid syminfo.ticker request.security

Anforderung

request.data

Bitte um externe Daten.

request.data(url, attribute)

Beispiele

/*backtest
start: 2022-01-26 09:00:00
end: 2024-02-01 15:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
*/

// 图表地址https://www.datadata.cn/queries/a10ea45c-1674-48ef-b414-cc17a7e4a548
var chart_data = "https://www.datadata.cn/api/v1/query/a10ea45c-1674-48ef-b414-cc17a7e4a548/data"
add_investor = request.data(chart_data, "$.add_investor")
idx_price = request.data(chart_data, "$.close_price")

plot(add_investor, "股市新增人口")
plot(idx_price, "股指价格")
// 反指交易
avg_investor = ta.ema(add_investor[1], 30)
if strategy.position_size == 0
    if add_investor > avg_investor*1.1
        runtime.log("新增人口:", add_investor, "近30天平均:", avg_investor, "#ff0000")
        strategy.entry("Enter Short", strategy.short)
    else if add_investor < avg_investor*0.9
        runtime.log("新增人口:", add_investor, "近30天平均:", avg_investor, "#ff0000")
        strategy.entry("Enter Long", strategy.long)

Rückgabe von WertenParameterattributeDie angegebene Datenserie.

Parameter

  • url(simple string) Die URL der angeforderten Datenquelle, die Datenformat der Antwort auf die angeforderte Datenquelle (zumindest die time、data Attribute):{"data": [], "schema": ["time", "data"]}Die Datenformate in den Beispielen:
    {
        "data": [
            [1430438400000, "2015年04月", "{\"add_investor\" : 497.53, \"close_price\" : 4441.655}"],
            [1433116800000, "2015年05月", "{\"add_investor\" : 415.87, \"close_price\" : 4611.744}"]
            // ...
        ],
        "schema": ["time", "date", "data"]
    }  
    
  • attribute(simple string) Geben Sie einen Eigenschaftsnamen an, der die gewünschten Daten zurückgibt."$.add_investor", benutzt$.Als Präfix stimmen die Attribute-Namen mit den Eigenschaften in den Data-Feldern in den Daten, die bei der Anfrage an die Datenquelle geantwortet wurden, überein

request.security

Sie benötigen eine andere Sorte/Auflösung.

request.security(symbol, timeframe, expression, gaps, lookahead, ignore_invalid_symbol, currency) 

Beispiele

s = request.security(syminfo.tickerid, "D", close)   // 1 Day
plot(s)

expr = ta.sma(close, 10)
s1 = request.security(syminfo.tickerid, "240", expr) // 240 Minutes
plot(s1)

// To avoid difference in calculation on history/realtime you can request not latest values and use merge strategy flags as follows:
s2 = request.security(syminfo.tickerid, "D", close[1], barmerge.gaps_off, barmerge.lookahead_on)
plot(s2)
f() => [open, high]
[o, h] = request.security(syminfo.tickerid, "D", f())
[l, c] = request.security(syminfo.tickerid, "D", [low, close])
plot((o + h + l + c) / 4)

Rückgabe von WertenAnforderung der Serie

Parameter

  • symbol(simple string) Code für die Ware.
  • timeframe(simple string) Zeiträume. Die leere String wird als aktuelle Zeiträume des Diagramms interpretiert.
  • expression(series int/float/bool/color) kann von request.security aufgerufen werden und einen Ausdruck zurückgeben.
  • gaps(barmerge_gaps) Anforderung für die Datenverbindung der angeforderten Daten (Erforderung, dass die Daten automatisch mit den Daten der Hauptserie OHLC verknüpft werden). Mögliche Werte: barmerge.gaps_on, barmerge.gaps_off,.. barmerge.gaps_on - angeforderte Daten werden mit den möglichen Abständen verknüpft,.. barmerge.gaps_off - angeforderte Daten werden kontinuierlich ununterbrochen zusammengeführt, wobei alle Abständen mit den vorangegangenen letzten vorhandenen Werten gefüllt werden,..
  • lookahead(barmerge_lookahead) gibt dem angeforderten Datenverbund eine Kombinationspolitik. Mögliche Werte: barmerge.lookahead_on, barmerge.lookahead_off. Ab Version 3 wird der Standardwert barmerge.lookahead_off.
  • ignore_invalid_symbol(const bool) Ein Optionsparameter. Befindet das angegebene Produkt nicht gefunden, wird die Funktion festgelegt: wenn false, wird das Skript gestoppt und zum Ausführen zurückgegeben; wenn true, kehrt die Funktion na zurück und setzt die Ausführung fort.
  • currency(simple string) Konvertiert den Währungsbezogenen Wert (z. B. OHLC) der Ware in die Währung; berechnet dann den Konvertierungswert anhand des Konvertierungswerts durch den Ausdruck ; verwendet wird der Umrechnungssatz basierend auf dem täglichen Wechselkurs des vorherigen Tages des FX_IDC-Paares (z. B. gegenüber der berechneten K-Linie); optional. Der Standardwert ist syminfo.currency. Möglicher Wert: Drei-Streifen-String mit einem ISO 4217-Format-Währungscode (z. B. USD) oder currency.* Eine Konstante im Namensraum, z. B. currency.USD.

AnmerkungenPineScript-Code mit dieser Funktion kann unterschiedliche Berechnungen für historische Aufzeichnungen und Echtzeitdaten durchführen.Wenn Sie zusätzliche Parameter für die angeforderte Ware angeben möchten, wie z. B. Transaktionszeiten oder Anpassungsarten, können Sie die Anmeldung auch mit einer Anmeldung an die Anmelder weiterleiten.您可以使用ticker.newDie () Funktion. Es ist nicht möglich, die Fehlerdifferenz an diese Funktion zu übermitteln, indem Sie die Variable ticker verwenden.ticker.newDie Formen der Zeichenfolge für die Variablen oder den Aktiencode, z. B. AAPL+MSFT*TSLA.Derzeit können bis zu 40 Request.security-Aufrufe in einem Skript erfolgen. Bitte beachten Sie, dass die Verwendung dieser Variable/Funktion zu einer Neugestaltung der Indikatoren führen kann. Die Auflösungsparameter erlauben folgende Werte: 1S, 5S, 15S, 30S - Sekundenintervall (die Periode des Diagramms sollte kleiner oder gleich der Periode der Anfrage sein) Von 1 bis 1440 Minuten Von 1D bis 365D. Von 1 W auf 52 W in wenigen Wochen. Von 1M auf 12M in wenigen Monaten.

Bis dann syminfo.ticker syminfo.tickerid timeframe.period ta.correlation barmerge.lookahead_off barmerge.lookahead_on

Str

str.contains

WennsourceString enthältstrEine Substring gibt die Wertung true zurück, andernfalls false.

str.contains(source, str)

Beispiele

// If the current chart is a continuous futures chart, e.g “BTC1!”, then the function will return true, false otherwise.
var isFutures = str.contains(syminfo.tickerid, "!")
plot(isFutures ? 1 : 0)

Rückgabe von WertenWennsourceSie finden sie in Strings.strWenn Sie nicht bereit sind, zu schreiben, dann schreiben Sie.true oder false.

Parameter

  • source(series string) Quelle der String
  • str(series string) Unterstring, nach dem gesucht wird.

Bis dann str.pos str.match

str.endswith

WennsourceDie String wird mitstrDas Ende der angegebenen Unterstring gibt True zurück, andernfalls False zurück.

str.endswith(source, str)

Rückgabe von WertenWennsourceDie String wird mitstrDas Ende der angegebenen Unterzeichen ist true, andernfalls false.

Parameter

  • source(series string) Quelle der String
  • str(series string) Unterstring, nach dem gesucht wird.

Bis dann str.startswith

str.startswith

WennsourceDie String wird mitstrDer Beginn der angegebenen Unterstring in der Tabelle wird mit "true" oder "false" ersetzt.

str.startswith(source, str)

Rückgabe von WertenWennsourceDie String wird mitstrDer Beginn der angegebenen Unterstring ist true, ansonsten false.

Parameter

  • source(series string) Quelle der String
  • str(series string) Unterstring, nach dem gesucht wird.

Bis dann str.endswith

str.substring

Das ist eine neue String.sourceEine Unterstring einer String. Eine Unterstring wird mitbegin_posSie beginnen mit den Zeichen des angegebenen Index und erstrecken sich bis zu:sourceEnd_pos - 1 für die String.

str.substring(source, begin_pos)
str.substring(source, begin_pos, end_pos)

Beispiele

sym= "EXCHANGE_NAME:SYMBOL_NAME"
pos = str.pos(sym, ":")        // Get position of ":" character
tkr= str.substring(sym, pos+1) // "SYMBOL_NAME"
if barstate.islastconfirmedhistory
    runtime.log(tkr)

Rückgabe von WertenEine Substring, die aus der Quellstring extrahiert wurde.

Parameter

  • source(series string) Entnehmen Sie die Quellstring einer Unterstring.
  • begin_pos(series int) ist der Anfangsplatz des extrahierten Unterstrangs. Es ist exklusiv (die extrahierte Unterstring enthält die Zeichen für diesen Standort).
  • end_pos(series int) Endposition. Es ist exklusiv. Die extrahierte String enthält keine Zeichen für diese Position.sourceDie Stringlänge.

AnmerkungenDie String-Index beginnt bei 0; wennbegin_posDas ist gleichend_posDie Funktion gibt eine leere String zurück.

Bis dann str.contains str.pos str.match

str.tonumber

str.tonumber(string)

Rückgabe von WertenWenn sie gültige Zahlen enthält, ist sie der Floating-Point-Typ der String, andernfalls ist sie na.

Parameter

  • string(series string) eine Zeichenfolge für int oder float.

str.format

Konvertiert Formatstränge und -werte in Formatstränge. Eine Formatstring kann einen Positionierer in einem großen Klammer {} für Texttext und jeden zu formatierenden Wert enthalten. Jeder Positionierer enthält einen Index, der seine notwendigen Parameter (beginnend mit 0) ersetzt, sowie einen optionalen Formatbezeichner. Der Index zeigt den Platz des Parameters in der Liste der Str.format-Parameter an.

str.format(formatString, arg0, arg1, ...)

Beispiele

// The format specifier inside the curly braces accepts certain modifiers:
// - Specify the number of decimals to display:
s1 = str.format("{0,number,#.#}", 1.34) // returns: 1.3
runtime.log(s1)

// - Round a float value to an integer:
s2 = str.format("{0,number,integer}", 1.34) // returns: 1
runtime.log(s2)

// - Display a number in currency:
s3 = str.format("{0,number,currency}", 1.34) // returns: $1.34
runtime.log(s3)

// - Display a number as a percentage:
s4 = str.format("{0,number,percent}", 0.5) // returns: 50%
runtime.log(s4)

// EXAMPLES WITH SEVERAL ARGUMENTS
// returns: Number 1 is not equal to 4
s5 = str.format("Number {0} is not {1} to {2}", 1, "equal", 4)
runtime.log(s5)

// returns: 1.34 != 1.3
s6 = str.format("{0} != {0, number, #.#}", 1.34)
runtime.log(s6)

// returns: 1 is equal to 1, but 2 is equal to 2
s7 = str.format("{0, number, integer} is equal to 1, but {1, number, integer} is equal to 2", 1.34, 1.52)
runtime.log(s7)

// returns: The cash turnover amounted to $1,340,000.00
s8 = str.format("The cash turnover amounted to {0, number, currency}", 1340000)
runtime.log(s8)

// returns: Expected return is 10% - 20%
s9 = str.format("Expected return is {0, number, percent} - {1, number, percent}", 0.1, 0.2)
runtime.log(s9)

Rückgabe von WertenDie Formattung der Strings.

Parameter

  • formatString(series string) Format-Streifen.
  • arg0, arg1, ...(series int/float/bool/string/na/int[]/float[]/bool[]/string[]) ist ein Wert, der formatiert werden soll.

AnmerkungenAlle Klammern, die nicht zitiert werden, müssen ausgeglichen sein. Zum Beispiel sind ab {0} de" und "ab } de" gültig, aber "ab {0} de, ab } de" und {" sind nicht gültig.

str.length

Gibt die Anzahl der Buchstaben in der String zurück.

str.length(string)

Rückgabe von WertenDie Anzahl der Zeichen in der Quellzeile.

Parameter

  • string(series string) Quelle der String

str.lower

Das Ergebnis ist eine neue String, in der alle Buchstaben klein geschrieben sind.

str.lower(source)

Rückgabe von WertenAlle Buchstaben wurden in kleine Buchstaben verwandelt.

Parameter

  • source(series string) Die zu konvertierende String.

Bis dann str.upper

str.upper

Die neue String, in der alle Buchstaben groß geschrieben sind, wird zurückgegeben.

str.upper(source)

Rückgabe von WertenAlle Buchstaben wurden in die neue, groß geschriebene Zeichenkette umgewandelt.

Parameter

  • source(series string) Die zu konvertierende String.

Bis dann str.lower

str.match

Wenn es passtregexWird ein normaler Ausdruck zurückgegeben,sourceDie neue Unterstring der String, die ansonsten zurückkehrt na.

str.match(source, regex) 

Beispiele

s = input.string("It's time to sell some EXCHANGE_NAME:SYMBOL_NAME!")

// finding first substring that matches regular expression "[\w]+:[\w]+"
var string tickerid = str.match(s, "[\\w]+:[\\w]+")

if barstate.islastconfirmedhistory
    runtime.log(tickerid) // "EXCHAN

Mehr

WeiweiweiWie geht es, wenn man mehrere Transaktionen gleichzeitig durchführen will?

Leichte WolkenKann Pine mehr als eine Transaktion durchführen, wie JS?

Lisa20231Danke für die detaillierte Dokumentation.

Künstlerische ArbeitWie kommt es, dass dieses Pine-Skript die Simulation von okex auf der Plattform verwendet?

Künstlerische ArbeitDas bedeutet, dass die Strategien der TradingView Plattform direkt auf die Plattform der Erfinder kopiert werden können.

Kleine TräumeDie PINE-Sprache kann nur einzigartige Strategien durchführen, wobei die Multi-Variate-Strategie am besten in Python, JavaScript oder C++ geschrieben wird.

Kleine TräumeOh, ja, OKX ist etwas Besonderes, ihre Analog-Umgebung und ihre Festplattenumgebung haben die gleiche Adresse, nur dass sie anderswo unterschieden werden.

Leichte WolkenEs ist nicht möglich, die okx-Analogplatte zu verwenden.

Kleine TräumeDiese vielfältige Architektur kann nicht gelöst werden, da jede Börse unterschiedliche Schnittstellen hat und die Frequenz der Schnittstellen nicht gleich ist.

Kleine TräumeDas ist eine gute Idee, danke für die Vorschläge, schreiben Sie hier weiter.

Leichte WolkenEs fühlt sich besser an, wenn man mit JS kombiniert wird, und JS kann sich besser an verschiedene Handelsmethoden anpassen.

Trends in der JagdWird es in Zukunft mehrere Sorten geben?

Kleine TräumeDas ist unhöflich.

Leichte WolkenDas ist gut, danke.

Kleine TräumeHallo, die PINE-Sprachstrategie ist vorübergehend nur für eine Sorte geeignet.

Kleine TräumeIch möchte Ihnen danken für Ihre Unterstützung. Die Dokumentation wird weiter verbessert.

Kleine TräumeJa, das stimmt.

Kleine TräumePINE-Template-Klassebücher, auf deren Parameter die Basisadresse der Umtauschbörse festgelegt werden kann.