Le langage M est un ensemble de fonctions programmatiques qui s'étendent depuis les premiers indicateurs techniques de négociation d'actions.
Il adopte le mode de construction de " petite grammaire, grande fonction ", ce qui améliore considérablement l'efficacité de la programmation. L'écriture de stratégie de plus de 100 phrases dans d'autres langues peut être compilée avec seulement quelques lignes dans les langages M. La bibliothèque de fonctions statistiques financières et la structure de données en conjonction avec l'outil FMZ Quant peuvent également prendre en charge une logique de trading complexe.
Afin de vous aider à comprendre rapidement les connaissances clés de cette section, avant d'introduire le langage FMZ Quant M, nous allons d'abord avoir une compréhension préliminaire du concept de nom de cette section.
Position longue ouverte: si aucune position n'existe actuellement et que le prix de clôture est supérieur à la moyenne mobile à court terme, que le prix de clôture est supérieur à la moyenne mobile à long terme et que la moyenne mobile à court terme est supérieure à la moyenne mobile à long terme et que la moyenne mobile à long terme est en hausse.
Position courte ouverte: si aucune position n'existe actuellement et que le prix de clôture est inférieur à la moyenne mobile à court terme, que le prix de clôture est inférieur à la moyenne mobile à long terme et que la moyenne mobile à court terme est inférieure à la moyenne mobile à long terme et que la moyenne mobile à long terme est en baisse.
Fermer une position longue: si vous détenez actuellement une position longue et que le prix de clôture est inférieur à la moyenne mobile à long terme, ou que la moyenne mobile à court terme est inférieure à la moyenne mobile à long terme, ou que la moyenne mobile à long terme est en baisse.
Fermeture de position courte: si la position courte est maintenue en cours et que le prix de clôture est supérieur à la moyenne mobile à long terme, ou que la moyenne mobile à court terme est supérieure à la moyenne mobile à long terme, ou que la moyenne mobile à long terme est en hausse.
Si vous l'écrivez en langage M, ce sera:
MA10:=MA(CLOSE,10); // Get the 10-cycle moving average of the latest K-line and save the result in variable MA10
MA50:=MA(CLOSE,50); // Get the 50-cycle moving average of the latest K-line and save the result in variable MA50
MA10_1:=REF(MA10,1); //Get the 10-cycle moving average of the pervious K line and save the result to variable MA10_1
MA50_1:=REF(MA50,1); //Get the 50-cycle moving average of the pervious K line and save the result to variable MA50_1
MA10_2:=REF(MA10,2); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10_2
MA50_2:=REF(MA50,2); //Get the 50-cycle moving average of the latest K line and save the result to variable MA50_2
MA50_ISUP:=MA50>MA50_1 AND MA50_1>MA50_2; //Determine whether the current 50-line moving average of the K line is rising
MA50_ISDOWN:=MA50<MA50_1 AND MA50_1<MA50_2; //Determine whether the current 50-line moving average of the K line is falling
CLOSE>MA10 AND CLOSE>MA50 AND MA10>MA50 AND MA50_ISUP,BK; //open long position
CLOSE<MA10 AND CLOSE<MA50 AND MA10<MA50 AND MA50_ISUP,SK; //open short position
CLOSE<MA50 OR MA10<MA50,SP;//close long position
CLOSE>MA50 OR MA10>MA50,BP;//close short position
Pour écrire une stratégie de trading complète, vous aurez besoin de: acquisition de données, calcul de données, calcul logique et placement d'ordres. Comme indiqué ci-dessus, dans l'ensemble du code, une seule API est utilisée pour obtenir les données de base, qui est la " CLOSE " dans les première et deuxième lignes ; puis la première à la neuvième ligne sont les parties de calcul des données; Les lignes 11 à 14 sont les calculs logiques et la partie de placement de l'ordre.
Notez que les MA10, MA50, MA10_1, MA50_1, MA10_2, et MA50_2 sont des variables; dans la première à la neuvième ligne, le " := " est un signe d'affectation, et les données à droite du signe d'affectation sont affectées à la variable à gauche du signe d'affectation; le
Les données de base (prix d'ouverture, prix le plus élevé, prix le plus bas, prix de clôture, volume) sont une partie indispensable du trading quantitatif. Pour obtenir les dernières données de base de la stratégie, il vous suffit d'appeler l'API du FMZ Quant. Si vous voulez obtenir les données de base du prix historique, vous pouvez utiliser " REF ", par exemple: REF (CLOSE, 1) est pour obtenir le prix de clôture d'hier.
Les variables peuvent être modifiées. Le nom d'une variable peut être compris comme un nom de code. Son nom est pris en charge par des lettres, des chiffres et des lignes en anglais. Cependant, la longueur doit être contrôlée à 31 caractères. Les noms de variables ne peuvent pas être répétés avec un autre, ne peuvent pas être dupliqués avec des noms de paramètres, ne peuvent pas être répétés avec des noms de fonction (API ), et chaque instruction doit se terminer par un point-virgule. Écrire des commentaires après le " // ". Comme indiqué ci-dessous:
INT:=2; //Integer type
FLOAT:=3.1; //Floating point
ISTRUE:=CLOSE>OPEN; //Boolean type
L'affectation de la variable signifie que la valeur à droite du signe d'affectation est donnée à la variable à gauche. Il existe quatre types d'affectations, qui peuvent contrôler si la valeur est affichée sur le graphique ou la position de l'affichage.
CC1: C; //Assign the closing price to the variable CC1 and display it in the sub-chart
CC2:=C; //Assign the closing price to variable CC2, but not display in the status bar and chart
CC3^^C; //Assign the closing price to the variable CC3 and display it in the main chart
CC4..0; //Assign the closing price to the variable CC4 and display it in the status bar, but not in the chart
Il existe plusieurs types de données dans le langage M, dont les plus courants sont les types numériques, les types de chaîne et les types booléens. Le type numérique sont les nombres, y compris les entiers, les décimales, les nombres positifs et négatifs, etc., tels que: 1, 2, 3, 1.1234, 2.23456...; le type de chaîne peut être compris comme du texte, chinois, anglais, les nombres peuvent également être des chaînes, telles que:
Les opérateurs relationnels, comme leur nom l'indique, sont des opérateurs utilisés pour comparer la relation de deux valeurs. Ils sont égaux à, supérieurs à, inférieurs à, supérieurs ou égaux à, inférieurs ou égaux à, non égaux à, comme indiqué ci-dessous:
CLOSE = OPEN; //when closing price equals to opening price, return 1 (true), otherwise return 0 (false)
CLOSE > OPEN; //when closing price greater than opening price, return 1 (true), otherwise return 0 (false)
CLOSE < OPEN; //when closing price less than opening price, return 1 (true), otherwise return 0 (false)
CLOSE >= OPEN; //when closing price greater than or equal to opening price, return 1 (true), otherwise return 0 (false)
CLOSE <= OPEN; //when closing price less than or equal to opening price, return 1 (true), otherwise return 0 (false)
CLOSE <> OPEN; //when closing price is not equal to opening price, return 1 (true), otherwise return 0 (false)
Les opérations logiques peuvent joindre des énoncés de type booléen séparés dans l'ensemble, les plus couramment utilisés sont " AND " et " OR ". Supposons qu'il y ait deux valeurs de type booléen,
AA:=2>1; //return true
BB:=4>3; //return true
CC:=6>5; //return true
DD:=1>2; //return false
Veuillez faire attention:
" AND " est lorsque toutes les conditions sont
"OU" signifie dans toutes les conditions, tant que l'une des conditions est
" AND " peut être écrit comme " && ", et " OR " peut être écrit comme ".
Il n'y a pas de différence entre les opérateurs arithmétiques (" +
AA:=1+1; //the result is 2
BB:=2-1; //the result is 1
CC:=2*1; //the result is 2
DD:=2/1; //the result is 2
S'il y a une expression 100*(10-1)/(10+5, quelle étape le programme calcule-t-il en premier?
1, s'il s'agit du même niveau de fonctionnement, il est généralement calculé de gauche à droite. 2, s'il y a addition et soustraction, et multiplication et division, calculer d'abord la multiplication et la division, puis les addition et soustraction. 3, s'il y a des crochets, calculer d'abord l'intérieur des crochets. 4, si la loi de facilité d'utilisation est respectée, la loi peut être utilisée pour le calcul.
Il en va de même pour le langage M, comme indiqué ci-dessous:
100*(10-1)/(10+5) //the result is 60
1>2 AND (2>3 OR 3<5) //the result is false
1>2 AND 2>3 OR 3<5 //the result is true
Dans le langage M de l'outil FMZ Quant, il existe deux modes d'exécution du programme, à savoir le mode de prix de clôture et le mode de prix en temps réel.
S'il s'agit d'une stratégie de négociation intraday, vous devez utiliser la fonction de temps " TIME " lorsque vous devez fermer la position à la fin. Cette fonction est au-dessus du deuxième cycle et en dessous du cycle du jour, indiquée sous la forme de quatre chiffres: HHMM (1450 - 14 : 50).
CLOSE>OPEN && TIME<1450,BK; //if it is a positive k-line and the time is less than 14:50, opening position.
TIME>=1450,CLOSEOUT; //if the time is beyond 14:50, closing all position.
Il existe deux types de classification de modèle dans le langage M: le modèle non filtrant et le modèle filtrant. Ceci est en fait très bien compris: le modèle non filtrant permet des signaux d'ouverture ou de fermeture continus, qui peuvent être utilisés pour ajouter et réduire les positions. Le modèle filtrant ne permet pas des signaux d'ouverture ou de fermeture continus, c'est-à-dire que lorsque le signal d'ouverture apparaît, le signal d'ouverture ultérieur sera filtré jusqu'à ce que le signal de fermeture apparaisse. L'ordre du modèle non filtrant est: position ouverte - position fermée - position ouverte - position fermée - position ouverte...
Ce qui précède est le contenu du démarrage rapide du langage M, maintenant vous pouvez programmer votre propre stratégie de trading maintenant. Si vous avez besoin d'en écrire une plus complexe, vous pouvez vous référer à la documentation de l'API du langage M de la plateforme FMZ Quant, ou directement consulter le service client officiel pour l'écrire pour vous.
Le trading intraday est également un mode de trading populaire. Cette méthode ne maintient pas la position du jour au lendemain. Par conséquent, elle est soumise à un faible risque de volatilité du marché. Une fois que des conditions de marché défavorables se produisent, elle peut être ajustée à temps. Dans la section suivante, nous vous proposerons d'écrire une stratégie de trading intraday réalisable.