En la carga de los recursos... Cargando...

Doc de Mi Lenguaje

El autor:Los inventores cuantifican - sueños pequeños, Creado: 2022-06-30 18:24:06, Actualizado: 2024-02-06 17:36:19

[TOC] ¿Qué quieres decir?

MyLanguage Doc

MyLanguage es un lenguaje de comercio programático que es compatible y mejorado con MyLanguage. El MyLanguage de FMZ Quant se someterá a una verificación de sintaxis estricta.%%el operador hará que se reporte un error.

  • Instrucciones básicas

    • ## Contrato

    Contrato de criptomonedas

    Contrato de criptomonedas

    this_week     cryptocurrency futures contract this week
    next_week     cryptocurrency futures contract next week
    month         cryptocurrency futures contract month
    quarter       cryptocurrency futures contract quarter
    next_quarter  cryptocurrency futures contract next quarter
    third_quarter cryptocurrency futures contract third quarter
    last_quarter  contract last quarter
    
    
    XBTUSD        BITMEX perpetual contract
    swap          cryptocurrency futures perpetual contracts other than BITMEX exchange
    
    
    For details, please refer to the exchange.SetContractType() function section of the JavaScript/Python/C++ documentation
    

    MyLanguage Doc

    • ## Variables

    Una variable es un espacio abierto en la memoria del ordenador para almacenar datos.

    abre la primera variable

    // assign 1 to variable a
    a:=1;
    

    En elMyLanguage, es sencillo distinguirla de ladata volume:

    1. Datos de un solo valor: solo hay un valor, como:0, 1, 'abc'.
    2. Datos de secuencia: una secuencia de datos compuesta por un grupo de datos de un solo valor, tales como:Close(precio de cierre), dondeClosecontiene el precio de cierre den periods. [ 10.1 , 10.2 , 10.3 , 10.4 , 10.5 ...]

    Distinguir entre tipo variable

    1. Tipo de cadena: debe estar envuelto con `'', el tipo de cadena no está permitido para ser utilizado directamente, y se necesita para ser de salida a la vista con la función.
    INFO(CLSOE>OPEN,'OK!');
    
    1. Tipos de valores: incluidos los enteros, los números con coma flotante (decimales).
    // integer
    int:=2;
    
    
    // decimal
    float:=3.1;
    
    1. Tipo booleano, utilizando 1 (para verdadero) o 0 (para falso): 1, 0, verdadero o falso. Por ejemplo:A:=1>0;Después de ejecutar este código, el valor deAes 1.
    // The closing price of the current period is greater than -999, you will find that the return value of each period is 1, which means true, because the closing price is almost impossible to be negative.
    is_true:=Close>-999;
    
    1. Variables globales
    VARIABLE:VALUE1:10;     // Declare a global variable, assign the value 10, and execute it only once.
    

    Observe que cuando se hace backtesting:

    VARIABLE:NX:0;    // The initial global variable NX is 0
    NX..NX+1;         // Accumulate 1 each time
    INFO(1,NX);       // Print NX every time
    

    En primer lugar, elINFOImpresiones de declaraciones101Tal vez no lo sea.0¿Al principio? La razón es que hay 100 líneas K iniciales en el backtest, y 100 líneas K ya se han ejecutado, que se ha acumulado 100 veces. El precio real depende de cuántas líneas K se obtienen inicialmente.

    • ### Reglas para nombrar

    En la mayoría de los sistemas, la denominación de variables no permite el uso del sistema palabras reservadas (nombres de variables incorporados, nombres de funciones).Close, CPor último, no se permite que sea muy largo, y diferentes sistemas tienen diferentes restricciones de longitud. De hecho, no tienes que preocuparte por la eficiencia del sistema principal de análisis de chino. Creo que MyLanguage es muy amigable con el chino. Para los programadores experimentados, se recomienda usar las siguientes dos reglas de nombres:

     1. Chinese name
    
      // elegant output
      5-day moving average:=MA(C,5);
    
     2. English + underline
    
      // Output
      move_avg_5:=MA(C,5);
    

    Si prefiere el inglés, trate de hacer que el significado de sus variables sea lo más comprensible posible.A1, AAA, BBBConfíe en mí cuando usted revise su código de indicador de nuevo en unos días, usted será muy miserable debido a la pérdida de memoria.

    Así que a partir de ahora, abrace MyLanguage al máximo!Espero que pueda convertirse en una poderosa herramienta para su análisis y toma de decisiones.

    • ## Tipo de datos

    Cuando asignamos datos claros a una variable por escrito, la variable también se convierte en el tipo de los datos en sí.

    • 1. Tipo de valor:
      1.2.3.1.1234.2.23456 ...
    
    • 2. Tipo de cadena (str):
      '1' .'2' .'3' ,String types must be wrapped with ''
    
    • Los datos de secuencia:
      A collection of data consisting of a series of single-valued data
    
    • 4. Tipo booleano:

    Utilización1Representa eltruey0parafalse.

    Ejemplo

      // declare a variable of value type
      var_int := 1;
      // Declare a variable for sequence data
      var_arr := Close;
      // The string type cannot be declared alone, it needs to be combined with the function
      INFO(C>O, 'positive line');
    
    • ## Operador

    La operación y el cálculo utilizados para ejecutar el código del indicador son simplemente los símbolos involucrados en la operación.

    • ### Operador de asignación

    para asignar un valor a una variable

     - 1. `:`
    
    
    ```:```, represents assignment and output to the graph (subgraph).
    
    
    ```
    Close1:Close;      // Assign Close to the variable Close1 and output to the figure
    ```
    
     - 2. `:=`
    
    
    ```:=```, represents assignment, but is not output to the graph (main graph, sub graph...), nor is it displayed in the status bar table.
    
    
    ```
    Close2:=Close;     // Assign Close to the variable Close2
    ```
    
     - 3. `^^`
    
    
    ```^^```, Two ```^``` symbols represent assignment, assign values to variables and output to the graph (main graph).
    
    
    ```
    lastPrice^^C;
    ```
    
     - 4. `..`
    
    
    ```..```, two ```.``` symbols represent assignment, assign values to variables and display variable names and values in the chart, but do not draw pictures to the chart (main picture, sub-picture...).
    
    
    ```
    openPrice..O
    ```
    
    • ### Operadores relacionales

    Los operadores relacionales son operadores binarios que se utilizan en expresiones condicionales para determinar la relación entre dos datos.

    Valor de retorno: tipo booleano, ya seatrue(1) ofalse(0).

     - 1. more than```>```
    
    
    ```
    // Assign the operation result of 2>1 to the rv1 variable, at this time rv1=1
    rv1:=2>1;
    ```
    
     - 2. less than```<```
    
    
    ```
    // Returns false, which is 0, because 2 is greater than 1
    rv3:=2<1;
    ```
    
     - 3. more than or equal to```>=```
    
    
    ```
    x:=Close;
    // Assign the result of the operation that the closing price is more than or equal to 10 to the variable rv2
    // Remark that since close is a sequence of data, when close>=10 is performed, the operation is performed in each period, so each period will have a return value of 1 and 0
    rv2:=Close>=10;
    ```
    
     - 4. less than or equal to```<=```
    
    
    ```
    omitted here
    ```
    
     - 5. equal to```=```
    
    
    ```
    A:=O=C;     // Determine whether the opening price is equal to the closing price.
    ```
    
     - 6. Not equal to```<>```
    
    
    ```
    1<>2       // To determine whether 1 is not equal to 2, the return value is 1 (true)
    ```
    
    • ### Operadores lógicos

    Valor de retorno: tipo booleano, ya seatrue(1) ofalse(0).

     1. The logical and ```&&```, can be replaced by ```and```, and the left and right sides of the and connection must be established at the same time.
    
      // Determine whether cond_a, cond_b, cond_c are established at the same time
      cond_a:=2>1;
      cond_b:=4>3;
      cond_c:=6>5;
      cond_a && cond_b and cond_c;    // The return value is 1, established
    
     2. Logical or ```||```, you can use ```or``` to replace the left and right sides of the or link, one side is true (true), the whole is true (return value true).
    
      cond_a:=1>2;
      cond_b:=4>3;
      cond_c:=5>6;
      cond_a || cond_b or cond_c;    // The return value is 1, established
    
     3. ```()``` operator, the expression in parentheses will be evaluated first.
    
      1>2 AND (2>3 OR 3<5)    // The result of the operation is false
      1>2 AND 2>3 OR 3<5      // The result of the operation is true
    
    • Operadores aritméticos
      Return value: numeric type
    

    Los operadores aritméticos son operadores aritméticos. Es un símbolo para completar operaciones aritméticas básicas (operadores aritméticos), que es un símbolo utilizado para procesar cuatro operaciones aritméticas.

     - **plus +**
    
    
    ```
    A:=1+1;      // return 2
    ```
    
     - **minus -**
    
    
    ```
    A:=2-1;      // return 1
    ```
    
     - **multiply \**
    ```
    A:=2*2;      // return 4
    ```
    
     - **divide /**
    
    
    ```
    A:=4/2;      // return 2
    ```
    
    • Funciones

      • ### Funciones

    En el mundo de la programación, una función es una pieza de código que implementa una determinada función.

      function(param1,param2,...)
    
     - Composition:
    
    
    Function name (parameter1, parameter2, ...), may have no parameters or have multiple parameters. For example, ```MA(x,n);``` means to return to the simple moving average of ```x``` within ```n``` periods. Among them, ```MA()``` is a function, ```x``` and ```n``` are the parameters of the function.
    
    
    When using a function, we need to understand the basic definition of the function, that is, what data can be obtained by calling the function. Generally speaking, functions have parameters. When we pass in parameters, we need to ensure that the incoming data type is consistent. At this stage, the code hinting function of most IDEs is very imperfect. There is a data type of the parameter given, which brings some trouble to our use, and ```MA(x,n);``` is interpreted as:
    
    
    ```
    Return to simple moving average
    Usage:
    AVG:=MA(X,N): N-day simple moving average of X, algorithm (X1+X2+X3+...+Xn)/N, N supports variables
    ```
    
    
    This is very unfriendly to beginners, but next, we will dissect the function thoroughly, trying to find a quick way to learn and use the function.
    
    • ### Devuelve el valor

    Para aprender funciones rápidamente, necesitamos entender un concepto primero, se llama valor de retorno, Regreso, como su nombre indica, significa retorno ; El valor representa valor específico , entonces el significado del valor de retorno es: los datos que se pueden obtener.

      // Because it will be used in the following code, the variable return_value is used to receive and save the return value of function()
      // retrun_value := function(param1,param2);
      // For example:
      AVG:=MA(C,10);     // AVG is retrun_value, function is MA function, param1 parameter: C is the closing price sequence data, param2 parameter: 10.
    
    • Los parámetros

    En segundo lugar, el segundo concepto importante de la función es el parámetro, y se pueden obtener diferentes valores de retorno al pasar diferentes parámetros.

      // The variable ma5 receives the 5-day moving average of closing prices
      ma5:=MA(C,5);
      // The variable ma10 receives the 10-day moving average of closing prices
      ma10:=MA(C,10);
    

    El primer parámetroXde las variables anterioresma5, ma10esC(precio de cierre), de hecho,CEl valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre de un valor de cierre.MA()La función se vuelve más flexible para usar a través de los parámetros.

    • Cómo aprender

      • 1. Primero, necesitamos entender lo que hace una función, es decir, qué datos esta función puede devolvernos.
      • La última cosa es entender el tipo del valor de retorno. Después de todo, usamos funciones para obtener el valor de retorno.
      • 3. Además, necesitamos saber el tipo de datos del parámetroMA(x,n), si no conoce el tipo de datos del parámetrox, n, no será capaz de obtener el valor de retorno correctamente.

    En la siguiente introducción y uso de la función, siga los tres principios anteriores.

    • Mejora del lenguaje

      • MyLanguageyJavaScriptProgramación mixta en lenguaje
      %%
      // This can call any API quantified of FMZ
      scope.TEST = function(obj) {
          return obj.val * 100;
      }
      %%
      Closing price: C;
      Closing price magnified 100 times: TEST(C);
      The last closing price is magnified by 100 times: TEST(REF(C, 1)); // When the mouse moves to the K-line of the backtest, the variable value will be prompted
    
     - ```scope```object
    
    
    The ```scope``` object can add attributes and assign anonymous functions to attributes, and the anonymous function referenced by this attribute can be called in the code part of MyLanguage.
    
     - ```scope.getRefs(obj)```function
    
    
    In ```JavaScript``` code block, call the ```scope.getRefs(obj)``` function to return the data of the passed in ```obj``` object.
    
    
    The ```JavaScript``` code wrapped with the following ```%% %%``` will get the ```C``` passed in when the ```TEST(C)``` function in MyLanguage code is called Close price.
    The ```scope.getRefs``` function will return all the closing prices of this K-line data. Because of the use of ```throw "stop"``` to interrupt the program, the variable ```arr``` contains the closing price of the first bar only. You can try to delete ```throw "stop"```, it will execute the ```return``` at the end of the ```JavaScript``` code, and return all closing price data.
    
    
    ```
    %%
    scope.TEST = function(obj){
        var arr = scope.getRefs(obj)
        Log("arr:", arr)
        throw "stop"
        return
    }
    %%
    TEST(C);
    ```
    
     - scope.bars
    
    
    Access all K-line bars in the ``JavaScript`` code block.
    
    
    The ```TEST``` function returns a value. 1 is a negative line and 0 is a positive line.
    
    
    ```
    %%
    scope.TEST = function(){
        var bars = scope.bars
        return bars[bars.length - 1].Open > bars[bars.length - 1].Close ? 1 : 0    // Only numeric values can be returned
    }
    %%
    arr:TEST;                                                                      
    ```
    
    
    ```
    # Attention:
    # An anonymous function received by TEST, the return value must be a numeric value.
    # If the anonymous function has no parameters, it will result in an error when calling TEST, writing VAR:=TEST; and writing VAR:=TEST(); directly.
    # TEST in scope.TEST must be uppercase.
    ```
    
     - scope.bar
    
    
    In the ```JavaScript``` code block, access the current bar.
    
    
    Calculate the average of the high opening and low closing prices.
    
    
    ```
    %%
    scope.TEST = function(){
        var bar = scope.bar
        var ret = (bar.Open + bar.Close + bar.High + bar.Low) / 4
        return ret
    }
    %%
    avg^^TEST;
    ```
    
     - scope.depth
    
    
    Access to market depth data (order book).
    
    
    ```
    %%
    scope.TEST = function(){
        Log(scope.depth)
        throw "stop"             // After printing the depth data once, throw an exception and pause
    }
    %%
    TEST;
    ```
    
     - scope.symbol
    
    
    Get the name string of current trading pair.
    
    
    ```
    %%
    scope.TEST = function(){
        Log(scope.symbol)
        throw "stop"
    }
    %%
    TEST;
    ```
    
     - scope.barPos
    
    
    Get the Bar position of the K-line.
    
    
    ```
    %%
    scope.TEST = function(){
        Log(scope.barPos)
        throw "stop"
    }
    %%
    TEST;
    ```
    
     - scope.get\_locals('name')
    
    
    This function is used to get the variables in the code section of MyLanguage.
    
    
    ```
    V:10;
    %%
    scope.TEST = function(obj){
        return scope.get_locals('V')
    }
    %%
    GET_V:TEST(C);
    ```
    
    
    ```
    # Attention:
    # If a variable cannot calculate the data due to insufficient periods, call the scope.get_locals function in the JavaScript code at this time
    # When getting this variable, an error will be reported: line:XX - undefined locals A variable name is undefined
    ```
    
     - scope.canTrade
    
    
    The ```canTrade``` attribute marks whether the current bar can be traded (whether the current Bar is the last one)
    
    
    For example, judging that the market data is printed when the strategy is in a state where the order can be traded
    ```
    %%
    scope.LOGTICKER = function() {
        if(exchange.IO("status") && scope.canTrade){
            var ticker = exchange.GetTicker();
            if(ticker){
                Log("ticker:", ticker);
                return ticker.Last;
            }
        }
    }
    %%
    LASTPRICE..LOGTICKER;
    ```
    
    • Ejemplo de aplicación:

      %%
      scope.TEST = function(a){
        if (a.val) {
            throw "stop"
        }    
      }
      %%
      O>C,BK;
      C>O,SP;
      TEST(ISLASTSP);
      

      Detenga la estrategia después de abrir y cerrar una posición una vez.

    • Referencia de varios períodos

      El sistema seleccionará automáticamente un período de línea K subyacente adecuado y utilizará estos datos de período de línea K subyacentes para sintetizar todos los datos de línea K a los que se hace referencia para garantizar la exactitud de los datos.

      • Utilización:#EXPORT formula_name ... #ENDSi la fórmula no se calcula sólo para obtener datos de diferentes períodos, también se puede escribir una fórmula vacía.

    Una fórmula vacía es:

      #EXPORT TEST 
      NOP;
      #END           // end
    
    • Utilización:#IMPORT [MIN,period,formula name] AS variable valueObtener varios datos del período establecido (precio de cierre, precio de apertura, etc., obtenidos por valor variable).

    ElMINEn elIMPORTel comando significanivel de minuto.MyLanguage de la plataforma FMZ Quant, y sólo elMINEl nivel de apoyo en elIMPORTAhora se soportan períodos no estándar. Por ejemplo, se puede usar#IMPORT [MIN, 240, TEST] AS VAR240para importar datos como el período de 240 minutos (4 horas) K-line.

    Ejemplo de código:

      // This code demonstrates how to reference formulas of different periods in the same code
      // #EXPORT extended grammar, ending with #END marked as a formula, you can declare multiple
      #EXPORT TEST 
      Mean value 1: EMA(C, 20);
      Mean value 2: EMA(C, 10);
      #END // end
    
    
      #IMPORT [MIN,15,TEST] AS VAR15 // Quoting the formula, the K-line period takes 15 minutes
      #IMPORT [MIN,30,TEST] AS VAR30 // Quoting the formula, the K-line period takes 30 minutes
      CROSSUP(VAR15.Mean value is 1, VAR30.Mean value is 1),BPK;
      CROSSDOWN(VAR15.Mean value is 2, VAR30.Mean value is 2),SPK;
      The highest price in fifteen minutes:VAR15.HIGH;
      The highest price in thirty minutes:VAR30.HIGH;
      AUTOFILTER;
    
    • Es necesario prestar atención al utilizarREF, LLV, HHVy otras instrucciones para hacer referencia a los datos cuando se hacen referencia a datos en períodos múltiples.
      (*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 // end      
    
    
      #IMPORT [MIN,5,TEST] AS MIN5
      INFO(1, 'C:', C, 'MIN5.REF1C:', MIN5.REF1C, 'REF(MIN5.C, 1):', REF(MIN5.C, 1), 'Trigger BAR time:', BARTIME, '#FF0000');
      INFO(1, 'L:', L, 'MIN5.REF1L:', MIN5.REF1L, 'REF(MIN5.L, 1):', REF(MIN5.L, 1), 'Trigger BAR time:', BARTIME, '#32CD32');
      AUTOFILTER;
    

    Comparando la diferencia entreMIN5.REF1CyREF(MIN5.C, 1), podemos encontrar:

      ```REF(MIN5.C, 1)``` is the K -line period of the current model (the above code backtest period is set to 1 minute, i.e. ```period: 1m``), the closing price of the 5-minute period where the penultimate BAR is located at the current moment.
      These two definitions are differentiated, and they can be used as needed.
    
    - ## Mode Description
    
     - ### Signal filtering model of one opening and one leveling
    
    
      In the model, the ```AUTOFILTER``` function is written to control and realize the signal filtering of one opening and one closing. When there are multiple opening signals that meet the conditions, the first signal is taken as the valid signal, and the same signal on the K-line will be filtered out.
    
    
      Instructions supported by filtering model: BK, BP, BPK, SK, SP, SPK, CLOSEOUT, etc. Instructions with lot numbers such as BK(5) are not supported.
    
    
      For example
    

    Los Estados miembros podrán autorizar el uso de las mismas en los casos en que se considere necesario. Los Estados miembros deberán tener en cuenta los siguientes elementos: Las condiciones de los requisitos de seguridad de los sistemas de seguridad de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad de los sistemas de seguridad. Los puntos de referencia de las partidas 1 y 2 se aplicarán a las partidas 2 y 3. C>BKPRICE+10 de diciembre

    
    
    

    Comprensión: Como en el ejemplo anterior, cuando AUTOFILTER no está configurado, la tercera fila BK, la cuarta fila BK y la quinta fila SP se activan en secuencia, y cada línea K activa una señal una vez.
    Si el AUTOFILTER está configurado, después de activar BK, solo se activa SP, se ignoran otras señales BK y cada línea K activa una señal una vez.

    
     - ### Increase and decrease position model
    
    
      The ```AUTOFILTER``` function is not written in the model, allowing continuous opening signals or continuous closing signals, which can increase and decrease positions.
    
    
      Supported instructions: BK(N), BP(N), SK(N), SP(N), CLOSEOUT, BPK(N), SPK(N), open and close orders without lot size are not supported.
      (1)Instruction grouping is supported.
      (2)When multiple instruction conditions are satisfied at the same time, the signals are executed in the order in which the conditional statements are written.
      For example:
    
    
    

    Los Estados miembros podrán autorizar el uso de las mismas en los casos en que se considere necesario. Los Estados miembros deberán tener en cuenta los siguientes elementos: Los datos de las operaciones de los Estados miembros deberán ser publicados en el Diario Oficial de la Unión Europea. Las condiciones de los controles de seguridad se determinarán en función de las condiciones de seguridad establecidas en el anexo II. C>BKPRICE+10 de diciembre

    
    
      Use ```TRADE\_AGAIN```
      It is possible to make the same command line, multiple signals in succession.
    
    
    

    Comprensión: El ejemplo anterior se ejecuta uno por uno, y la señal después de la ejecución ya no se activa. Reinicie el estado del modelo después de cerrar la posición. Una línea K activa una señal una vez.

    
     - ### Model with one K-line and one signal
    
    
      Regardless of whether the K-line is finished, the signal is calculated in real-time orders, that is, the K-line is placed before the order is completed; the K-line is reviewed at the end. If the position direction does not match the signal direction at the end of the K-line, the position will be automatically synchronized.
    
    
      For example:
    

    Los Estados miembros deberán establecer un sistema de gestión de los recursos humanos para la gestión de los recursos. Los datos de los datos de los Estados miembros se publicarán en el Diario Oficial de la Unión Europea. CROSSUP(MA1,MA2),BPK; //La media móvil de 5 períodos se cruza hacia arriba, y la media móvil de 10 períodos va largo. CROSSDOWN(MA1,MA2),SPK; //La media móvil de 5 períodos se cruza hacia abajo y la media móvil de 10 períodos se queda corta. el sistema de filtro automático;

    
     - ### A model of multiple signals on one K-line
    
    
      The model uses ```multsig``` to control and implement multiple signals from one K-line.
    
    
      Regardless of whether the K-line is finished, the signal is calculated in real-time.
    
    
      The signal is not reviewed, there is no signal disappearance, and the direction of the signal is always consistent with the direction of the position.
    
    
      If multiple signal conditions are met in one K-line, it can be executed repeatedly.
    
    
    

    Por ejemplo: Los Estados miembros podrán autorizar el uso de las mismas en los casos en que se considere necesario. Los Estados miembros deberán tener en cuenta los siguientes elementos: Los puntos de referencia de las partidas 1 y 2 se aplicarán a las partidas 2 y 3. C>BKPRICE+10 de diciembre

    
    
      ```MULTSIG``` can execute multiple command lines within one K-line.
      A command line is only signaled once.
    

    O,BK; // Todas estas condiciones se pueden ejecutar en una barra de línea K, pero sólo una señal por línea 10+O,BK; // Estrategia más TRADE_AGAIN(10); puede hacer múltiples señales por línea 20+O,BK; 40+O,BK; Se aplicará el método MULTSIG.

    
    
      Supplement:
      1.The model of adding and reducing positions, two ways of one signal and one K-line: placing an order at the closing price and placing an order at the order price, are both supported.
      2.The model of adding and reducing positions also supports ordering of multiple signals from one K-line.
      The model of adding and reducing positions, write the ```multsig``` function to realize multiple additions or multiple reductions on one K-line.
    
    - ## Execution mode
    
    
    ![MyLanguage Doc](/upload/asset/28d0c387f293478294600.png)
    
     - ### Bar model
    
    
      The Bar model refers to the model that is executed after the current BAR is completed, and the trading is executed when the next BAR starts.
    
     - ### Tick model
    
    
      The Tick model means that the model is executed once for each price movement and trades immediately when there is a signal.
      The Tick model ignores the previous day's signal (the previous day's signal is executed immediately on the same day), and the Tick model focuses only on the current market data to determine whether the signal is triggered.
    
    - ## Chart display
    
     - ### Additional indicators for main chart
    
    
      > Use operator ```^^```, set indicators are displayed on the main chart while assigning values to variables.
    
    
    

    MA60^^MA(C, 60); // Calcular el indicador medio con el parámetro de 60

    
    
      ![MyLanguage Doc](/upload/asset/168d6ee1bbb8c7c9be63.png)
    
     - ### Additional Indicators for sub-chart
    
    
      Use operator ```:```, set indicators are displayed on the sub-chart while assigning values to variables.
    
    
    

    ATR:MA(MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW)),26); // Asignar un valor a la variable ATR, el símbolo : es seguido de la fórmula para calcular el ATR

    
    
      ![MyLanguage Doc](/upload/asset/7b032733df1539ff923b539b1dea72d0.png)
    
    
      If you don't want it to be displayed on the main or subchart, use the "..." operator.
    
    
    

    MA60..MA(C, 60); // Calcular el indicador medio con el parámetro de 60

    
    
      You can use ```DOT``` and ```COLORRED``` to set the line type and color of the line, etc., in line with the habits of users familiar with the MyLanguage.
    
    - ## Common problems
    
    
    > Introduce the **problems** commonly encountered in the process of writing indicators, usually the points that need to be paid attention to when writing (continuously added).
    
     - Remark the semicolon ```;``` at the end.
     - Remark that system keywords cannot be declared as variables.
     - Remark that the string uses **single quotes**, for example: the string ```'Open position'```.
    
     - ### Remark 
    
    
      Annotation
    
         - ```// The Remark content ``` (input method can be typed in both Chinese and English) means that the code is not compiled during the execution process, that is, the content after ```//``` is not executed. Usually we use it to mark the meaning of the code, when it is convenient for code review, it can be quickly understood and recalled.
    
         - ```{ Remark content }```Block Remark.
    
    
        ```
        A:=MA(C,10);
        {The previous line of code is to calculate the moving average.}
        ```
    
         - ```(* Remark content *)```Block Remark.
    
    
        ```
        A:=MA(C,10);
        (*The previous line of code is to calculate the moving average.*)
        ```
    
     - ### Input
    
    
      When writing code, because the input method is often switched between Chinese and English, resulting in symbol errors. The common errors are as follows: colon ```:```, terminator ```;```, comma ```, ```, brackets ```()```, etc. These characters in different states of Chinese and English need attention.
    
    
      > If you use Sogou, Baidu, or Bing input methods, you can quickly switch between Chinese and English by pressing the ```shift``` key once.
    
     - ### Error-prone logic
    
         1. At least, not less than, not less than: the corresponding relational operator ```>=```.
         2. Up to, at most, no more than: the corresponding relational operator ```<=```.
    
     - ### Strategy launch synchronization
    
    
      In the futures strategy, if there is a manually opened position before the strategy robot starts, when the robot starts, it will detect the position information and synchronize it to the actual position status.
      In the strategy, you can use the ```SP```, ```BP```, ```CLOSEOUT``` commands to close the position.
    
    
    

    En %% si (!scope.init) { var ticker = cambio.GetTicker ((); cambio.Comprar.Vender + 10, 1); En el caso de las operaciones de transferencia de datos, el valor de las operaciones de transferencia de datos será el valor de las operaciones de transferencia de datos. ¿ Por qué? En %% C> 0, cerrado; `

    • ### Las posiciones bidireccionales no son compatibles

    MyLanguage no admite el mismo contrato con posiciones largas y cortas.

  • Citación de datos de línea K

    • ## abierto

    Obtenga el precio de apertura del gráfico de la línea K.

    Precio de apertura

    Función: OPEN, abreviatura de O

    Parámetros: ninguno

    Explicación: devuelve el precio de apertura de este período

    Datos de secuencia

    OPEN gets the opening price of the K-line chart.
    
    
    Remark:
    1.It can be abbreviated as O.
    
    
    Example 1:
    OO:=O;           //Define OO as the opening price; Remark that the difference between O and 0.
    Example 2:
    NN:=BARSLAST(DATE<>REF(DATE,1));
    OO:=REF(O,NN);   //Take the opening price of the day
    Example 3:
    MA5:=MA(O,5);    //Define the 5-period moving average of the opening price (O is short for OPEN).
    
    • # # Alto

    Obtener el precio más alto en el gráfico de la línea K.

    El precio más alto

    Función: HIGH, abreviado H

    Parámetros: ninguno

    Explicación: Devuelva el precio más alto de este período

    Datos de secuencia

    HIGH achieved the highest price on the K-line chart.
    
    
    Remark:
    1.It can be abbreviated as H.
    
    
    Example 1:
    HH:=H;         // Define HH as the highest price
    Example 2:
    HH:=HHV(H,5);  // Take the maximum value of the highest price in 5 periods
    Example 3:
    REF(H,1);      // Take the highest price of the previous K-line
    
    • ## Bajo

    Obtener el precio más bajo en el gráfico de la línea K.

    El precio más bajo

    Función: BAJO, abreviado L

    Parámetros: ninguno

    Explicación: Retorno del precio más bajo de este período

    Datos de secuencia

    LOW gets the lowest price on the K-line chart.
    
    
    Remark:
    1.It can be abbreviated as L.
    
    
    Example 1:
    LL:=L;            // Define LL as the lowest price
    Example 2:
    LL:=LLV(L,5);     // Get the minimum value of the lowest price in 5 periods
    Example 3:
    REF(L,1);         // Get the lowest price of the previous K-line
    
    • ## cercano

    Obtenga el precio de cierre del gráfico de la línea K.

    Precio de cierre

    Función: CLOSE, abreviado como C

    Parámetros: ninguno

    Explicación: devuelve el precio de cierre de este período

    Datos de secuencia

    CLOSE Get the closing price of the K-line chart
    
    
    Remarks:
    1.Obtain the latest price when the intraday K-line has not finished.
    2.It can be abbreviated as C.
    
    
    Example 1:
    A:=CLOSE;          //Define the variable A as the closing price (A is the latest price when the intraday K-line has not finished)
    Example 2:
    MA5:=MA(C,5);      //Define the 5-period moving average of the closing price (C is short for CLOSE)
    Example 3:
    A:=REF(C,1);       //Get the closing price of the previous K-line
    
    • ## VOL

    Obtener el volumen de negociación del gráfico de línea K.

    Volumen de las operaciones

    Función: VOL, abreviado como V

    Parámetros: ninguno

    Explicación: devuelve el volumen de operaciones de este período

    Datos de secuencia

    VOL obtains the trading volume of the K-line chart.
    
    
    Remarks:
     It can be abbreviated as V.
    The return value of this function on the current TICK is the cumulative value of all TICK trading volume on that day.
    
    
    Example 1:
    VV:=V;       // Define VV as the trading volume
    Example 2:
    REF(V,1);    // Indicates the trading volume of the previous period
    Example 3:
    V>=REF(V,1); // The trading volume is greater than the trading volume of the previous period, indicating that the trading volume has increased (V is the abbreviation of VOL)
    
    • ## OPI

    Tome la posición total actual en el mercado de futuros (contratos).

    OpenInterest:OPI;
    
    • ## REF

    Citación en el futuro.

    Reference the value of X before N periods.
    
    
    Remarks:
    1.When N is a valid value, but the current number of K-lines is less than N, returns null;
    2.Return the current X value when N is 0;
    3.Return a null value when N is null.
    4.N can be a variable.
    
    
    Example 1:
    REF(CLOSE,5);Indicate the closing price of the 5th period before the current period is referenced
    Example 2:
    AA:=IFELSE(BARSBK>=1,REF(C,BARSBK),C);//Take the closing price of the K-line of the latest position opening signal
    // 1)When the BK signal is sent, the bar BARSBK returns null, then the current K-line REF(C, BARSBK) that sends out the BK signal returns null;
    // 2)When the BK signal is sent out, the K-line BARSBK returns null, and if BARSBK>=1 is not satisfied, it is the closing price of the K-line.
    // 3)The K-line BARSBK after the BK signal is sent, returns the number of periods from the current K-line between the K-line for purchasing and opening a position, REF(C,BARSBK)
    Return the closing price of the opening K-line.
    // 4)Example: three K-lines: 1, 2, and 3, 1 K-line is the current K-line of the position opening signal, then returns the closing price of the current K-line, 2, 3
    The K-line returns the closing price of the 1 K-line.
    
    • ## UNIDAD

    Consigue la unidad de negociación del contrato de datos.

    Get the trading unit of the data contract.
    Usage:
    UNIT takes the trading unit of the loaded data contract.
    

    Venta al contado de criptomonedas

    El valor UNIT es 1.

    Futuros de criptomonedas

    El valor UNIT está relacionado con la moneda del contrato.

    OKEX futures currency standard contracts: 1 contract for BTC represents $100, 1 contract for other currencies represents $10
    
    • ## MINPRICE

    El precio mínimo de variación del contrato de datos.

    Take the minimum variation price of the data contract.
    Usage:
    MINPRICE; Take the minimum variation price of the loaded data contract.
    
    • ## MINPRICE1

    El precio mínimo de variación de un contrato de negociación.

    Take the minimum variation price of a trading contract.
    Usage:
    MINPRICE1; Take the minimum variation price of a trading contract.
    
  • Función de tiempo

    • ## BARPOS

    Toma la posición de la línea K.

    BARPOS, Returns the number of periods from the first K-line to the current one.
    
    
    Remarks:
    1.BARPOS returns the number of locally available K-line, counting from the data that exists on the local machine.
    2.The return value of the first K-line existing in this machine is 1.
    
    
    Example 1:LLV(L,BARPOS);        // Find the minimum value of locally available data.
    
    
    Example 2:IFELSE(BARPOS=1,H,0); // The current K-line is the first K-line that already exists in this machine, and it takes the highest value, otherwise it takes 0.
    
    • ## Los DAYBARPOS

    DAYBARPOS el actual K-line BAR es el K-line BAR del día.

    • ## PERÍODO

    El valor del período es el número de minutos.

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

    Fecha en la que se produjoFunción DATE, Obtener el año, mes y día del período desde 1900.

    Example 1:
    AA..DATE;                  // The value of AA at the time of testing is 220218, which means February 18, 2022
    
    • ## Tiempo

    Es el momento de tomar la línea K.

    TIME, the time of taking the K-line.
    
    
    Remarks:
    1.The function returns in real time in the intraday, and returns the starting time of the K-line after the K-line is completed.
    2.This function returns the exchange data reception time, which is the exchange time.
    3.The TIME function returns a six-digit form when used on a second period, namely: HHMMSS, and displays a four-digit form on other periods, namely: HHMM.
    4.The TIME function can only be loaded in periods less than the daily period, and the return value of the function is always 1500 in the daily period and periods above the daily period.
     5. It requires attention when use the TIME function to close a position at the end of the day
    (1).It is recommended to set the time for closing positions at the end of the market to the time that can actually be obtained from the return value of the K-line (for example: the return time of the last K-line in the 5-minute period of the thread index is 1455, and the closing time at the end of the market is set to TIME>=1458, CLOSEOUT; the signal of closing the position at the end of the market cannot appear in the effect test)
    (2).If the TIME function is used as the condition for closing the position at the end of the day, it is recommended that the opening conditions should also have a corresponding time limit (for example, if the condition for closing the position at the end of the day is set to TIME>=1458, CLOSEOUT; then the condition TIME needs to be added to the corresponding opening conditions. <1458; avoid re-opening after closing)
    
    
    Example 1:
    C>O&&TIME<1450,BK;
    C<O&&TIME<1450,SK;
    TIME>=1450,SP;
    TIME>=1450,BP;
    AUTOFILTER;
    // Close the position after 14:50.
    Example 2:
    ISLASTSK=0&&C>O&&TIME>=0915,SK;
    
    • ## Año

    Year.

    YEAR, year of acquisition.
    
    
    Remark:
    The value range of YEAR is 1970-2033.
    
    
    Example 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);                               // Take the highest price, lowest price, opening price, and closing price of the previous year
    Example 2:
    NN:=IFELSE(YEAR>=2000 AND MONTH>=1,0,1);
    
    • ## Mes

    Toma el mes.

    MONTH, returns the month of a period.
    
    
    Remark:
    The value range of MONTH is 1-12.
    
    
    Example 1:
    VALUEWHEN(MONTH=3&&DAY=1,C);                // Take its closing price when the K-line date is March 1
    Example 2:
    C>=VALUEWHEN(MONTH<REF(MONTH,1),O),SP;
    
    • ## DÍA

    Obtener el número de días en un período

    DAY, returns the number of days in a period.
    
    
    Remark:
    The value range of DAY is 1-31.
    
    
    Example 1:
    DAY=3&&TIME=0915,BK;                      // 3 days from the same day, at 9:15, buy it
    Example 2:
    N:=BARSLAST(DATE<>REF(DATE,1))+1;
    CC:=IFELSE(DAY=1,VALUEWHEN(N=1,O),0);      // When the date is 1, the opening price is taken, otherwise the value is 0
    
    • ## Hora

    Hour.

    HOUR, returns the number of hours in a period.
    
    
    Remark:
    The value range of HOUR is 0-23
    
    
    Example 1:
    HOUR=10;                                   // The return value is 1 on the K-line at 10:00, and the return value on the remaining K-lines is 0
    
    • ## MINUTO

    Minute.

    MINUTE, returns the number of minutes in a period.
    
    
    Remarks:
    1: The value range of MINUTE is 0-59
    2: This function can only be loaded in the minute period, and returns the number of minutes when the K-line starts.
    Example 1:
    MINUTE=0;                                 // The return value of the minute K-line at the hour is 1, and the return value of the other K-lines is 0
    Example 2:
    TIME>1400&&MINUTE=50,SP;                   // Sell and close the position at 14:50
    
    • ## DÍA DE LA SEMANA

    Consigue el número de la semana.

    WEEKDAY, get the number of the week.
    
    
    Remark:
    1: The value range of WEEKDAY is 0-6. (Sunday ~ Saturday)
    
    
    Example 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;                               // Automatically close positions at the end of the monthly delivery day
    Example 2:
    C>VALUEWHEN(WEEKDAY<REF(WEEKDAY,1),O)+10,BK;
    AUTOFILTER;
    
  • Función de juicio lógico

    • ## BARSTATUS

    Devuelva el estado de la posición para el período actual.

    BARSTATUS returns the position status for the current period.
    
    
    Remark:
    The function returns 1 to indicate that the current period is the first period, returns 2 to indicate that it is the last period, and returns 0 to indicate that the current period is in the middle.
    
    
    Example:
    A:=IFELSE(BARSTATUS=1,H,0);              // If the current K-line is the first period, variable A returns the highest value of the K-line, otherwise it takes 0
    
    • ## Entre

    Between.

    BETWEEN(X,Y,Z) indicates whether X is between Y and Z, returns 1 (Yes) if established, otherwise returns 0 (No).
    
    
    Remark:
    1.The function returns 1(Yse) if X=Y, X=Z, or X=Y and Y=Z.
    
    
    Example 1:
    BETWEEN(CLOSE,MA5,MA10);                // It indicates that the closing price is between the 5-day moving average and the 10-day moving average
    
    • ## BARSLASTCOUNT ## El último cuento

    BARSLASTCOUNT(COND) cuenta el número de períodos consecutivos que satisfacen la condición, contando hacia adelante desde el período actual.

    Remark:
     1. The return value is the number of consecutive non zero periods calculated from the current period
     2. the first time the condition is established when the return value of the current K-line BARSLASTCOUNT(COND) is 1
    
    
    Example:
    BARSLASTCOUNT(CLOSE>OPEN);
    //Calculate the number of consecutive positive periods within the current K-line
    
    • ## CROSS

    Función cruzada.

    CROSS(A,B) means that A crosses B from bottom to top, and returns 1 (Yes) if established, otherwise returns 0 (No)
    
    
    Remark:
    1.To meet the conditions for crossing, the previous k-line must satisfy A<=B, and when the current K-line satisfies A>B, it is considered to be crossing.
    
    
    Example 1:
    CROSS(CLOSE,MA(CLOSE,5));              // Indicates that the closing line crosses the 5-period moving average from below
    
    • ## CROSSDOWN

    Descenso

    CROSSDOWN(A,B): indicates that when A passes through B from top to bottom, it returns 1 (Yes) if it is established, otherwise it returns 0 (No)
    
    
    Remark:
    1.CROSSDOWN(A,B) is equivalent to CROSS(B,A), and CROSSDOWN(A,B) is easier to understand
    
    
    Example 1:
    MA5:=MA(C,5);
    MA10:=MA(C,10);
    CROSSDOWN(MA5,MA10),SK;               // MA5 crosses down MA10 to sell and open a position
    // CROSSDOWN(MA5,MA10),SK; Same meaning as CROSSDOWN(MA5,MA10)=1,SK;
    
    • ## CROSSUP

    Crossup.

    CROSSUP(A,B) means that when A crosses B from the bottom up, it returns 1 (Yes) if it is established, otherwise it returns 0 (No)
    
    
    Remark:
    1.CROSSUP(A,B) is equivalent to CROSS(A,B), and CROSSUP(A,B) is easier to understand.
    
    
    Example 1:
    MA5:=MA(C,5);
    MA10:=MA(C,10);
    CROSSUP(MA5,MA10),BK;                 // MA5 crosses MA10, buy open positions
    // CROSSUP(MA5,MA10),BK;与CROSSUP(MA5,MA10)=1,BK; express the same meaning
    
    • ## Todos

    Determinar si se satisface continuamente.

    EVERY(COND,N), Determine whether the COND condition is always satisfied within N periods. The return value of the function is 1 if it is satisfied, and 0 if it is not satisfied.
    
    
    Remarks:
    1.N contains the current K-line.
    2.If N is a valid value, but there are not so many K-lines in front, or N is a null value, it means that the condition is not satisfied, and the function returns a value of 0.
    3.N can be a variable.
    
    
    Example 1:
    EVERY(CLOSE>OPEN,5);                // Indicates that it has been a positive line for 5 periods
    Example 2:
    MA5:=MA(C,5);                       // Define a 5-period moving average
    MA10:=MA(C,10);                     // Define a 10-period moving average
    EVERY(MA5>MA10,4),BK;               // If MA5 is greater than MA10 within 4 periods, then buy the open position
    // EVERY(MA5>MA10,4),BK; has the same meaning as EVERY(MA5>MA10,4)=1,BK;
    
    • ## EXISTIR

    Determine si hay satisfacción.

    EXIST(COND, N) judges whether there is a condition that satisfies COND within N periods.
    
    
    Remarks:
    1.N contains the current K-line.
    2.N can be a variable.
    3.If N is a valid value, but there are not so many K-lines in front, it is calculated according to the actual number of periods.
    
    
    Example 1:
    EXIST(CLOSE>REF(HIGH,1),10);     // Indicates whether there is a closing price greater than the highest price of the previous period in 10 periods, returns 1 if it exists, and returns 0 if it does not exist
    Example 2:
    N:=BARSLAST(DATE<>REF(DATE,1))+1;
    EXIST(C>MA(C,5),N);              // Indicates whether there is a K-line that satisfies the closing price greater than the 5-period moving average on the day, returns 1 if it exists, returns 0 if it does not exist
    
    • ## Si

    Función de condición.

    IF(COND,A,B)Returns A if the COND condition is true, otherwise returns B.
    
    
    Remarks:
    1.COND is a judgment condition; A and B can be conditions or values.
    2.This function supports the variable circular reference to the previous period's own variable, that is, supports the following writing Y: IF(CON,X,REF(Y,1)).
    Example 1:
    IF(ISUP,H,L);                   // The K-line is the positive line, the highest price is taken, otherwise the lowest price is taken
    Example 2:
    A:=IF(MA5>MA10,CROSS(DIFF,DEA),IF(CROSS(D,K),2,0));     // When MA5>MA10, check whether it satisfies the DIFF and pass through DEA, otherwise (MA5 is not greater than MA10), when K and D are dead fork, let A be assigned a value of 2, if none of the above conditions are met, A is assigned a value of 0
    A=1,BPK;                                                // When MA5>MA10, the condition for opening a long position is to cross DEA above the DIFF
    A=2,SPK;                                                // When MA5 is not greater than MA10, use K and D dead forks as the conditions for opening short positions
    
    • ## IFELSE

    Función de condición.

    ` IFELSE(COND,A,B) devuelve A si la condición COND es verdadera, de lo contrario devuelve B.

    Las observaciones: 1.COND es una condición de juicio; A y B pueden ser condiciones o valores. 2.Esta función admite la referencia circular de la variable a la propia variable del período anterior, es decir, admite la siguiente escritura Y: IFELSE(CON,X,REF(Y,1)); Ejemplo 1: IFELSE ((ISUP,H,L); // La línea K es la línea positiva, se toma el precio más alto, de lo contrario se toma el precio más bajo Ejemplo 2: A:=IFELSE(MA5>MA10,CROSS(DIFF,DEA),IFELSE(CROSS(D,K,2,0)); // Cuando MA5>MA10, compruebe si satisface el DIFF y pasa a través de DEA, de lo contrario (MA5 no es mayor que MA10), cuando K y D son bifurcación muerta, asignar a A un valor de 2, si no se cumple ninguna de las condiciones anteriores, A se asigna un valor de 0 A=1,BPK; // Cuando MA5>MA10, la condición para abrir una posición larga es cruzar DEA por encima del DIFF A=2,SPK; // Cuando MA5 no es mayor que MA10, utilizar K y D tenedores muertos como el conditio


Contenido relacionado

Más contenido