Docteur MyLanguage

Auteur:Le petit rêve, Créé: 2022-06-30 18:24:06, mis à jour: 2024-02-06 17:36:19

[TOC] Je vous en prie.

img

MyLanguage est un langage de trading programmatique qui est compatible et amélioré avec MyLanguage. Le MyLanguage de FMZ Quant sera soumis à une vérification de syntaxe stricte. Par exemple, lors de l'utilisation de l'amélioration de la langue pour intégrer le code de langage JavaScript, un caractère d'espace supplémentaire après le%%L'opérateur provoquera une erreur à signaler.

  • Instructions de base

    • Le contrat

      Contrats de crypto-monnaie

      Contrats de crypto-monnaie

      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
      

      img

    • Variables

      Une variable est un espace ouvert dans la mémoire de l'ordinateur pour stocker des données.

      ouvre la première variable

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

      DansMyLanguage, il est facile de le distinguer de ladata volume:

      1. Données à valeur unique: Il n'y a qu'une seule valeur, par exemple:0, 1, 'abc'.
      2. Données de séquence: une séquence de données composée d'un ensemble de données à valeur unique, telles queClose(prix de clôture), oùClosecontient le prix de clôture den periods. [ 10.1 , 10.2 , 10.3 , 10.4 , 10.5 ...]

      Distinguer de type de variable

      1. Type de chaîne: il doit être enveloppé de ````, le type de chaîne n'est pas autorisé à être utilisé directement et doit être produit dans la vue avec la fonction.
      INFO(CLSOE>OPEN,'OK!');
      
      1. Types de valeurs: y compris les entiers, les nombres à virgule flottante (decimales).
      // integer
      int:=2;
      
      // decimal
      float:=3.1;
      
      1. Type booléen, avec 1 (pour vrai) ou 0 (pour faux): 1, 0, vrai ou faux. Par exemple:A:=1>0;Après l'exécution de ce code, la valeur deAest 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.
      

      Remarquez que lors du 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
      

      Dans un premier temps, leINFOles impressions de déclarations101Peut-être pas.0au début? La raison en est qu'il y a 100 lignes K initiales dans le backtest, et 100 lignes K ont déjà été exécutées, ce qui a été accumulé 100 fois. Le prix réel dépend du nombre de lignes K obtenues initialement.

      • Règles de dénomination

        Dans la plupart des systèmes, la dénomination des variables ne permet pas l'utilisation de mots réservés (noms de variables intégrés, noms de fonctions).Close, CEn outre, les nombres purs ou les nombres premiers ne sont pas autorisés. Enfin, il n'est pas permis d'être très long, et différents systèmes ont des restrictions de longueur différentes. En fait, vous n'avez pas à vous soucier de l'efficacité de l'analyse chinoise du système traditionnel. Je crois que MyLanguage est très convivial pour les Chinois. Pour les programmeurs expérimentés, il est recommandé d'utiliser les deux règles de nommage suivantes:

        1. Nom chinois
        // elegant output
        5-day moving average:=MA(C,5);
        
        1. Anglais + souligné
        // Output
        move_avg_5:=MA(C,5);
        

        Si vous préférez l'anglais, essayez de rendre la signification de vos variables aussi compréhensible que possible.A1, AAA, BBB... Croyez-moi quand vous allez revoir votre code d'indicateur dans quelques jours, vous serez très malheureux à cause de la perte de mémoire.

        Alors, à partir de maintenant, utilisez MyLanguage au maximum! J'espère qu'il peut devenir un outil puissant pour votre analyse et votre prise de décision.

    • Type de données

      Le type de données est un concept de base. Lorsque nous assignons des données claires à une variable par écrit, la variable devient également le type des données elles-mêmes.

        1. Type de valeur:
        1.2.3.1.1234.2.23456 ...
        
        1. Type de chaîne:
        '1' .'2' .'3' ,String types must be wrapped with ''
        
        1. Données de séquence:
        A collection of data consisting of a series of single-valued data
        
        1. Type booléen:

        Utilisation1représentetrueet0pourfalse.

        Exemple

        // 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');
        
    • Opérateur

      L'opération et le calcul utilisés pour exécuter le code d'indicateur sont simplement les symboles impliqués dans l'opération.

      • Opérateur d'affectation

        pour attribuer une valeur à une variable

          1. :

          :, représente l'affectation et la sortie au graphique (sous-graphe).

          Close1:Close;      // Assign Close to the variable Close1 and output to the figure
          
          1. :=

          :=, représente l'affectation, mais n'est pas produite sur le graphique (graphe principal, sous-graphe...), ni affichée dans le tableau de la barre d'état.

          Close2:=Close;     // Assign Close to the variable Close2
          
          1. ^^

          ^^Deux.^Les symboles représentent l'affectation, attribuent des valeurs aux variables et la sortie au graphique (graphique principal).

          lastPrice^^C;
          
          1. ..

          ..Deux..Les symboles représentent l'affectation, attribuent des valeurs aux variables et affichent les noms et les valeurs des variables dans le graphique, mais ne dessinent pas des images sur le graphique (image principale, sous-image...).

          openPrice..O
          
      • Opérateurs relationnels

        Les opérateurs relationnels sont des opérateurs binaires utilisés dans les expressions conditionnelles pour déterminer la relation entre deux données.

        Retour de valeur: type booléen, soittrue(1) oufalse(0).

          1. plus de>
          // Assign the operation result of 2>1 to the rv1 variable, at this time rv1=1
          rv1:=2>1;
          
          1. moins de<
          // Returns false, which is 0, because 2 is greater than 1
          rv3:=2<1;
          
          1. plus ou égal à>=
          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;
          
          1. inférieure ou égale à<=
          omitted here
          
          1. est égal à=
          A:=O=C;     // Determine whether the opening price is equal to the closing price.
          
          1. N'est pas égal à<>
          1<>2       // To determine whether 1 is not equal to 2, the return value is 1 (true)
          
      • Opérateurs logiques

        Retour de valeur: type booléen, soittrue(1) oufalse(0).

        1. La logique et&&, peut être remplacé parand, et les côtés gauche et droit de la et connexion doivent être établis en même temps.
        // 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
        
        1. Logique ou||, vous pouvez utiliserorpour remplacer les côtés gauche et droit du lien ou, un côté est vrai (vrai), l'ensemble est vrai (valeur de retour vrai).
        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
        
        1. ()l'opérateur, l'expression entre parenthèses sera évaluée en premier.
        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
        
      • Opérateurs arithmétiques

        Return value: numeric type
        

        Les opérateurs arithmétiques sont des opérateurs arithmétiques. C'est un symbole pour compléter les opérations arithmétiques de base (opérateurs arithmétiques), qui est un symbole utilisé pour traiter quatre opérations arithmétiques.

        • plus +

          A:=1+1;      // return 2
          
        • moins -

          A:=2-1;      // return 1
          
        • *multiplier *

          A:=2*2;      // return 4
          
        • Divisez

          A:=4/2;      // return 2
          
    • Les fonctions

      • Les fonctions

        Dans le monde de la programmation, une function est un morceau de code qui implémente une certaine fonction.

        function(param1,param2,...)
        
        • Composition:

          Le nom de la fonction (paramètre1, paramètre2,...), peut ne pas avoir de paramètres ou avoir plusieurs paramètres.MA(x,n);signifie revenir à la moyenne mobile simple dexdansnIl s'agit notamment de:MA()est une fonction,xetnsont les paramètres de la fonction.

          Lors de l'utilisation d'une fonction, nous devons comprendre la définition de base de la fonction, c'est-à-dire quelles données peuvent être obtenues en appelant la fonction. De manière générale, les fonctions ont des paramètres. Lorsque nous passons des paramètres, nous devons nous assurer que le type de données entrant est cohérent.MA(x,n);est interprété comme suit:

          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
          

          Ceci est très hostile pour les débutants, mais ensuite, nous allons disséquer la fonction en profondeur, en essayant de trouver un moyen rapide d'apprendre et d'utiliser la fonction.

      • Valeur de retour

        Pour apprendre des fonctions rapidement, nous devons d'abord comprendre un concept, il est appelé value de retour, Retour, comme son nom l'indique, signifie return back; La valeur représente value spécifique, alors la signification de la valeur de retour est: les données qui peuvent être obtenues.

        // 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.
        
      • Paramètres

        Deuxièmement, le deuxième concept important de la fonction est le paramètre, et différentes valeurs de retour peuvent être obtenues en passant dans différents paramètres.

        // 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);
        

        Le premier paramètreXdes variables ci-dessusma5, ma10estC(prix de clôture), en fait,Cest également une fonction (rend la séquence des prix de clôture de l'ouverture au présent), mais elle n'a pas de paramètres.MA()La fonction devient plus flexible à utiliser à travers les paramètres.

      • Comment apprendre

          1. Tout d'abord, nous devons comprendre ce qu'une fonction fait, c'est-à-dire quelles données cette fonction peut nous renvoyer.
          1. La dernière chose est de comprendre le type de la valeur retournée.
          1. En outre, nous devons connaître le type de données du paramètreMA(x,n), si vous ne connaissez pas le type de données du paramètrex, n, il ne sera pas en mesure d'obtenir la valeur de retour correctement.

        Dans l'introduction et l'utilisation des fonctions suivantes, suivez les trois principes ci-dessus.

    • Amélioration de la langue

      • MyLanguageetJavaScriptprogrammation mixte en langage

        %%
        // 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
        
        • scopeobjet

          Lescopel'objet peut ajouter des attributs et attribuer des fonctions anonymes aux attributs, et la fonction anonyme référencée par cet attribut peut être appelée dans la partie code de MyLanguage.

        • scope.getRefs(obj)fonction

          DansJavaScriptBloc de code, appelez lescope.getRefs(obj)fonction de retourner les données du passé dansobj object.

          LeJavaScriptcode emballé avec le code suivant:%% %%Je vais avoir leCLe Conseil a adopté leTEST(C)La fonction dans le code MyLanguage s'appelle prix de clôture. Lescope.getRefsCette fonction renverra tous les prix de clôture de ces données de ligne K.throw "stop"Pour interrompre le programme, la variablearrcontient le prix de clôture de la première barre seulement.throw "stop", il exécutera lereturnà la fin de laJavaScriptcode, et renvoie toutes les données de prix de clôture.

          %%
          scope.TEST = function(obj){
              var arr = scope.getRefs(obj)
              Log("arr:", arr)
              throw "stop"
              return
          }
          %%
          TEST(C);
          
        • scope.bars

          Accédez à toutes les barres de ligne K dans leJavaScriptUn bloc de code.

          LeTEST1 est une droite négative et 0 est une droite positive.

          %%
          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

          Dans leJavaScriptBloc de code, accédez à la barre actuelle.

          Calculer la moyenne des prix d'ouverture élevés et des prix de clôture bas.

          %%
          scope.TEST = function(){
              var bar = scope.bar
              var ret = (bar.Open + bar.Close + bar.High + bar.Low) / 4
              return ret
          }
          %%
          avg^^TEST;
          
        • scope.depth

          Accès aux données sur la profondeur du marché (carnet de commandes).

          %%
          scope.TEST = function(){
              Log(scope.depth)
              throw "stop"             // After printing the depth data once, throw an exception and pause
          }
          %%
          TEST;
          
        • scope.symbol

          Obtenez la chaîne de noms de la paire de négociation en cours.

          %%
          scope.TEST = function(){
              Log(scope.symbol)
              throw "stop"
          }
          %%
          TEST;
          
        • scope.barPos

          Prenez la position de la barre de la ligne K.

          %%
          scope.TEST = function(){
              Log(scope.barPos)
              throw "stop"
          }
          %%
          TEST;
          
        • scope.get_locals ((nom)

          Cette fonction est utilisée pour obtenir les variables dans la section de code de 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

          LecanTradeles marques d'attribut indiquent si la barre actuelle peut être échangée (si la barre actuelle est la dernière)

          Par exemple, en estimant que les données de marché sont imprimées lorsque la stratégie est dans un état où l'ordre peut être négocié

          %%
          scope.LOGTICKER = function() {
              if(exchange.IO("status") && scope.canTrade){
                  var ticker = exchange.GetTicker();
                  if(ticker){
                      Log("ticker:", ticker);
                      return ticker.Last;
                  }
              }
          }
          %%
          LASTPRICE..LOGTICKER;
          
      • Exemple d'application:

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

        Arrêtez la stratégie après avoir ouvert et fermé une position une fois.

    • Référence à plusieurs périodes

      Le système sélectionne automatiquement une période de ligne K sous-jacente appropriée et utilise ces données sous-jacentes pour synthétiser toutes les données de ligne K référencées afin d'assurer l'exactitude des données.

      • Utilisation:#EXPORT formula_name ... #ENDSi la formule n'est pas calculée juste pour obtenir des données de différentes périodes, vous pouvez aussi écrire une formule vide.

        Une formule vide est:

        #EXPORT TEST 
        NOP;
        #END           // end
        
      • Utilisation:#IMPORT [MIN,period,formula name] AS variable valueObtenir diverses données de la période définie (prix de clôture, prix d'ouverture, etc., obtenues par valeur variable).

        LeMINdans leIMPORTCommande signifieniveau minute.MyLanguage de la plateforme FMZ Quant, et uniquement leMINLe niveau deIMPORTcommand. Les périodes non standard sont maintenant prises en charge. Par exemple, vous pouvez utiliser#IMPORT [MIN, 240, TEST] AS VAR240pour importer des données telles que la ligne K de 240 minutes (4 heures).

        Exemple de code:

        // 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;
        
      • Il est nécessaire de faire attention lors de l' utilisationREF, LLV, HHVet d'autres instructions pour faire référence aux données lors de la référence à des données sur plusieurs périodes.

        (*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;
        

        Comparer la différence entreMIN5.REF1CetREF(MIN5.C, 1)On peut trouver:MIN5.REF1Cest la valeur du prix de clôture de l'avant-dernier BAR au moment actuel des données de la ligne K de 5 minutes.REF(MIN5.C, 1)est la période de la ligne K du modèle actuel (la période de backtest du code ci-dessus est réglée sur 1 minute, c'est-à-dire ```period: 1m``), le prix de clôture de la période de 5 minutes où se trouve l'avant-dernière BAR au moment actuel. Ces deux définitions sont différenciées et peuvent être utilisées au besoin.

    • Description du mode

      • Modèle de filtrage du signal d'une ouverture et d'un nivellement

        Dans le modèle, leAUTOFILTERLa fonction est écrite pour contrôler et réaliser le filtrage du signal d'une ouverture et d'une fermeture.

        Les instructions prises en charge par le modèle de filtrage: BK, BP, BPK, SK, SP, SPK, CLOSEOUT, etc. Les instructions avec les numéros de lot tels que BK ((5) ne sont pas prises en charge.

        Par exemple

        MA1:MA(CLOSE,5);
        MA2:MA(CLOSE,10);
        CROSSUP(C,MA1),BK;
        CROSSUP(MA1,MA2),BK;
        C>BKPRICE+10||C<BKPRICE-5,SP;
        AUTOFILTER;
        
        Comprehension:
        As in the above example, when AUTOFILTER is not set, the third row BK, the fourth row BK and the fifth row SP are triggered in sequence, and each K-line triggers a signal once. After opening the position, and closing the position, the model state is reset.      
        If AUTOFILTER is set, after triggering BK, only SP is triggered, other BK signals are ignored, and each K-line triggers a signal once.
        
      • Modèle de position d'augmentation et de diminution

        LeAUTOFILTERla fonction n'est pas écrite dans le modèle, ce qui permet des signaux d'ouverture ou de fermeture continus, qui peuvent augmenter ou diminuer les positions.

        Instructions prises en charge: BK(N), BP(N), SK(N), SP(N), CLOSEOUT, BPK(N), SPK(N), les ordres d'ouverture et de fermeture sans taille de lot ne sont pas pris en charge. (1)Le regroupement des instructions est pris en charge. (2) Lorsque plusieurs conditions d'instruction sont remplies en même temps, les signaux sont exécutés dans l'ordre dans lequel les instructions conditionnelles sont écrites. Par exemple:

        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);
        

        UtilisationTRADE\_AGAINIl est possible de faire la même ligne de commande, plusieurs signaux en succession.

        Comprehension:
        The above example is executed one by one, and the signal after execution is no longer triggered. Reset the model status after closing the position. A K -line triggers a signal once.
        
      • Modèle avec une ligne K et un signal

        Indépendamment du fait que la ligne K soit terminée, le signal est calculé en ordre en temps réel, c'est-à-dire que la ligne K est placée avant que l'ordre ne soit terminé; la ligne K est examinée à la fin.

        Par exemple:

        MA1:MA(CLOSE,5);
        MA2:MA(CLOSE,10);
        CROSSUP(MA1,MA2),BPK;    //The 5-period moving average crosses up, and the 10-period moving average goes long.
        CROSSDOWN(MA1,MA2),SPK;  //The 5-period moving average crosses down, and the 10-period moving average goes short.
        AUTOFILTER;
        
      • Un modèle de signaux multiples sur une ligne K

        Le modèle utilisemultsigpour contrôler et mettre en œuvre plusieurs signaux provenant d'une seule ligne K.

        Indépendamment du fait que la ligne K soit terminée, le signal est calculé en temps réel.

        Le signal n'est pas revu, il n'y a pas de disparition du signal et la direction du signal est toujours cohérente avec la direction de la position.

        Si plusieurs conditions de signal sont remplies dans une ligne K, elle peut être exécutée à plusieurs reprises.

        For example:
        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);
        

        MULTSIGpeut exécuter plusieurs lignes de commande dans une seule ligne K. Une ligne de commande n'est signalée qu'une seule fois.

        O<C,BK;            // These conditions may all be executed in a K-line Bar, but only one signal per line
        10+O<C,BK;         // Strategy plus TRADE_AGAIN(10);it can make multiple signals per line
        20+O<C,BK;
        40+O<C,BK;
        MULTSIG(1,1,10);
        

        Supplément: 1.Le modèle d'addition et de réduction des positions, deux modes d'un signal et d'une ligne K: passer un ordre au prix de clôture et passer un ordre au prix de l'ordre, sont tous deux pris en charge. 2.Le modèle d'addition et de réduction des positions prend également en charge l'ordre de plusieurs signaux provenant d'une seule ligne K. Le modèle d'addition et de réduction des positions, écrire lemultsigfonction pour réaliser plusieurs additions ou réductions multiples sur une ligne K.

    • Mode d'exécution

      img

      • Modèle de barre

        Le modèle Bar fait référence au modèle qui est exécuté après que le BAR actuel est terminé, et la négociation est exécutée lorsque le prochain BAR commence.

      • Modèle de tique

        Le modèle Tick signifie que le modèle est exécuté une fois pour chaque mouvement de prix et négocie immédiatement lorsqu'il y a un signal. Le modèle Tick ignore le signal du jour précédent (le signal du jour précédent est exécuté immédiatement le même jour), et le modèle Tick se concentre uniquement sur les données du marché actuel pour déterminer si le signal est déclenché.

    • Affichage du graphique

      • Indicateurs supplémentaires pour le graphique principal

        Utiliser l'opérateur^^, les indicateurs sont affichés sur le graphique principal tout en assignant des valeurs aux variables.

        MA60^^MA(C, 60);  // Calculate the average indicator with the parameter of 60
        

        img

      • Indicateurs supplémentaires pour le sous-diagramme

        Utiliser l'opérateur:, les indicateurs sont affichés sur le sous-diagramme tout en assignant des valeurs aux variables.

        ATR:MA(MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW)),26);    // Assign a value to the ATR variable, the ":" symbol is followed by the formula for calculating the ATR
        

        img

        Si vous ne voulez pas qu'il apparaisse sur le graphique principal ou le sous-graphique, utilisez l'opérateur ....

        MA60..MA(C, 60);  // Calculate the average indicator with the parameter of 60
        

        Vous pouvez utiliserDOTetCOLORREDpour définir le type de ligne et la couleur de la ligne, etc., en fonction des habitudes des utilisateurs familiarisés avec MyLanguage.

    • Problèmes communs

      Présentez leles problèmesles points fréquemment rencontrés dans le processus d'écriture des indicateurs, généralement les points auxquels il faut prêter attention lors de l'écriture (ajoutés en continu).

      • Remarquez le point-virgule;à la fin.

      • Notez que les mots clés du système ne peuvent pas être déclarés comme variables.

      • Notez que la chaîne utiliseles cotations uniques, par exemple: la chaîne'Open position'.

      • Nom de l'entreprise

        Nom de l'entreprise

        • // The Remark content(la méthode d'entrée peut être tapée en chinois et en anglais) signifie que le code n'est pas compilé pendant le processus d'exécution, c'est-à-dire que le contenu après//Nous l'utilisons habituellement pour marquer le sens du code, quand il est pratique pour la révision du code, il peut être rapidement compris et rappelé.

        • { Remark content }Commentaire de bloc.

          A:=MA(C,10);
          {The previous line of code is to calculate the moving average.}
          
        • (* Remark content *)Commentaire de bloc.

          A:=MA(C,10);
          (*The previous line of code is to calculate the moving average.*)
          
      • Résultats de l'analyse

        Lorsque vous écrivez du code, parce que la méthode d'entrée est souvent basculée entre le chinois et l'anglais, ce qui entraîne des erreurs de symbole.:Le Terminateur.;, virgule,, les crochets()Ces caractères dans différents états du chinois et de l'anglais ont besoin d'attention.

        Si vous utilisez Sogou, Baidu, ou Bing méthodes d'entrée, vous pouvez rapidement basculer entre le chinois et l'anglais en appuyant surshiftUne clé.

      • Logique sujette aux erreurs

        1. Au moins, pas moins, pas moins que: l'opérateur relationnel correspondant>=.
        2. Jusqu'à: l'opérateur relationnel correspondant<=.
      • Synchronisation du lancement de la stratégie

        Dans la stratégie à terme, s'il y a une position ouverte manuellement avant le démarrage du robot de stratégie, lorsque le robot démarre, il détecte les informations de position et les synchronise avec l'état de position réel. Dans la stratégie, vous pouvez utiliser leSP, BP, CLOSEOUTcommandes pour fermer la position.

        %%
        if (!scope.init) {
            var ticker = exchange.GetTicker();
            exchange.Buy(ticker.Sell+10, 1);
            scope.init = true;
        }
        %%
        C>0, CLOSEOUT;
        
      • Les positions bidirectionnelles ne sont pas prises en charge

        MyLanguage ne prend pas en charge le même contrat avec des positions longues et courtes.

  • Citation des données en ligne K

    • Ouvre

      Obtenez le prix d'ouverture du graphique de la ligne K.

      Prix d'ouverture

      Fonction: OPEN, abréviation de O

      Paramètres: aucun

      Explanation: Renvoie le prix d'ouverture de cette période

      Données de séquence

      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).
      
    • - Très haut.

      Obtenez le prix le plus élevé sur le graphique de la ligne K.

      Le prix le plus élevé

      Fonction: HIGH, abrégé H

      Paramètres: aucun

      Explanation: Retourner le prix le plus élevé de cette période

      Données de séquence

      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
      
    • Faible

      Obtenez le prix le plus bas sur le graphique de la ligne K.

      Le prix le plus bas

      Fonction: LOW, abrégé en L

      Paramètres: aucun

      Explanation: Retourner le prix le plus bas de cette période

      Données de séquence

      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
      
    • À proximité

      Obtenez le prix de clôture du graphique de la ligne K.

      Prix de clôture

      Fonction: CLOSE, abrégé en C

      Paramètres: aucun

      Explanation: Renvoie le prix de clôture de cette période

      Données de séquence

      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

      Obtenir le volume de négociation du graphique de ligne K.

      Volume des échanges

      Fonction: VOL, abrégé en V

      Paramètres: aucun

      Explanation: Retourne le volume des transactions de cette période

      Données de séquence

      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

      Prenons la position totale actuelle sur le marché des contrats à terme.

      OpenInterest:OPI;
      
    • REF

      Une citation.

      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.
      
    • Unité

      Trouvez l'unité de négociation du contrat de données.

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

      Spots de crypto-monnaie

      La valeur UNIT est 1.

      Futures sur crypto-monnaie

      La valeur UNIT est liée à la devise du contrat.

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

      Le prix de variation minimum du contrat de données.

      Take the minimum variation price of the data contract.
      Usage:
      MINPRICE; Take the minimum variation price of the loaded data contract.
      
    • Le prix de l'appareil

      Le prix de variation minimum d'un contrat de négociation.

      Take the minimum variation price of a trading contract.
      Usage:
      MINPRICE1; Take the minimum variation price of a trading contract.
      
  • Fonction de temps

    • Le BARPOS

      Prenez la position de la ligne 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.
      
    • Je ne sais pas.

      DAYBARPOS la ligne actuelle K-BAR est la ligne K-BAR du jour.

    • Période

      La valeur de la période est le nombre de minutes.

      1, 3, 5, 15, 30, 60, 1440
      
    • Date de mise en service

      La dateFonction DATE, Obtenez l'année, le mois et le jour de la période depuis 1900.

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

      Il est temps de prendre la ligne 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;
      
    • L'année

      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);
      
    • Le mois

      Prends le mois.

      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;
      
    • Journée

      Obtenez le nombre de jours dans une période

      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
      
    • Temps de travail

      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
      
    • Une minute

      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
      
    • Jour de la semaine

      Prends le numéro de la semaine.

      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;
      
  • Fonction de jugement logique

    • Les produits

      Retourner l'état de la position pour la période en cours.

      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 les deux

      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
      
    • Le dernier compte

      BARSLASTCOUNT(COND) compte le nombre de périodes consécutives qui satisfont à la condition, en comptant à partir de la période en cours.

      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
      
    • Les produits

      Fonction croisée.

      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
      
    • En bas de page

      Le croisement

      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;
      
    • Le 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
      
    • Tout le monde

      Déterminez si elle est satisfaite en continu.

      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;
      
    • Il existe

      Déterminez s'il y a une satisfaction.

      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

      Fonction de condition.

      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
      
    • Les États membres

      Fonction de condition.

      IFELSE(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 variable circular reference to the previous period's own variable, that is, supports the following writing Y: IFELSE(CON,X,REF(Y,1));
      Example 1:
      IFELSE(ISUP,H,L);                                             // The K-line is the positive line, the highest price is taken, otherwise the lowest price is taken
      Example 2:
      A:=IFELSE(MA5>MA10,CROSS(DIFF,DEA),IFELSE(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 conditio

Relationnée

Plus de