Inventor Quantified Mylang-Dokumentation

Erstellt in: 2018-11-30 13:29:33, aktualisiert am: 2022-12-09 17:46:10
comments   24
hits   35602

[TOC]

Die My-Sprache ist eine Programmiersprache, die mit der Mac-Sprache kompatibel ist und von ihr erweitert wird. Die FMZ-Quantifizierung der My-Sprache unterliegt strengen grammatischen Prüfungen, beispielsweise bei der Verwendung von Sprachenerweiterungen, die in den JavaScript-Sprachcode eingebettet sind.%%Mehr als ein leeres Zeichen nach dem Operator führt zu einer Fehlermeldung.

  • Grundlegende Angaben

    • ## Vertrag

    Digitale Währungskontrakte

    Digitale Währungskontrakte

    this_week     数字货币期货当周合约
    next_week     数字货币期货次周合约
    month         数字货币期货月度合约
    quarter       数字货币期货季度合约
    next_quarter  数字货币期货次季度合约
    third_quarter 数字货币期货第三季度合约
    last_quarter  最后季度合约
    
    
    XBTUSD        BITMEX永续合约
    swap          除BITMEX交易所以外数字货币期货永续合约
    
    
    具体可以参看JavaScript/Python/C++文档的exchange.SetContractType()函数部分
    

    Inventor Quantified Mylang-Dokumentation

    • ## Variable

    Eine Variable ist ein Teil des Speichers, in dem Daten gespeichert werden.

    Eröffnung der ersten Variable

    // 将1赋值给变量a
    a:=1;
    

    existieren麦语言Aus dem数据量Einfache Unterscheidung:

    1. Ein-Wert-Daten: nur ein Wert, z. B.01’abc’
    2. Sequenzdaten: Datenreihen, die aus einem Stapel einzelwertiger Daten bestehen, z. B.Close(Schlusskurs)CloseInhaltenAbschlusspreis pro Zyklus[ 10.1 , 10.2 , 10.3 , 10.4 , 10. 5 ...]

    Unterscheidung von den variablen Typen von Zellstoff

    1. String-Typ: Muss verwendet werden''Paket, String-Typen sind nicht direkt zugelassen und müssen mit einer Funktion in die Ansicht exportiert werden.
    INFO(CLSOE>OPEN,'OK!');
    
    1. Zahlenarten: Einschließlich Ganzzahlen, Floating-Point-Zahlen und Kleinzahlen.
    // 整数
    int:=2;
    
    
    // 小数
    float:=3.1;
    
    1. Bull-Typen, mit 1 (für wahr) oder 0 (für falsch): 1, 0, wahr oder falsch.A:=1>0;Das ist ein Code, der die Leute dazu bringt, sich zu entscheiden.ADer Wert von 1 ≠ 1
    // 当前周期收盘价大于-999,你会发现,每个周期的返回值都是1,代表true,因为收盘价几乎不可能为负数
    is_true:=Close>-999;
    
    1. Globale Variablen
    VARIABLE:VALUE1:10;     // 声明一个全局变量,赋值为10,只执行一次。
    

    Die Rückmeldung sollte folgendermaßen aussehen:

    VARIABLE:NX:0;    // 初始一个全局变量NX为0
    NX..NX+1;         // 每次累加1
    INFO(1,NX);       // 每次打印NX
    

    AnfangsINFODas ist die Ausdrucksweise:101Es kann Zweifel geben, dass das nicht der Fall war.0Was ist? Der Grund dafür ist, dass die anfängliche K-Linie bei der Rückmessung 100 Wurzeln hatte, die 100 K-Linien überschritten wurden und 100 addiert wurden. Die Festplatte wird von der Anzahl der K-Leitung abhängig gemacht.

    • ### Namensregeln

    In den meisten Systemen ist die Variablenbenennung nicht zulässig, da die Systemzelle die Schriftzeichen (“Eingebettete Variablen-Namen, Funktionsnamen”) behalten darf.CloseCAußerdem sind keine reinen Zahlen oder Zahlenanfängen erlaubt. Eine sehr lange Endung ist nicht erlaubt, da die Längenbeschränkungen in verschiedenen Systemen unterschiedlich sind. Es ist eigentlich nicht nötig, die Effizienz des Mainstream-Systems für die Analyse von Chinesisch zu verwirren, denn die Chinesisch-Sprache ist sehr freundlich zu Chinesisch. Unzählige alte Treiber von Chinesisch-Codes empfehlen Ihnen, die folgenden beiden Namensregeln zu verwenden:

     1. Chinesische Bezeichnung
    
      // 优雅的输出
      五日均线:=MA(C,5);
    
     2. Englisch + Unterstriche
    
      // 输出
      move_avg_5:=MA(C,5);
    

    Wenn Sie Englisch bevorzugen, verwenden Sie so viele Variablen wie möglich, um die Bedeutung Ihrer Variablen zu verstehen.A1AAABBB… diese Art der Benennung. Ich bin mir sicher, dass du dich sehr schmerzlich fühlst, wenn du nach einiger Zeit deine Kennziffern erneut überprüfst, weil du deine Erinnerung verloren hast. Genauso muss die Leser verzweifelt sein, wenn du deine Kennziffern an andere weitergibst.

    Von nun an soll sie ein leistungsfähiges Werkzeug für die Analyse und Entscheidungsfindung sein.

    • ## Datentyp

    Der Datentyp ist ein grundlegendes Konzept, das in der Programmierung verwendet wird, wenn wir einer Variablen einen eindeutigen Datentyp zuweisen, der dann zum Typ der Daten selbst wird.

    • 1. Zahlenart:
      1、2、3、1.1234、2.23456 ...
    
    • 2. String-Typ:
      '1' 、'2' 、'3' ,字符串类型必须用 '' 包裹
    
    • 3. Sequenzdaten:
      一系列单值数据构成的数据集合
    
    • 4. Boolean (Boolean-Typ):

    Verwendet1Vertretertrue0Vertreterfalse

    Beispiele

      // 声明一个数值类型的变量
      var_int := 1;
      // 声明一个序列数据的变量
      var_arr := Close;
      // 字符串类型不能单独声明,需要结合函数
      INFO(C>O, '阳线');
    
    • ## Operator

    Die Symbole, mit denen der Indikatorcode berechnet wird, sind in einfachen Worten die Symbole, die an der Berechnung beteiligt sind.

    • ### Zuweisungsoperator

    Benutzt, um einer Variablen einen Wert zuzuweisen

     - 1. `:`
    
    
    `:`, stellt die Zuordnung dar und wird in die Grafik (Subgrafik) ausgeführt.
    
    
    ```
    Close1:Close;      // 将Close赋值给变量Close1,并且输出到图中
    ```
    
     - 2. `:=`
    
    
    `:=`, steht für die Zuteilung, wird aber nicht in die Grafik ausgeführt (Hauptgrafik, Nebengrafik usw.) und wird nicht in den Statustabellen angezeigt.
    
    
    ```
    Close2:=Close;     // 将Close赋值给变量Close2
    ```
    
     - 3. `^^`
    
    
    `^^`Zwei.`^`Die Symbole stellen die Zuteilung dar, geben den Variablen eine Zuteilung und werden in das Diagramm ausgeführt.
    
    
    ```
    lastPrice^^C;
    ```
    
     - 4. `..`
    
    
    `..`Zwei.`.`Die Symbole stellen die Zuteilung von Werten dar, geben Werten an die Variablen und zeigen die Namen und Werte der Variablen in den Diagrammen, ohne die Diagramme in die Diagramme zu zeichnen (Hauptdiagramm, Nebendiagramm usw.).
    
    
    ```
    openPrice..O
    ```
    
    • ### Beziehungsoperator

    Beziehungsoperator ist ein binärer Operator, der in einem bedingten Ausdruck verwendet wird.

    Rückgabewert: Bull-Typ, nichttrue1. Das heißtfalse(0)。

     - 1. Mehr als`>`
    
    
    ```
    // 将2>1的运算结果赋值给rv1变量,此时rv1=1
    rv1:=2>1;
    ```
    
     - 2. Weniger als`<`
    
    
    ```
    // 返回false,也就是0,因为2大于1
    rv3:=2<1;
    ```
    
     - 3. Größer ist gleich`>=`
    
    
    ```
    x:=Close;
    // 将收盘价大于等于10的运算的结果赋值给变量rv2
    // 注意,由于close是一个序列数据,当进行close>=10运算的时候,本质是每个周期都进行运算,所以每个周期都会有一个1、0的返回值
    rv2:=Close>=10;
    ```
    
     - 4. Weniger als gleich`<=`
    
    
    ```
    此处省略
    ```
    
     - 5. gleich`=`
    
    
    ```
    A:=O=C;     // 判断开盘价是不是等于收盘价。
    ```
    
     - 6. Nicht gleich`<>`
    
    
    ```
    1<>2       // 判断1是否不等于2,返回值为1(true)
    ```
    
    • ### Logische Operatoren

    Rückgabewert: Bull-Typ, nichttrue1. Das heißtfalse(0)。

     1. Logik und`&&`Es ist möglich.`and`Alternativ müssen die linken und linken Seiten der Verbindung gleichzeitig errichtet werden.
    
      // 判断 cond_a,cond_b,cond_c 是否同时成立
      cond_a:=2>1;
      cond_b:=4>3;
      cond_c:=6>5;
      cond_a && cond_b and cond_c;    // 返回值为1,成立
    
     2. Logik oder`||`Es ist möglich.`or`Alternativen oder Links auf beiden Seiten, auf der einen Seite wird "true" festgelegt, auf der anderen Seite wird "true" festgelegt (die Rückgabewert "true") [2].
    
      cond_a:=1>2;
      cond_b:=4>3;
      cond_c:=5>6;
      cond_a || cond_b or cond_c;    // 返回值为1,成立
    
     3. `()`Der Operator berechnet zunächst die Ausdrücke in den Klammern.
    
      1>2 AND (2>3 OR 3<5)    // 运算结果为假
      1>2 AND 2>3 OR 3<5      // 运算结果为真
    
    • ### Arithmetik-Operator
      返回值:数值类型
    

    Arithmetische Operatoren sind Zeichen, die die grundlegenden arithmetischen Operationen (Arithmetic Operatoren) abschließen.

     - **+**
    
    
    ```
    A:=1+1;      // 返回 2
    ```
    
     - **Abzug -**
    
    
    ```
    A:=2-1;      // 返回 1
    ```
    
     - **Multiplikation***
    
    
    ```
    A:=2*2;      // 返回 4
    ```
    
     - **Ausnahme**
    
    
    ```
    A:=4/2;      // 返回 2
    ```
    
    • Funktion

      • ### Funktion

    In der Programmiersprache ist ein Funktionsschlüssel ein Teil des Codes, der eine bestimmte Funktion umsetzt. Es kann auch für andere Codes verwendet werden.

      function(param1,param2,...)
    
     - Zusammensetzung:
    
    
    Funktionsnamen ((Argument 1, Argument 2, ...), möglicherweise ohne oder mit mehreren Parametern.`MA(x,n);`Rückkehr der Delegierten`n`Innerhalb des Zyklus`x`Ein einfacher gleitender Durchschnitt.`MA()`Das ist eine Funktion.`x`Und`n`Das sind die Parameter der Funktion.
    
    
    Wenn wir eine Funktion verwenden, müssen wir die grundlegende Definition der Funktion kennen, also die Daten, die wir durch den Aufruf der Funktion erhalten können. In der Regel haben Funktionen Parameter, und wenn wir Parameter eingeben, müssen wir sicherstellen, dass die eingegebenen Datentypen übereinstimmen.`MA(x,n);`Die Erklärung lautet:
    
    
    ```
    返回简单移动平均
    用法:
    AVG:=MA(X,N): X的N日简单移动平均,算法(X1+X2+X3+...+Xn)/N,N支持变量
    ```
    
    
    Das ist sehr unfreundlich für Anfänger. Als nächstes werden wir die Funktionen gründlich analysieren und versuchen, eine schnelle Methode zu finden, um sie zu lernen und zu benutzen.
    
    • ### Rückgabewert

    Um Funktionen schnell zu lernen, müssen wir zuerst ein Konzept verstehen, das “Return Value” genannt wird.Zurück.Der Name bedeutet “zurück”. Der Wert steht für “spezifische Werte”. Der Rückgabewert bedeutet: die Daten, die man erhalten kann.

      // 因为后面的代码中会用到,所以用变量 return_value 接收、保存 function()的返回值
      // retrun_value := function(param1,param2);
      // 例如:
      AVG:=MA(C,10);     // AVG即retrun_value,function函数即:MA函数,param1参数:C即收盘价序列数据,param2参数:10。
    
    • ### Parameter

    Der zweite wichtige Begriff der Sekundärfunktion ist der der Parameter, die unterschiedliche Werte zurückgeben.

      // 变量ma5接收5日收盘价移动平均值
      ma5:=MA(C,5);
      // 变量ma10接收10日收盘价移动平均值
      ma10:=MA(C,10);
    

    Variablen obenma5ma10Die erste ParameterXBeideC(Schlusskurs)CEs gibt auch eine Funktion, die die Start- und Endpreiserfolge zurückgibt, aber keine Parameter hat. Die zweite Parameter 5, 10 werden verwendet, um zu sagen, dassMA()Die Funktion, wir wollen den Moving Average für die Tage des Schlusskurses erhalten, wird durch die Parameter flexibler.

    • Wie man lernt

      • 1. Zuerst müssen wir wissen, was eine Funktion tut, was sie uns zurückgibt.
      • 2. Das letzte, was wir wissen müssen, ist die Art der zurückgegebenen Werte, denn wir verwenden Funktionen, um die zurückgegebenen Werte zu erhalten.
      • 3. Zweitens müssen wir die Datentypen der Parameter kennen.MA(x,n)Wenn man die Parameter nicht kennt,xnEs ist nicht möglich, die Daten-Typen zu erhalten, die den Wert richtig zurückgeben.

    Die folgenden Funktionen werden beschrieben und verwendet, wobei die drei oben genannten Prinzipien zu beachten sind:

    • Sprachförderung

      • 麦语言UndJavaScriptSprachenmischprogrammierung
      %%
      // 这里面可以调用发明者量化的任何API 
      scope.TEST = function(obj) {
          return obj.val * 100;
      }
      %%
      收盘价:C;
      收盘价放大100倍:TEST(C);
      上一个收盘价放大100倍:TEST(REF(C, 1)); // 鼠标移动到回测的K线上就会提示变量值
    
     - `scope`Gegenstand
    
    
    `scope`Ein Objekt kann eine Eigenschaft hinzufügen und einer Eigenschaft eine Anonymisierungsfunktion zuweisen, die in einem Teil des Mac-Sprachcodes die Anonymisierungsfunktion aufruft, auf die diese Eigenschaft verweist.
    
     - `scope.getRefs(obj)`Funktion
    
    
    existieren`JavaScript`Aufruf im Codeblock`scope.getRefs(obj)`Funktionen, die eingegeben wurden`obj`Daten des Objekts.
    
    
    Nachfolgend`%%  %%`Die Symbole sind umhüllt.`JavaScript`Der Code wird in den Mac-Sprachcode übertragen.`TEST(C)`Funktion aufgerufen`C`Schlusskurs
    `scope.getRefs`Die Funktion gibt alle Schließwerte dieser K-Zeile zurück.`throw "stop"`Unterbrechung der Prozedur.`arr`Nur der Schlusskurs der ersten Bar ist enthalten.`throw "stop"`Ich werde es tun.`JavaScript`Der letzte Code`return`Das ist eine sehr gute Idee, aber es ist nicht einfach.
    
    
    ```
    %%
    scope.TEST = function(obj){
        var arr = scope.getRefs(obj)
        Log("arr:", arr)
        throw "stop"
        return
    }
    %%
    TEST(C);
    ```
    
     - scope.bars
    
    
    existieren`JavaScript`Zugriff auf alle K-Zeilen im Codeblock.
    
    
    `TEST`Die Funktion gibt einen Wert zurück: 1 ist die Negativlinie, 0 die Positivlinie.
    
    
    ```
    %%
    scope.TEST = function(){
        var bars = scope.bars
        return bars[bars.length - 1].Open > bars[bars.length - 1].Close ? 1 : 0    // 只能返回数值
    }
    %%
    arr:TEST;                                                                      
    ```
    
    
    ```
    # 注意:
    # TEST接收的匿名函数,返回值必须是数值。
    # 如果匿名函数没有参数,在调用TEST的时候直接写VAR:=TEST;写VAR:=TEST();会报错。
    # scope.TEST中的TEST必须是大写。
    ```
    
     - scope.bar
    
    
    existieren`JavaScript`In der Code-Blöcke, besuchen Sie die aktuelle bar.
    
    
    Berechnen Sie die durchschnittliche Anzahl der Preise für die höchsten und niedrigsten Ernten.
    
    
    ```
    %%
    scope.TEST = function(){
        var bar = scope.bar
        var ret = (bar.Open + bar.Close + bar.High + bar.Low) / 4
        return ret
    }
    %%
    avg^^TEST;
    ```
    
     - scope.depth
    
    
    Zugriff auf die Markttiefen-Daten ((der Auftrag ist dünn)).
    
    
    ```
    %%
    scope.TEST = function(){
        Log(scope.depth)
        throw "stop"             // 打印一次深度数据后就抛出异常,暂停
    }
    %%
    TEST;
    ```
    
     - scope.symbol
    
    
    Erhalten Sie die String-Namen der aktuellen Paare.
    
    
    ```
    %%
    scope.TEST = function(){
        Log(scope.symbol)
        throw "stop"
    }
    %%
    TEST;
    ```
    
     - scope.barPos
    
    
    K-Linien-Bar-Positionen erhalten.
    
    
    ```
    %%
    scope.TEST = function(){
        Log(scope.barPos)
        throw "stop"
    }
    %%
    TEST;
    ```
    
     - scope.get_locals('name')
    
    
    Diese Funktion wird verwendet, um die Variablen aus dem Mac-Code zu erhalten.
    
    
    ```
    V:10;
    %%
    scope.TEST = function(obj){
        return scope.get_locals('V')
    }
    %%
    GET_V:TEST(C);
    ```
    
    
    ```
    # 注意:
    # 如果某个变量,由于周期不足的时候计算不出数据,这个时候在JavaScript代码中调用scope.get_locals函数
    # 获取这个变量时,会报错:line:XX - undefined locals某个变量名undefined
    ```
    
     - scope.canTrade
    
    
    `canTrade`Eigenschaftsmarkierung, ob der aktuelle Handel möglich ist (Ist der aktuelle Bar die letzte Wurzel?)
    
    
    Zum Beispiel, um zu beurteilen, wenn die Strategie in der Lage ist, einen Auftrag zu tätigen, um Marktdaten zu drucken
    
    
    ```
    %%
    scope.LOGTICKER = function() {
        if(exchange.IO("status") && scope.canTrade){
            var ticker = exchange.GetTicker();
            if(ticker){
                Log("ticker:", ticker);
                return ticker.Last;
            }
        }
    }
    %%
    LASTPRICE..LOGTICKER;
    ```
    
    • Beispiele für Anwendung:
      %%
      scope.TEST = function(a){
          if (a.val) {
              throw "stop"
          }    
      }
      %%
      O>C,BK;
      C>O,SP;
      TEST(ISLASTSP);
    

    Die Strategie wird nach dem Eröffnen und Beenden der Position beendet.

    • ## Mehrzeit-Zitate

    Das System wählt automatisch eine geeignete K-Linien-Periode aus und synthetisiert die K-Linien-Perioden-Daten, um die Genauigkeit der Daten zu gewährleisten.

    • Verwendung:#EXPORT 公式名 ... #ENDErstellen einer Formel. Wenn man die Formel nicht berechnet, nur um Daten für verschiedene Perioden zu erhalten, kann man auch eine leere Formel schreiben.

    Die leere Formel lautet:

      #EXPORT TEST 
      NOP;
      #END           // 结束
    
    • Verwendung:#IMPORT [MIN,周期,公式名] AS 变量值Zitieren Sie die Formel. Erhalten Sie die Daten für die eingestellten Perioden. (Schlusskurs, Eröffnungskurs usw. durch Variablenwerte)

    IMPORTIn der AnweisungMINDas heißt:Minutenschritt◦ Die Mac-Sprache der Erfinder der Quantifizierungsplattform.IMPORTDer Befehl unterstützt nurMINNicht-Standard-Zyklen werden jetzt unterstützt, z. B.#IMPORT [MIN,240,TEST] AS VAR240Importieren Sie Daten wie 240-Minuten-Perioden ((4 Stunden) K-Linien。

    Codebeispiel:

      // 本代码演示如何引用不同周期的公式在同一代码里
      // #EXPORT扩展语法,以#END结束标记为一个公式,可以声明多个
      #EXPORT TEST 
      均值1:EMA(C, 20);
      均值2:EMA(C, 10);
      #END // 结束
    
    
      #IMPORT [MIN,15,TEST] AS VAR15 // 引用公式,K线周期用15分钟
      #IMPORT [MIN,30,TEST] AS VAR30 // 引用公式,K线周期用30分钟
      CROSSUP(VAR15.均值1, VAR30.均值1),BPK;
      CROSSDOWN(VAR15.均值2, VAR30.均值2),SPK;
      十五分最高价:VAR15.HIGH;
      三十分最高价:VAR30.HIGH;
      AUTOFILTER;
    
    • Verwendet bei mehrperiodischen DatenreferenzenREFLLVHHVBeachtung bei der Angabe von Daten
      (*backtest
      start: 2021-08-05 00:00:00
      end: 2021-08-05 00:15:00
      period: 1m
      basePeriod: 1m
      exchanges: [{"eid":"Futures_OKCoin","currency":"ETH_USD"}]
      args: [["TradeAmount",100,126961],["ContractType","swap",126961]]
      *)      
    
    
      %%
      scope.PRINTTIME = function() {
          var bars = scope.bars;
          return _D(bars[bars.length - 1].Time);
      }
      %%
      BARTIME:PRINTTIME;      
    
    
      #EXPORT TEST 
      REF1C:REF(C,1);
      REF1L:REF(L,1);
      #END // 结束      
    
    
      #IMPORT [MIN,5,TEST] AS MIN5
      INFO(1, 'C:', C, 'MIN5.REF1C:', MIN5.REF1C, 'REF(MIN5.C, 1):', REF(MIN5.C, 1), '触发BAR时间:', BARTIME, '#FF0000');
      INFO(1, 'L:', L, 'MIN5.REF1L:', MIN5.REF1L, 'REF(MIN5.L, 1):', REF(MIN5.L, 1), '触发BAR时间:', BARTIME, '#32CD32');
      AUTOFILTER;
    

    VergleichMIN5.REF1CUndREF(MIN5.C, 1)Die Unterschiede sind: MIN5.REF1Cist der Schließwert des zweiten BAR, der in der Gegenwart der 5-Minuten-K-Linien-Daten umgekehrt ist. REF(MIN5.C, 1)ist die K-Linien-Periode des aktuellen Modells (die oben genannte Code-Retest-Periode ist auf 1 Minute eingestellt, d.h.period: 1m), der Schlusskurs für einen 5-Minuten-Zyklus, in dem der BAR der zweite Rückwärtszahlung des aktuellen Moments ist. Die beiden Definitionen unterscheiden sich und können je nach Bedarf verwendet werden.

    • Modellbeschreibung

      • ### Ein Modell für die Filterung von Signalen

    Schreiben Sie in das ModellAUTOFILTERDie Funktion wird verwendet, um ein einheitliches Signalfilter zu steuern. Wenn mehrere Signalvorgänge erfüllt sind, wird das erste Signal als gültig angesehen, und das gleiche Signal auf der nachfolgenden k-Zeile wird gefiltert.

    Die Filtermodell-unterstützten Anweisungen: BK, BP, BPK, SK, SP, SPK, CLOSEOUT, nicht unterstützt BK ((5) usw.

    Zum Beispiel:

      MA1:MA(CLOSE,5);
      MA2:MA(CLOSE,10);
      CROSSUP(C,MA1),BK;
      CROSSUP(MA1,MA2),BK;
      C>BKPRICE+10||C<BKPRICE-5,SP;
      AUTOFILTER;
    
      理解:
      如上范例,没有设置 AUTOFILTER 时,第三行BK 和第四行BK 第五行SP,依次触发,每根K线触发一次信号。开仓后,再到平仓,即重置模型状态。      
      如果设置 AUTOFILTER , 触发BK后,只能触发SP,其它的BK 信号被忽略,每根K线触发一次信号。
    
    • ### Modell zur Verringerung der Lagerhaltung

    Nicht im Modell geschriebenAUTOFILTERFunktionen, die eine Folge von Positionsöffnungs- oder Positionsniederlassungssignalen erlauben, um Positionserhöhungen und -niederlassungen zu realisieren.

    Unterstützte Befehle: BK (N), BP (N), SK (N), SP (N), CLOSEOUT (BPK (N) und SP (N), nicht unterstützte Befehle zum Eröffnen von Positionen ohne Handnummer. (1) Unterstützung der Anweisungsgruppierung. (2) Wenn mehrere Anweisungsbedingungen gleichzeitig erfüllt sind, wird das Signal in der nachfolgenden Reihenfolge ausgeführt, die in der Bedingungsanweisung geschrieben ist. Zum Beispiel:

      MA1:MA(CLOSE,5);
      MA2:MA(CLOSE,10);
      CROSSUP(C,MA1),BK(1);
      CROSSUP(MA1,MA2),BK(1);
      C>BKPRICE+10||C<BKPRICE-5,SP(BKVOL);
    

    verwendenTRADE\_AGAIN Es ist möglich, dass derselbe Befehl mehrere Signale in Folge erzeugt.

      理解:
      以上例子,逐个信号执行,执行后的信号不再触发。平仓后重置模型状态。一个K线触发一次信号。
    
    • ### Modell eines K-Signals

    Unabhängig davon, ob die K-Linie abgelaufen ist, wird das Signal berechnet, um in Echtzeit zu bestellen, d.h. die K-Linie hat die vorherige Bestellung nicht abgelaufen; die Überprüfung am Ende der K-Linie wird automatisch synchronisiert, wenn die Richtung der Positionshaltung nicht mit der Signalrichtung am Ende der K-Linie übereinstimmt.

    Zum Beispiel:

      MA1:MA(CLOSE,5);
      MA2:MA(CLOSE,10);
      CROSSUP(MA1,MA2),BPK;    // 5周期均线上穿10周期均线做多。
      CROSSDOWN(MA1,MA2),SPK;  // 5周期均线下穿10周期均线做空。
      AUTOFILTER;
    
    • ### Modell mit mehreren Signalen auf einer K-Leitung

    Modelle mitmultsigEin K-Streck kann mehrere Signale ausstrahlen.

    Die Signalberechnung erfolgt in Echtzeit, unabhängig davon, ob die K-Leitung abgelaufen ist oder nicht.

    Das Signal wird nicht überprüft, es gibt keine Fälle, in denen das Signal verschwindet, die Signalrichtung stimmt immer mit der Positionshaltung überein.

    Wenn mehrere Signalbedingungen in einer K-Leitung erfüllt sind, kann die Ausführung mehrmals wiederholt werden.

      例如:
      MA1:MA(CLOSE,5);
      MA2:MA(CLOSE,10);
      CROSSUP(MA1,MA2),BK;
      C>BKPRICE+10||C<BKPRICE-5,SP;
      AUTOFILTER;
      MULTSIG(0,0,2,0);
    

    MULTSIGEs ist möglich, dass verschiedene Befehlszeilen innerhalb einer K-Zeile mehrmals ausgeführt werden. Eine Befehlszeile gibt nur ein einziges Signal.

      O<C,BK;            // 这些条件在一个K线Bar内,可能都执行,但是每行只出一次信号
      10+O<C,BK;         // 策略加上TRADE_AGAIN(10);可以使每行出多次信号
      20+O<C,BK;
      40+O<C,BK;
      MULTSIG(1,1,10);
    

    Er fügt hinzu: 1. Das Positions- und Abnahme-Modell, die zwei Arten, wie ein Signal in einer K-Linie ausgesprochen wird: Ein Auftrag zum Schließungspreis und ein Auftrag zum Anweisungspreis, sind unterstützt. 2. Das Plus-Minus-Modell unterstützt auch die Aufstellung mehrerer Signalbestellungen auf einer k-Strecke. Das ist ein Modell der Addition und Subtraction.multsigFunktionen, die mehrmals auf einer k-Linie auf- oder abgespeichert werden.

    • ## Ausführung

    Inventor Quantified Mylang-Dokumentation

    • ### Schlusskursmodell

    Der Schlusskursmodell bezeichnet ein Modell, das erst nach dem Ablauf des aktuellen BAR ausgeführt wird, und der Handel wird ausgeführt, wenn der unterste BAR beginnt.

    • ### Echtzeit-Preismodell

    Die Realzeit-Preismodellierung bedeutet, dass bei jeder Preisänderung ein Modell ausgeführt wird, das sofort nach dem Signal gehandelt wird. Die Echtzeitpreismodelle ignoriert die Signale des Vortages (die Signale des Vortages werden am Vortag sofort ausgeführt), die Echtzeitpreismodelle schaut nur auf die aktuellen Marktdaten und entscheidet, ob ein Signal ausgelöst wurde.

    • Abbildung zeigt

      • ### Zusätzliche Indikatoren

    Verwenden von Operatoren^^Die Variablen werden mit einem Wert bewertet, und die Einstellungsindikatoren werden in der Hauptkarte angezeigt.

      MA60^^MA(C, 60);  // 计算参数为60的均线指标
    

    Inventor Quantified Mylang-Dokumentation

    • ### Zusätzliche Indikatoren

    Verwenden von Operatoren:Die Einstellungsindikatoren werden in der Untergrafik angezeigt, während die Variablen mit Werten versehen werden.

      ATR:MA(MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW)),26);    // 给ATR变量赋值,":"符号后为计算ATR的公式
    

    Inventor Quantified Mylang-Dokumentation

    Wenn Sie nicht möchten, dass die Bilder auf der Haupt- oder Unterkarte angezeigt werden, verwenden Sie den Operator “”…

      MA60..MA(C, 60);  // 计算参数为60的均线指标
    

    Inventor Quantified Mylang-Dokumentation

    VerwendbarDOTCOLORREDDie Linien werden so angepasst, dass sie den Gewohnheiten der Benutzer entsprechen, die mit der Mac-Sprache vertraut sind.

    • ## Häufig gestellte Fragen

    Einführung in die allgemein üblichen IndikatorenFragen, was normalerweise beim Schreiben beachtet werden muss: ((fortlaufende Ergänzung))

    • Achtung, die Ziffer;Schlußfolgerungen

    • Die Schlüsselwörter können nicht als Variablen deklariert werden.

    • Vorsicht bei der Verwendung von StringsEinzeichen,Zum Beispiel:'开仓'Diese Zeichenfolge:

    • Anmerkungen

    Kommentare

     - `// 注释内容`(Eingabeform kann in Englisch eingegeben werden), was bedeutet, dass der Code während der Ausführung nicht kompiliert wird, also nicht ausgeführt wird.`//`Die folgenden Elemente werden normalerweise verwendet, um die Bedeutung des Codes zu markieren, um den Code schnell zu verstehen und zu erinnern, wenn man ihn überprüft.
    
     - `{ 注释内容 }`Das ist eine schöne Geschichte.
    
    
    ```
    A:=MA(C,10);
    {上一行代码是计算均线。}
    ```
    
     - `(* 注释内容 *)`Das ist eine schöne Geschichte.
    
    
    ```
    A:=MA(C,10);
    (*上一行代码是计算均线。*)
    ```
    
    • ### Eingabe

    Bei der Programmierung werden häufig Symbolfehler verursacht, weil die Eingabe in englischer Sprache wechselt. Häufig gibt es folgende Symbolfehler::Das Ende.;Komma,In Klammern()Es ist wichtig zu beachten, dass die verschiedenen Charaktere in der chinesisch-englischen Sprache unterschiedliche Charaktere haben.

    Wenn Sie Google+, Baidu oder Bing verwenden, können Sie die Daten per Eingabeaufdruck übertragen.shiftSchlüssel zum schnellen Wechseln zwischen Englisch und Chinesisch.

    • Fehleranfällige Logik

      1. Mindestens, nicht weniger als, nicht weniger als: die entsprechende Relation-Operator>=
      2. Maximal, maximal, nicht mehr als: die entsprechende Relation Operator<=
    • Synchronisierung der Strategie

    In einer Futures-Strategie, wenn vor dem Start des Strategie-Roboters eine manuell eröffnete Position gehalten wird, wird der Roboter beim Start die Positionsinformationen erfassen und mit dem tatsächlichen Positionsstatus synchronisiert. Das kann man in der Strategie verwenden.SPBPCLOSEOUTBefehl zum Stillstand.

      %%
      if (!scope.init) {
          var ticker = exchange.GetTicker();
          exchange.Buy(ticker.Sell+10, 1);
          scope.init = true;
      }
      %%
      C>0, CLOSEOUT;
    
    • ### Keine Unterstützung für eine Zwei-Wege-Position

    Mac-Sprachen unterstützen nicht den gleichen Vertrag und gleichzeitig mehrere freie Positionen.

  • K-Linie-Datenbezug

    • ## OPEN

    Der Anfangspreis für eine K-Linienkarte.

    Eröffnungspreis

    Funktion: OPEN, kurz O

    Parameter: keine

    Erläuterung: Zurück zum Startpreis der “Zyklus”

    Sequenzdaten

    OPEN取得K线图的开盘价。
    
    
    注:
    1、可简写为O。
    
    
    例1:
    OO:=O;           //定义OO为开盘价;注意O与0的区别。
    例2:
    NN:=BARSLAST(DATE<>REF(DATE,1));
    OO:=REF(O,NN);   //取的当日的开盘价
    例3:
    MA5:=MA(O,5);    //定义开盘价的5周期均线(O为OPEN简写)。
    
    • ## HIGH

    Der höchste Preis für eine K-Linienkarte.

    Höchstpreise

    Funktion: HIGH, kurz H

    Parameter: keine

    Beschreibung: Zurück zu den Höchstpreisen des “Zyklus”

    Sequenzdaten

    HIGH取得K线图的最高价。
    
    
    注:
    1、可简写为H。
    
    
    例1:
    HH:=H;         // 定义HH为最高价
    例2:
    HH:=HHV(H,5);  // 取的5个周期内最高价的最大值
    例3:
    REF(H,1);      // 取的前一根K线的最高价
    
    • ## LOW

    Der Mindestpreis für eine K-Linienkarte.

    Mindestpreise

    Funktion: LOW, kurz L

    Parameter: keine

    Erläuterung: Zurück zum niedrigsten Preis des Zyklus

    Sequenzdaten

    LOW取得K线图的最低价。
    
    
    注:
    1、可简写为L。
    
    
    例1:
    LL:=L;            // 定义LL为最低价
    例2:
    LL:=LLV(L,5);     // 取得5个周期内最低价的最小值
    例3:
    REF(L,1);         // 取得前一根K线的最低价
    
    • ## CLOSE

    Der Abschlusspreis für die K-Linienkarte.

    Abschlusspreis

    Funktion: CLOSE, kurz C

    Parameter: keine

    Erläuterung: Zurück zum Ende des Zyklus

    Sequenzdaten

    CLOSE取得K线图的收盘价
    
    
    注:
    1、当盘中k线没有走完的时候,取得最新价。
    2、可简写为C。
    
    
    例1:
    A:=CLOSE;          //定义变量A为收盘价(盘中k线没有走完的时候A为最新价)
    例2:
    MA5:=MA(C,5);      //定义收盘价的5周期均线(C为CLOSE简写)
    例3:
    A:=REF(C,1);       //取得前一根k线的收盘价
    
    • ## VOL

    Die Transaktionsmenge der K-Linienkarte.

    Umsatz

    Funktion: VOL, kurz V

    Parameter: keine

    Erläuterung: Zurück zur Transaktionsmenge des Zyklus

    Sequenzdaten

    VOL取得K线图的成交量。
    
    
    注:
    可简写为V。
    该函数在当根TICK上的返回值为当天所有TICK成交量的累计值。
    
    
    例1:
    VV:=V;       // 定义VV为成交量
    例2:
    REF(V,1);    // 表示前一个周期的成交量
    例3:
    V>=REF(V,1); // 成交量大于前一个周期的成交量,表示成交量增加(V为VOL的简写)
    
    • ## OPI

    Der Gesamtbestand der aktuellen Futures-Marktpositionen.

    OpenInterest:OPI;
    
    • ## REF

    Weiterführende Referenzen

    引用X在N个周期前的值。
    
    
    注:
    1、当N为有效值,但当前的k线数不足N根,返回空值;
    2、N为0时返回当前X值;
    3、N为空值时返回空值。
    4、N可以为变量
    
    
    例1:
    REF(CLOSE,5);表示引用当前周期前第5个周期的收盘价
    例2:
    AA:=IFELSE(BARSBK>=1,REF(C,BARSBK),C);//取最近一次买开仓信号K线的收盘价
    // 1)发出BK信号的当根k线BARSBK返回空值,则发出BK信号的当根k线REF(C,BARSBK)返回
    空值;
    // 2)发出BK信号的当根k线BARSBK返回空值,不满足BARSBK>=1,则当根k线的收盘价。
    // 3)发出BK信号之后的k线BARSBK返回买开仓的K线距离当前K线的周期数,REF(C,BARSBK)
    返回开仓k线的收盘价。
    // 4)例:1、2、3 三根k线,1 K线为开仓信号的当根k线,则返回当根k线的收盘价,2、3
    K线返回 1 K线的收盘价。
    
    • ## UNIT

    Die Transaktionsstelle, die den Datenvertrag abschließt.

    取数据合约的交易单位。
    用法:
    UNIT 取加载数据合约的交易单位。
    

    Digitale Bargeld

    UNIT ist gleich 1.

    Kryptowährungs-Futures

    Der Wert der UNIT ist mit der Währung des Vertrags verbunden.

    OKEX期货币本位合约:BTC合约1张代表100美元,其它币种的1张合约代表10美元
    
    • ## MINPRICE

    Mindestpreisänderungen im Datenvertrag.

    取数据合约的最小变动价位。
    用法:
    MINPRICE; 取加载数据合约的最小变动价位。
    
    • ## MINPRICE1

    Mindestpreisänderungen im Handel.

    取交易合约的最小变动价位。
    用法:
    MINPRICE1; 取交易合约的最小变动价位。
    
  • Zeitfunktion

    • ## BARPOS

    Die Position der K-Linie.

    BARPOS,返回从第一根K线开始到当前的周期数。
    
    
    注:
    1、BARPOS返回本地已有的K线根数,从本机上存在的数据开始算起。
    2、本机已有的第一根K线上返回值为1。
    
    
    例1:LLV(L,BARPOS);        // 求本地已有数据的最小值。
    
    
    例2:IFELSE(BARPOS=1,H,0); // 当前K线是本机已有的第一根K线取最高值,否则取0。
    
    • ## DAYBARPOS

    DAYBARPOS als K-Radius BAR ist die k-Radiusbar des Tages.

    • ## PERIOD

    Die Periodizität ist die Anzahl der Minuten.

    1, 3, 5, 15, 30, 60, 1440
    
    • ## DATE

    DatumDie DATE-Funktion erhält die Jahresdaten des Zyklus seit 1900.

    例1:
    AA..DATE;                  // 测试时AA的值为220218,表示2022年2月18日
    
    • ## TIME

    Zeit für die K-Linie.

    TIME,取K线时间。
    
    
    注:
    1、该函数在盘中实时返回,在K线走完后返回K线的起始时间。
    2、该函数返回的是交易所数据接收时间,也就是交易所时间。
    3、TIME函数在秒周期使用时返回六位数的形式,即:HHMMSS,在其他周期上显示为四位数的形式,即:HHMM.
    4、TIME函数只能加载在日周期以下的周期中,在日周期及日周期以上的周期中该函数返回值始终为1500。
    5、使用TIME函数进行尾盘平仓的操作需要注意
    (1)尾盘平仓设置的时间建议设置为K线返回值中实际可以取到的时间(如:螺纹指数 5分钟周期 最后一根K线返回时间为1455,尾盘平仓设置为TIME>=1458,CLOSEOUT;则效果测试中不能出现尾盘平仓的信号)
    (2)使用TIME函数作为尾盘平仓的条件的,建议开仓条件也要做相应的时间限制(如设置尾盘平仓条件为TIME>=1458,CLOSEOUT;则相应的开仓条件中需要添加条件TIME<1458;避免平仓后再次开仓的情况)
    
    
    例1:
    C>O&&TIME<1450,BK;
    C<O&&TIME<1450,SK;
    TIME>=1450,SP;
    TIME>=1450,BP;
    AUTOFILTER;
    // 在14:50后平仓。
    例2:
    ISLASTSK=0&&C>O&&TIME>=0915,SK;
    
    • ## YEAR

    Jahr

    YEAR,取得年份。
    
    
    注:
    YEAR的取值范围为1970—2033。
    
    
    例1:
    N:=BARSLAST(YEAR<>REF(YEAR,1))+1;
    HH:=REF(HHV(H,N),N);
    LL:=REF(LLV(L,N),N);
    OO:=REF(VALUEWHEN(N=1,O),N);
    CC:=REF(C,N);                               // 取上一年的最高价,最低价,开盘价,收盘价
    例2:
    NN:=IFELSE(YEAR>=2000 AND MONTH>=1,0,1);
    
    • ## MONTH

    Der Monat.

    MONTH,返回某个周期的月份。
    
    
    注:
    MONTH的取值范围为1—12.
    
    
    例1:
    VALUEWHEN(MONTH=3&&DAY=1,C);                // 在K线日期为三月一日时取其收盘价
    例2:
    C>=VALUEWHEN(MONTH<REF(MONTH,1),O),SP;
    
    • ## DAY

    Anzahl der Tage in einer bestimmten Periode

    DAY,返回某一周期的日数。
    
    
    注:
    DAY取值范围为1-31。
    
    
    例1:
    DAY=3&&TIME=0915,BK;                      // 当日起为3日,时间为9点15分时,买开
    例2:
    N:=BARSLAST(DATE<>REF(DATE,1))+1;
    CC:=IFELSE(DAY=1,VALUEWHEN(N=1,O),0);      // 当日期为1时,取开盘价,否则取值为0
    
    • ## HOUR

    Die Stunde.

    HOUR,返回某周期的小时数。
    
    
    注:
    HOUR的取值范围为0—23
    
    
    例1:
    HOUR=10;                                   // 在10:00的K线上返回值为1,其余K线上返回值为0
    
    • ## MINUTE

    Eine Minute.

    MINUTE,返回某个周期的分钟数。
    
    
    注:
    1:MINUTE的取值范围为0—59
    2:该函数只能加载在分钟周期上,返回当根K线开始的分钟数。
    例1:
    MINUTE=0;                                 // 在整点时刻的分钟K线上返回值为1,其余K线返回值为0
    例2:
    TIME>1400&&MINUTE=50,SP;                   // 在14:50的时候卖平仓
    
    • ## WEEKDAY

    Anzahl der Wochen.

    WEEKDAY,取得星期数。
    
    
    注:
    1:WEEKDAY的取值范围是0—6。(星期日 ~ 星期六)
    
    
    例1:
    N:=BARSLAST(MONTH<>REF(MONTH,1))+1;
    COUNT(WEEKDAY=5,N)=3&&TIME>=1450,BP;
    COUNT(WEEKDAY=5,N)=3&&TIME>=1450,SP;
    AUTOFILTER;                               // 每个月交割日尾盘自动平仓
    例2:
    C>VALUEWHEN(WEEKDAY<REF(WEEKDAY,1),O)+10,BK;
    AUTOFILTER;
    
  • Logische Urteilsfunktion

    • ## BARSTATUS

    Zurück zur Position des aktuellen Zyklus.

    BARSTATUS 返回当前周期的位置状态。
    
    
    注:
    该函数返回1表示当前周期是第一个周期,返回2表示是最后一个周期,返回0表示当前周期处于中间位置。
    
    
    例:
    A:=IFELSE(BARSTATUS=1,H,0);              // 如果当前K线是第一个周期,变量A返回K线最高值,否则取0
    
    • ## BETWEEN

    Das ist eine gute Idee.

    BETWEEN(X,Y,Z) 表示X是否处于Y和Z之间,成立返回1(Yes),否则返回0(No)。
    
    
    注:
    1、其中若X=Y、X=Z、或X=Y且Y=Z时函数返回值为1(Yse)。
    
    
    例1:
    BETWEEN(CLOSE,MA5,MA10);                // 表示收盘价介于5日均线与10日均线之间
    
    • ## BARSLASTCOUNT

    BARSLASTCOUNT ((COND) Berechne von der aktuellen Zeitspanne nach vorne die Anzahl der Zeitspannen, die die Bedingung statistisch in Folge erfüllen.

    注:
    1、返回值为从当前周期计算COND连续不为0的周期数
    2、条件第一次成立的当根k线上BARSLASTCOUNT(COND)的返回值为1
    
    
    例:
    BARSLASTCOUNT(CLOSE>OPEN);
    //计算当根K线在内连续为阳线的周期数
    
    • ## CROSS

    Kreuzfunktion

    CROSS(A,B) 表示A从下方向上穿过B,成立返回1(Yes),否则返回0(No)
    
    
    注:
    1、满足穿越的条件必须上根k线满足A<=B,当根k线满足A>B才被认定为穿越。
    
    
    例1:
    CROSS(CLOSE,MA(CLOSE,5));              // 表示收盘线从下方向上穿过5周期均线
    
    • ## CROSSDOWN

    Nach unten durchqueren

    CROSSDOWN(A,B):表示当A从上方向下穿B,成立返回1(Yes),否则返回0(No)
    
    
    注:
    1、CROSSDOWN(A,B)等同于CROSS(B,A),CROSSDOWN(A,B)编写更利于理解
    
    
    例1:
    MA5:=MA(C,5);
    MA10:=MA(C,10);
    CROSSDOWN(MA5,MA10),SK;               // MA5下穿MA10卖开仓
    // CROSSDOWN(MA5,MA10),SK;与CROSSDOWN(MA5,MA10)=1,SK;表达同等意义
    
    • ## CROSSUP

    Aufwärts durchqueren.

    CROSSUP(A,B)表当A从下方向上穿过B,成立返回1(Yes),否则返回0(No)
    
    
    注:
    1、CROSSUP(A,B)等同于CROSS(A,B),CROSSUP(A,B)编写更利于理解。
    
    
    例1:
    MA5:=MA(C,5);
    MA10:=MA(C,10);
    CROSSUP(MA5,MA10),BK;                 // MA5上穿MA10,买开仓
    // CROSSUP(MA5,MA10),BK;与CROSSUP(MA5,MA10)=1,BK;表达同等意义
    
    • ## EVERY

    Die Beurteilung der Nachhaltigkeit der Zufriedenheit

    EVERY(COND,N),判断N周期内是否一直满足COND条件。若满足函数返回值为1,不满足函数返回值为0。
    
    
    注:
    1、N包含当前k线。
    2、若N是有效数值,但前面没有那么多K线,或者N为空值,代表条件不满足,函数返回值为0。
    3、N可以是变量。
    
    
    例1:
    EVERY(CLOSE>OPEN,5);                // 表示5个周期内一直是阳线
    例2:
    MA5:=MA(C,5);                       // 定义5周期均线
    MA10:=MA(C,10);                     // 定义10周期均线
    EVERY(MA5>MA10,4),BK;               // 4个周期内MA5都大于MA10,则买开仓
    // EVERY(MA5>MA10,4),BK;与EVERY(MA5>MA10,4)=1,BK;表达同等意义
    
    • ## EXIST

    Beurteilung der Zufriedenheit

    EXIST(COND,N)判断N个周期内是否有满足COND的条件。
    
    
    注:
    1、N包含当前k线。
    2、N可以是变量。
    3、若N是有效数值,但前面没有那么多K线,按实际周期数计算。
    
    
    例1:
    EXIST(CLOSE>REF(HIGH,1),10);     // 表示10个周期中是否存在收盘价大于前一个周期的最高价,存在返回1,不存在则返回0
    例2:
    N:=BARSLAST(DATE<>REF(DATE,1))+1;
    EXIST(C>MA(C,5),N);              // 表示当天是否有满足收盘价大于5周期均线的k线,存在返回1,不存在返回0
    
    • ## IF

    Bedingte Funktion

    IF(COND,A,B)若COND条件成立,则返回A,否则返回B。
    
    
    注:
    1、COND是判断条件;A、B可以是条件,也可以是数值。
    2、该函数支持变量循环引用前一周期自身变量,即支持下面这样的写法Y:IF(CON,X,REF(Y,1))。
    例1:
    IF(ISUP,H,L);                   // k线为阳线,取最高价,否则取最低价
    例2:
    A:=IF(MA5>MA10,CROSS(DIFF,DEA),IF(CROSS(D,K),2,0));     // 当MA5>MA10时,取是否满足DIFF上穿DEA,否则(MA5不大于MA10),当K,D死叉时,令A赋值为2,若上述条件都不满足,A赋值为0
    A=1,BPK;                                                // 当MA5>MA10,以DIFF上穿DEA作为开多仓条件
    A=2,SPK;                                                // 当MA5不大于MA10,以K、D死叉作为开空仓条件
    
    • ## IFELSE

    Bedingte Funktion

    IFELSE(COND,A,B) 若COND条件成立,则返回A,否则返回B。
    
    
    注:
    1、COND是判断条件;A、B可以是条件,也可以是数值。
    2、该函数支持变量循环引用前一周期自身变量,即支持下面这样的写法Y: IFELSE(CON,X,REF(Y,1));
    例1:
    IFELSE(ISUP,H,L);                                             // k线为阳线,取最高价,否则取最低价
    例2:
    A:=IFELSE(MA5>MA10,CROSS(DIFF,DEA),IFELSE(CROSS(D,K),2,0));   // 当MA5>MA10时,取是否满足DIFF上穿DEA,否则(MA5不大于MA10),当K,D死叉时,令A赋值为2,若上述条件都不满足,A赋值为0
    A=1,BPK;                                                      // 当MA5>MA10,以DIFF上穿DEA作为开多仓条件
    A=2,SPK;                                                      // 当MA5不大于MA10,以K、D死叉作为开空仓条件
    
    • ## ISCONTRACT

    Ob es sich um einen bestimmten Vertrag handelt.

    ISCONTRACT(CODE)当前是否为指定的合约。
    
    
    用法:ISCONTRACT(CODE);是当前合约返回1,不是当前合约返回0。
    
    
    注:
    1、判断是否为指定合约时,CODE可以为合约的交易代码。
    
    
    例:
    ISCONTRACT('this_week');    // 数字货币OKEX期货合约
    ISCONTRACT('XBTUSD');       // 数字货币BITMEX期货合约
    

    Regelmäßige Ausdrücke unterstützt.

    Beurteilung des Vertrages

    ISCONTRACT('this_week');                     // 判断当前合约是否为OKEX期货 this_week(当周)合约
    

    Beurteilung der Börsenbezeichnung

    ISCONTRACT('@Futures_(Binance|FTX)');       // 判断当前交易所对象是否为Binance期货或者FTX期货
    ISCONTRACT('@(OKEX|Bitfinex)');             // 判断交易所,需要在开头加@字符
    
    • ## ISDOWN

    Die Schatten.

    ISDOWN判断该周期是否收阴。
    
    
    注:
    1、ISDOWN等同于C<O
    
    
    例:
    ISDOWN=1&&C<REF(C,1),SK;                    // 当根k线收阴并且收盘价小于前一周期收盘价,则开空
    // ISDOWN=1&&C<REF(C,1),SK;与ISDOWN&&C<REF(C,1),SK; 表达同等意义
    
    • ## ISEQUAL

    Platte

    ISEQUAL判断该周期是否平盘。
    
    
    注:
    1、ISEQUAL等同于C=O
    
    
    例1:
    EVERY(ISEQUAL=1,2),CLOSEOUT;                // 持续2根k线都是平盘,则全平
    
    • ## ISLASTBAR

    Beurteilen Sie, ob die Periode die letzte K-Linie ist.

    ISLASTBAR判断该周期是否为最后一根k线。
    
    
    例1:
    VALUEWHEN(ISLASTBAR=1,REF(H,1));            // 当前k线是最后一根k线,则取前一周期的最高价
    
    • ## ISNULL

    Die Null-Bewertung.

    ISNULL判断空值。
    
    
    用法:ISNULL(N);如果N为空值,函数返回1;如果N为非空值,函数返回0。
    
    
    例:MA5:=IFELSE(ISNULL(MA(C,5))=1,C,MA(C,5));   // 定义五周期均线,K线数量不足五根时,返回当根K线的收盘价
    
    • ## ISUP

    Sonnenlicht

    ISUP判断该周期是否收阳。
    
    
    注:
    1、ISUP等同于C>O。
    
    
    例:
    ISUP=1&&C>REF(C,1),BK;   // 若当根k线收阳并且收盘价大于前一周期收盘价,则开多
                             // ISUP=1&&C>REF(C,1),BK; 与 ISUP&&C>REF(C,1),BK
                             // 表达同等意义
    
    • ## LAST

    Beurteilungsfunktion

    LAST(COND,N1,N2)判断过去N1到N2周期内,是否一直满足COND条件。
    
    
    注:
    1、若N1与N2只相差一个周期(如N1=3,N2=2),则函数判断距离当前K线最近的那个周期上是否满足条件(即判断过去N2个周期的那根K线上是否满足条件)。
    2、当N1/N2为有效值,但当前的k线数不足N1/N2根,或者N1/N2空值的情况下,代表不成立,该函数返回0。
    3、N1、N2不可以是变量。
    
    
    例1:
    LAST(CLOSE>OPEN,10,5);   // 表示从过去第10个周期到第5个周期内一直是阳线
    例2:
    MA5:=MA(C,5);
    LAST(C>MA5,4,3);         // 判断距离当前k线3个周期的那根k线上是否满足C大于MA5
    
    • ## LONGCROSS

    Beibehaltung der Kreuzfunktion

    LONGCROSS(A,B,N)表示A在N个周期内都小于B,本周期A从下向上穿越B。
    
    
    注:
    1、当N为有效值,但当前的k线数不足N根时,LONGCROSS函数返回空值。
    2、N不支持变量。
    
    
    例1:
    LONGCROSS(CLOSE,MA(CLOSE,10),20);   // 表示收盘线在10日均线之下持续20周期后从下向上穿过10日均线
    
    • ## NOT

    Nein.

    NOT(X):取非。当X=0时返回1,否则返回0。
    例1:
    NOT(ISLASTBK);如果上一个信号不是BK信号,则NOT(ISLASTBK)返回值为1;上一个信号是BK信号,则NOT(ISLASTBK)返回值为0。
    例2:
    NOT(BARSBK>=1)=1;                  // BK信号发出的当根K线上满足条件
    // NOT(BARSBK>=1)=1与NOT(BARSBK>=1)表达同等意义
    
    • ## NULL

    Zurück null.

    返回空值
    用法:
    MA5:=MA(C,5);
    MA10:=MA(C,10);
    A:=IFELSE(MA5>MA10,MA5,NULL),COLORRED;  // 当MA5>MA10时,画五日均线MA5,不满足MA5>MA10时,返回空值,不画线
    
    • ## VALUEWHEN

    Wertschätzung

    VALUEWHEN(COND,X)当COND条件成立时,取X的当前值。如COND条件不成立,则取上一次COND条件成立时X的值。
    
    
    注:
    X可以是数值也可以是条件。
    
    
    例1
    VALUEWHEN(HIGH>REF(HHV(HIGH,5),1),HIGH);  // 表示当前最高价大于前五个周期最高价的最大值时返回当前最高价
    例2:
    VALUEWHEN(DATE<>REF(DATE,1),O);           // 表示取当天第一根k线的开盘价(即当天开盘价)
    例3:
    VALUEWHEN(DATE<>REF(DATE,1),L>REF(H,1));  // 表示在当天第一根k线上判断当前最低价是否大于昨天最后一根K线的最高价。返回1,说明当天跳空高开。返回0,说明当天不满足跳空高开条件
    
  • Funktion zur Kreislaufdurchführung

    • ## LOOP2

    Funktion der Kreislaufbedingung.

    ”` LOOP2(COND,A,B);循环条件函数若COND条件成立,则返回A,否则返回B。

    注: 1、COND是判断条件;A、B可以是条件,也可以是数值。 2、该函数支持变量循环引用前一周期自身变量,即支持下面这样的写法Y:=LOOP2(CON,X,REF(Y,1));

    例1: X:=LOOP2(ISUP,H,REF(X,1)); // k线为阳线,取当根K线的最高价,否则取上一次是阳线的K线的最高价;若之前未出现过阳线时,X返回为空值

    例2: BB:=LOOP2(BARSBK=1,LOOP2(L>LV(L,4),L,LV(L,4)),LOOP2(L>REF(BB,1),L,REF(BB,1))); // 持有多单时,开多单那根的前面4个周期内的最低价为起始止损点BB,后续K线最低价比前一个最低价高,取当前最低价为止损点,否则取前一个低点为止损点 SS:=LOOP2(BARSSK=1,LOOP2(H