3.3 Comment mettre en œuvre des stratégies en M

Auteur:La bonté, Créé: 2019-06-25 12:08:47, Mis à jour: 2023-11-11 17:01:30

img

Comment mettre en œuvre des stratégies en langage M

Résumé

Dans l'article précédent, nous avons expliqué la prémisse de la réalisation de la stratégie de trading à partir des aspects de l'introduction du langage M, de la grammaire de base, de la méthode d'exécution du modèle et de la classification du modèle.

Module de stratégie

img

Pensez-y, comment construire un robot avec des pièces de Lego? Vous ne pouvez pas toujours de haut en bas ou de bas en haut, assembler pièce par pièce. Les gens avec un peu de bon sens savent qu'ils devraient mettre leurs têtes, bras, jambes, ailes, etc. ensemble, puis les combiner en un robot complet. Il en va de même pour écrire des programmes, écrire les fonctions requises dans un seul module de stratégie, puis combiner ces modules de stratégie individuels en une stratégie de trading complète. Ci-dessous, je vais énumérer quelques modules de stratégie courants:

img

Augmentation de l'étape

L'augmentation d'étape est le calcul du pourcentage du prix de clôture de la ligne K actuelle comparé à N périodes précédentes de différence de prix de clôture.

CLOSE_0:=CLOSE; //get the current K-line's closing price, and save the results to variable CLOSE_0. 
CLOSE_10:=REF(CLOSE,10); //get the pervious 10 K-lines' closing price, and save the results to variable CLOSE_10

(CLOSE_0-CLOSE_10)/CLOSE_10*100;//calculating the percentage of current K line's closing price compare with previous N periods of closing price's difference.

Nouveau prix élevé

Le nouveau prix le plus élevé est calculé en fonction du fait que la ligne actuelle K est supérieure au prix le plus élevé de N cycles.

HHV_10:=HHV(HIGH,10); //Get the highest price of latest 10 K-lines, which includes the current K-line.
HIGH>REF(HHV_10,1); //Judge whether the current K-line's highest price is greater than pervious K-lines' HHV_10 value.

Hausse des prix avec une augmentation massive du volume des transactions

Par exemple: si le prix de clôture de la ligne K actuelle est 1,5 fois le prix de clôture des 10 lignes K précédentes, ce qui signifie qu'en 10 jours, le prix a augmenté de 50%; et le volume de négociation a également augmenté de plus de 5 fois les 10 lignes K précédentes. on peut écrire:

CLOSE_10:=REF(CLOSE,10); //get the 10th K-line closing price
IS_CLOSE:=CLOSE/CLOSE_10>1.5; //Judging whether the current K Line closing price is 1.5 times greater than the value of CLOSE_10 

VOL_MA_10:=MA(VOL,10); //get the latest 10 K-lines' average trading volume
IS_VOL:=VOL>VOL_MA_10*5; //Judging whether the current K-line's trading volume is 5 times greater than the value of VOL_MA_10

IS_CLOSE AND IS_VOL; //Judging whether the condition of IS_CLOSE and IS_VOL are both true.

Marché de choc de prix étroit

Le marché de choc étroit signifie que le prix est maintenu dans une certaine fourchette au cours de la période récente. Par exemple: Si le prix le plus élevé en 10 cycles moins le prix le plus bas en 10 cycles, le résultat divisé par le prix de clôture actuel de la ligne K est inférieur à 0,05.

HHV_10:=HHV(CLOSE,10); //Get the highest price in 10 cycles(including current K-line)
LLV_10:=LLV(CLOSE,10); //Get the lowest price in 10 cycles(including current K-line)

(HHV_10-LLV_10)/CLOSE<0.05; //Judging whether the difference between HHV_10 and LLV_10 divided by current k-line's closing price is less than 0.05.

La moyenne mobile indique un marché haussier

La moyenne mobile indique la direction longue et courte, la ligne K soutenue ou résistée par la ligne moyenne mobile 5,10,20,30,60, La moyenne mobile indique le marché haussier ou l'ours. peut être écrit:

MA_5:=MA(CLOSE,5);  //get the moving average of 5 cycle closing price.
MA_10:=MA(CLOSE,10);//get the moving average of 10 cycle closing price.
MA_20:=MA(CLOSE,20);//get the moving average of 20 cycle closing price.
MA_30:=MA(CLOSE,30);//get the moving average of 30 cycle closing price.

MA_5>MA_10 AND MA_10>MA_20 AND MA_20>MA_30; //determine wether the MA_5 is greater than MA_10, and MA_10 is greater than MA_20, and MA_20 is greater than MA_30.

Prix élevés antérieurs et emplacements

Pour obtenir l'emplacement du prix élevé précédent et son emplacement, vous pouvez utiliser directement l'API FMZ Quant. peut être écrit:

HHV_20:=HHV(HIGH,20); //get the highest price of 20 cycle(including current K line)
HHVBARS_20:=HHVBARS(HIGH,20); //get the number of cycles from the highest price in 20 cycles to current K line
HHV_60_40:REF(HHV_20,40); //get the highest price between 60 cycles and 40 cycles.

Saut de l'écart de prix

L'écart de prix est le cas où les prix les plus élevés et les plus bas des deux lignes K ne sont pas connectés. Il se compose de deux lignes K, et l'écart de prix est le prix de référence des points de soutien et de pression dans le mouvement futur des prix. Lorsqu'un écart de prix se produit, on peut supposer qu'une accélération le long de la tendance avec la direction originale a commencé. on peut écrire:

HHV_1:=REF(H,1); //get the pervious K line's highest price
LLV_1:=REF(L,1); //get the pervious K line's lowest price
HH:=L>HHV_1; //judging wether the current K line's lowest price is greater than pervious K line's highest price (jump up)
LL:=H<LLV_1; //judging wether the current K line's highest price is greater than pervious K line's lowest price (jump down)
HHH:=L/REF(H,1)>1.001; //adding additional condition, the bigger of the price gap, the stronger the signal (jump up)  
LLL:=H/REF(L.1)<0.999; //adding additional condition, the bigger of the price gap, the stronger the signal (jump down)  
JUMP_UP:HH AND HHH; //judging the overall condition, whether it is a jump up
JUMP_DOWN:LL AND LLL; //judging the overall condition, whether it is a jump down

Indicateurs techniques communs

Moyenne mobile

img

D'un point de vue statistique, la moyenne mobile est la moyenne arithmétique du prix quotidien, qui est une trajectoire de prix tendance. Le système de moyenne mobile est un outil technique courant utilisé par la plupart des analystes. D'un point de vue technique, c'est un facteur qui affecte le prix psychologique des analystes techniques. Le facteur de prise de décision du trading de pensée est un bon outil de référence pour les analystes techniques.

MA_DEMO:MA(CLOSE,5);   // get the moving average of 5 cycle
MA_DEMO:EMA(CLOSE,15); // get the smooth moving average of 15 cycle
MA_DEMO:EMA2(CLOSE,10);// get the linear weighted moving average of 10 cycle
MA_DEMO:EMAWH(CLOSE,50); // get the exponentially weighted moving average of 50 cycle
MA_DEMO:DMA(CLOSE,100);  // get the dynamic moving average of 100 cycle
MA_DEMO:SMA(CLOSE,10,3); // get the fixed weight of 3 moving average of closing price in 10 cycle
MA_DEMO:ADMA(CLOSE,9,2,30); // get the fast-line 2 and slow-line 30 Kaufman moving average of closing price in 9 cycle.

Les bandes de Bollinger

img

Les bandes de Bollinger sont également basées sur le principe statistique. Le rail du milieu est calculé en fonction de la moyenne mobile de N jours, et les rails supérieurs et inférieurs sont calculés en fonction de l'écart type. Lorsque le canal BOLL commence à changer de large en étroit, ce qui signifie que le prix reviendra progressivement à la moyenne. Lorsque le canal BOLL change de étroit en large, cela signifie que le marché commencera à changer. Si le prix est en hausse à travers le rail supérieur, cela signifie que le pouvoir d'achat est amélioré. Si le prix en baisse traverse le rail inférieur, cela indique que le pouvoir de vente est amélioré.

Parmi tous les indicateurs techniques, la méthode de calcul des bandes de Bollinger est l'une des plus compliquées, qui introduit le concept d'écart type dans les statistiques, impliquant la trajectoire moyenne (MB ), la trajectoire supérieure (UP ) et la trajectoire inférieure (DN ). Heureusement, vous n'avez pas besoin de connaître les détails du calcul, vous pouvez l'utiliser directement sur la plateforme FMZ Quant comme suit:

MID:MA(CLOSE,100); //calculating moving average of 100 cycle, call it Bollinger Bands middle trajectory   
TMP2:=STD(CLOSE,100); //calculating standard deviation of closing price of 100 cycle.
TOP:MID+2*TMP2; //calculating middle trajectory plus 2 times of standard deviation, call it upper trajectory
BOTTOM:MID-2*TMP2; //calculating middle trajectory plus 2 times of standard deviation, call it lower trajectory

Indicateur MACD

img

L'indicateur MACD est une double opération de lissage utilisant des moyennes mobiles rapides (à court terme) et lentes (à long terme) et leur agrégation et séparation. Le MACD développé selon le principe des moyennes mobiles élimine le défaut que la moyenne mobile émet fréquemment de faux signaux, et conserve également l'effet de l'autre bon aspect. Par conséquent, l'indicateur MACD a la tendance et la stabilité de la moyenne mobile. Il a été utilisé pour étudier le moment de l'achat et de la vente de stocks et prédit les changements de prix des actions. Vous pouvez l'utiliser comme suit:

DIFF:EMA(CLOSE,10)-EMA(CLOSE,50); //First calculating the difference between short-term moving average and long-term moving average.
DEA:EMA(DIFF,10); //Then calculating average of the difference.

Ce qui précède est le module de stratégie couramment utilisé dans le développement de stratégies de trading quantitatives. En outre, il y en a beaucoup plus que cela. Grâce aux exemples de modules ci-dessus, vous pouvez également mettre en œuvre plusieurs modules de trading que vous utilisez le plus souvent dans le trading subjectif. Les méthodes sont les mêmes. Ensuite, nous avons commencé à écrire une stratégie de trading intraday viable.

Rédaction de stratégies

Dans le marché au comptant Forex, il existe une stratégie bien connue appelée HANS123. Sa logique est essentiellement de juger si le prix se brise à travers le prix le plus élevé ou le plus bas du nombre de lignes K après l'ouverture du marché

La logique de la stratégie

  • Prêt à entrer sur le marché après 30 minutes d'ouverture;

  • Le rail supérieur = 30 minutes de hauteur après ouverture;

  • Relèche inférieure = 30 minutes après ouverture;

  • Lorsque le prix dépasse la limite supérieure, acheter et ouvrir la position;

  • Lorsque le prix tombe en dessous de la barre inférieure, le vendeur ouvre la position.

  • Stratégie de négociation intraday, clôture avant clôture;

Code de stratégie

// Data Calculation
Q:=BARSLAST(DATA<>REF(DATA,1))+1; //Calculating the number of period from 
the first K line of the current trading day to current k line, and assign the results to N 
HH:=VALUEWHEN(TIME=0930,HHV(H,Q)); //when time is 9:30, get the highest price of N cycles, and assign the results to HH
LL:=VALUEWHEN(TIME=0930,LLV(L,Q)); //When time is 9:30, get the lowest price of N cycles, and assign the results to LL

//Placing Orders
TIME>0930 AND TIME<1445 AND C>HH,BK; //If the time is greater than 9:30 and lesser than 14:45, and the closing price is greater than HH, opening long position.
TIME>0930 AND TIME<1445 AND C<LL,SK; //If the time is greater than 9:30 and lesser than 14:45, and the closing price is lesser than LL, opening short position.
TIME>=1445,CLOSEOUT; //If the time is greater or equal to 14:45, close all position.

//Filtering the signals
AUTOFILTER;  //opening the filtering the signals mechanism

Pour résumer

Au-dessus, nous avons appris le concept du module de stratégie. Grâce à plusieurs cas de module de stratégie couramment utilisés, nous avons eu une idée générale des outils de programmation FMZ Quant, on peut dire que l'apprentissage de l'écriture de modules de stratégie et l'amélioration de la logique de programmation est une étape clé dans le trading quantitatif avancé.

Communiqué de la section suivante

Peut-être y a-t-il encore une certaine confusion pour certaines personnes, principalement à cause de la partie de codage. Ne vous inquiétez pas, nous avons déjà pensé à cela pour vous. Sur la plate-forme FMZ Quant, il y a un autre outil de programmation encore plus facile pour les débutants. C'est la programmation visuelle, apprenons-le bientôt!

Exercices après l'école

  1. Essayez de mettre en œuvre plusieurs modules de trading que vous utilisez le plus souvent dans le trading subjectif.

  2. Essayez de mettre en œuvre l'algorithme d'index KDJ en utilisant le langage M sur la plateforme FMZ Quant.


Plus de