Créer un robot de trading algorithmique les bases de l'écriture Un conseiller expert en MQL4

Les marchés financiers mondiaux vous offrent un énorme potentiel de profits et pertes. Il existe toujours un potentiel de profit sur le marché, car vous pouvez placer des transactions dans les deux sens. Que votre position soit haussière ou baissière, le trader a toujours la possibilité de gagner de l'argent, tout comme la possibilité de perdre.

Bien trop souvent, les émotions, les pièges psychologiques et la discipline mentale entravent les profits et en sont les principales raisons. 95% (ou plus) de tous les nouveaux opérateurs perdent tout leur capital d’investissement le premier mois. 

Utiliser un robot de trading à algorithme Expert Advisor dans Meta Trader écrit en langage MQL4 constitue un moyen d'accéder au marché via un code, ce qui permet de supprimer les émotions de la photo et de ne travailler qu'avec les chiffres et la logique de votre programme.. 

Supprimer les émotions de l'équation est une mesure, mais cela ne signifie pas que les robots ne peuvent pas perdre. En fait, même les grandes banques d’investissement ont dû débrancher leurs robots de négociation avant que la perte ne devienne fatale. En 2013, Goldman Sachs avait de graves erreurs dans ses algorithmes de négociation qui coûtaient 100 millions de dollars.

Vous devez être conscient avant de continuer avec ce guide et même d’envisager d’utiliser votre argent réel et durement gagné, que tu peux perdre tout votre dépôt dans votre compte de courtage à partir de votre code (et peut-être dans le pire des cas plus avec certains courtiers si des frais supplémentaires s'appliquent)

En fin de compte, vous êtes responsable des métiers, même si le code du programme les place pour vous. Bien que la perte soit une possibilité, vous pouvez également multiplier le compte et le faire croître de façon exponentielle pendant que vous dormez.. 

Si vous aimez exécuter complètement le pilote automatique, cela pourrait être réalisé sans aucune interaction. Vous pouvez littéralement faire de l'argent de manière passive tout en continuant votre vie de tous les jours. 

Cette stratégie de trading totalement mains libres est ne pas Je ne fais jamais la promotion de celui que j’ai utilisé et que j’ai trouvé profitable. Contrôler un robot actif et les métiers en cours, ainsi que garder un œil sur le calendrier et les événements économiques, est très différent de le laisser déchaîner et d’espérer le meilleur. Les victoires peuvent être épiques, mais les pertes inattendues bien plus grand.

Installation de MQL4

S'il vous plaît télécharger MT4 à partir de leur site web et l'installer sur votre machine.

  • Utilisateurs Windows
  • utilisateurs macOS
  • Utilisateurs de Linux

Une fois que MT4 est en cours d'exécution, vous aurez besoin d'un compte auprès d'un courtier prenant en charge MT4. Ils pourront alors vous donner vos identifiants de connexion MT4. 

Tous les courtiers proposeront un compte de démonstration et nous vous encourageons à toujours utiliser ce compte pour écrire et tester votre logiciel..

Une fois que vous avez configuré MT4 sur votre bureau, nous pouvons continuer à créer notre propre robot de trading à algorithme Expert Advisor..

Comment écrire un robot

Il existe de nombreuses langues qui conviendraient pour écrire un robot d'échange d'algorithmes à partir de zéro, mais les complications que vous rencontrerez sont en fait l'utilisation de l'API pour diriger l'accès au marché que votre courtier en valeurs fournira - voilà comment vous allez vous permettre de le faire. placer les ordres sur les marchés financiers. 

Le traitement des données de marché pourrait être réalisé dans une multitude de langues, et probablement plus rapidement que le MT4 MQL4 ne peut effectuer des tests en arrière (les tests en arrière sont un moyen de tester votre robot algorithmique; nous en parlerons plus tard). Pour des raisons de facilité de fonctionnalité et de prise en charge générale des logiciels financiers, je vous recommande vivement d'utiliser MQL4 (MetaQuotes Language 4), la langue maternelle de MetaTrader 4, pour écrire votre robot de trading à algorithme..

Syntaxe de MQL4

La forme de MQL4 est similaire à PHP, C, C ++ ou VBScript. Vous trouverez ci-dessous un exemple de fonction qui sera appelée à chaque tick de données de marché:

void OnTick () if (Bars<100 || IsTradeAllowed()==false) return; if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();  else  CheckForClose();  

Nous vérifions ici si suffisamment de données de marché ont été chargées avec Les bars < 100. MQL4 définit des variables prédéfinies telles que Bars (qui contient le nombre de barres chargées dans le graphique). 

De plus, nous vérifions avec un ou || conditionnel pour IsTradeAllowed (). Ceci est une fonction de vérification pour vérifier que le contexte de négociation n'est pas occupé.

Des éléments de MQL4 tels que ces variables prédéfinies et des fonctions d’exploitation de graphique telles que Symbol () font de l’écriture de votre stratégie une promenade dans le parc. C’est pourquoi il est vraiment préférable de coder les robots de négociation d’algorithmes dans MQL4 par rapport à d’autres langages.

Je vous recommande de consulter la référence MQL4 chaque fois que vous avez le temps de vous familiariser avec l’utilisation de MQL4 pour mieux répondre à vos besoins..

Modification du code MQL4 dans MetaEditor

Je recommande d'utiliser l'EDI intégré MetaEditor fourni avec la plate-forme de trading MT4. Pour entrer dans l'éditeur, cliquez avec le bouton droit de la souris sur un expert existant dans le volet de navigation de gauche et sélectionnez modifier du menu.

MetaEditor de MT4 s'ouvrira ensuite et vous pourrez créer un nouveau fichier. Ceci offre la coloration syntaxique et le débogage de l’utilisateur. 

Important: Vous devrez compiler vos fichiers mq4 en conseillers experts ex4 à l'aide de MetaEditor si vous les éditez dans un éditeur externe. Il est donc essentiel de se familiariser avec MetaEditor..

Notre algorithme

Pour notre stratégie, nous allons commencer à utiliser une base de soutien et de résistance du SMA (Smooth Moving UNEverage). Le SMA peut prédire un signal d’entrée / sortie haussier ou baissier. La moyenne mobile lissée nous aide à réduire le bruit du marché et nous permet de voir plus clairement la direction de l'évolution des prix.

Que ce soit dans une tendance haussière ou baissière, le SMA peut se comporter comme un support ou une résistance, selon l’orientation. Lorsque le prix augmente, le SMA se comportera comme un plancher de soutien et, lorsque le prix baissera, et inversement, comme une résistance / un plafond..

Base pour l'entrée

Lorsque nous traçons deux SMA de périodes différentes, l'une d'une période de 40 ans et l'autre d'une période de 100 ans, nous pouvons voir comment ils se croisent et créer une base de saisie. Comme nous l'avons mentionné précédemment, lorsque le SMA est inférieur au prix (inférieur au prix de clôture), nous le considérons comme une base pour soutien, et lorsque le SMA est supérieur au prix (supérieur au prix de clôture), nous considérons cela comme une ligne de la résistance

Ainsi, dans le code, nous commençons par ce qui suit pour créer une méthode permettant de vérifier le croisement des entrées afin de déterminer ultérieurement notre base de saisie:

// + --------------------------------------------------- ------------------- + // | Vérifier le croisement des entrées | // + --------------------------------------------------- ------------------- + int CheckForCross (double entrée1, double entrée2) static int previous_direction = 0; static int current_dirction = 0; // Direction vers le haut = 1 if (input1> input2) current_direction = 1;  // Down Direction = 2 if (input1 < input2) current_direction = 2;  // Detect a direction change if(current_direction != previous_direction) previous_direction = current_dirction; return (previous_direction);  else  return (0);   

Maintenant, nous pouvons calculer notre SMA en utilisant la méthode de l’indicateur technique iMA fourni par MQL4 et l’exécuter via notre CheckForCross fonction pour voir s’il ya eu une croix comme celle-ci:

shortSma = iMA (NULL, 0, PeriodOne, 0, MODE_SMMA, PRICE_CLOSE, 0); longSma = iMA (NULL, 0, période deux, 0, MODE_SMMA, PRICE_CLOSE, 0); // Vérifie s'il y a une croix sur cette coche des deux SMA. Int isCrossed = CheckForCross (shortSma, longSma); 

Ici nous utilisons le MODE_SMMA nous rendre le Smooth Moving UNEen moyenne du iMA méthode de l'indicateur technique pour notre méthode de lissage choisie. 

Si vous souhaitez utiliser une autre méthode de lissage, vous avez le choix entre plusieurs options: Simple, Exponentielle et Linéaire..

Comme pour tout support et toute résistance, la méthodologie de trading standard fonctionne ici: acheter du support et vendre de la résistance

Donc, pour notre algorithme, nous allons faire exactement cela. Lorsqu'il y a un croisement dans un sens ou dans l'autre, nous allons appliquer le sens approprié des échanges et entrer sur le marché..

f (isCrossed == 1) ticket = OrderSend (Symbol (), OP_BUY, LotsOptimized (), Ask, 3,0,0, "Double SMA Crossover", MAGICNUM, 0, Bleu); if (ticket> 0) if (OrderSelect (ticket, SELECT_BY_TICKET, MODE_TRADES)) Print ("ACHETER la commande ouverte:", OrderOpenPrice ());  else Print ("Erreur lors de l’ouverture de BUY Order:", GetLastError ()); retourner (0);  if (isCrossed == 2) ticket = OrderSend (Symbol (), OP_SELL, LotsOptimized (), Ask, 3,0,0, "Double SMA Crossover", MAGICNUM, 0, Bleu); if (ticket> 0) if (OrderSelect (ticket, SELECT_BY_TICKET, MODE_TRADES)) Print ("SELL Order Opened:", OrderOpenPrice ());  else Print ("Erreur lors de l’ouverture de la commande SELL:", GetLastError ()); retourner (0); 

Ici nous vérifions le retour du CheckForCross fonction que nous avons définie avant, après l'avoir chargée avec nos deux SMA définis par le iMA indicateur technique.

Nous utilisons OrderSend, qui est fourni par MQL4, pour ouvrir le commerce. Comme meilleure pratique, le résultat est stocké dans la billet variable et ensuite vérifié pour une valeur de retour positive afin de gérer toute erreur qui aurait pu être signalée du côté du courtier.

Base de sortie

Comme pour la base de saisie (sauf dans le cas contraire), lorsque le SMA crée une croix mortelle, nous pouvons utiliser ce signal pour la fermeture de notre transaction, si des transactions sont ouvertes. La logique pour cela s’écrirait ainsi:

// Obtenir le total des commandes en cours total = OrdersTotal (); // Gérer les commandes en cours pour les critères de sortie pour (cnt = 0; cnt < total; cnt++) OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) // Look for long positions if(OrderType()==OP_BUY) // Check for Exit criteria on buy - change of direction if(isCrossed == 2) OrderClose(OrderTicket(), OrderLots(), Bid, 3, Violet); // Close the position return(0);   else //Look for short positions - inverse of prior conditions  // Check for Exit criteria on sell - change of direction if(isCrossed == 1) OrderClose(OrderTicket(), OrderLots(), Ask, 3, Violet); // Close the position return(0);    

Ici nous entrons dans un pour boucle pour parcourir toutes les commandes en cours, bien qu’à présent nous ne négocions qu’une transaction à la fois, ce qui nous permet de nous développer à l’avenir et d’avoir plusieurs transactions ouvertes si nous estimons en avoir besoin.

Cela facilite également l’utilisation de la méthode OrderSelect, car nous pouvons utiliser le cnt variable de notre pour boucle. 

Une fois à l'intérieur de l'itération, nous examinons simplement le type de commande actuel (recherche d'un Acheter OP_BUY ou Vendre OP_SELL ordre) et ensuite appliquer la logique conditionnelle du retour de notre CheckForCross méthode.

Ajout de la gestion de l'argent

À l’heure actuelle, notre algorithme est simple et repose sur une base d’entrée et de sortie de métiers, mais il est tout à fait dangereusement stupide en ce qui concerne la gestion de fonds. Afin de garder le risque sous contrôle, nous ne placerons qu'un cinquième des actions négociables sur chaque transaction. Nous devons donc en tenir compte dans notre algorithme.. 

lot = NormalizeDouble ((AccountFreeMargin () / 5) /1000.0,1); si (beaucoup<0.1) lot=0.1; return(lot);

Cela signifie que si vous avez 10 000 $ dans le compte, nous négocions avec un cinquième à la fois (2 000 $), de sorte que le script ne placera qu'une transaction avec un plus petit lot de 0,1 ou 0,2, par exemple, basé sur celui-ci. cinquième calcul. 

Nous utilisons AccountFreeMargin et NormalizeDouble pour générer cette taille de lot. S'il est calculé en dessous de la taille de lot minimale de 0.1, nous le définirons à 0.1..

Au fur et à mesure que le compte grandit (ou diminue!), L'exposition ne sera fixée qu'à un cinquième des fonds propres du compte. Cela signifie qu'une surexposition d'un montant fixe (par exemple, la négociation d'un lot fixe spécifique sur un compte de taille quelconque) ne peut théoriquement pas se produire, même si le risque d'appel de marge lié à la sur-négociation est supprimé ou considérablement réduit.. 

L'appel de marge est un risque très réel si le marché bouge contre vous avant de revenir en raison d'un pic / fluctuation alors que vous n'êtes pas là pour déposer plus de fonds..

En termes simples, la taille du lot de la transaction sera calculée dynamiquement par notre script pour répondre à la taille de l'équité. Le potentiel de profits de plus en plus importants est donc bien réel. 

Remarque: Une fonctionnalité intéressante pourrait être de fournir un paramètre pour plafonner le pool échangeable. Par exemple, si vous souhaitiez uniquement trader avec 1 000 USD de votre compte, quelle que soit la marge disponible, vous pouvez définir le négociable disponible sur seulement 1 000 USD plutôt que la taille de votre compte.. 

Personnellement, j’utilise toujours des fonctionnalités de ce type lors de la mise en production de nouveaux scripts afin de réduire mon exposition aux risques, jusqu’à ce que je sois vraiment sûr que le script fonctionne suffisamment pour pouvoir disposer de plus de fonds.. 

Par programme, cela nécessite un paramètre et une légère modification de l’exemple de code ci-dessus pour vérifier cette variable plutôt que le AccountFreeMargin () valeur.

Seuil de rentabilité

De plus, nous tenterons de réaliser certaines situations d’équilibre, ce qui signifie que si le marché a changé contre nous pour créer une perte substantielle à partir de l’ouverture, nous cherchons à sortir avec une perte minimale et au moins à un seuil d’équilibre afin de conserver notre capital..

Ceci peut être réalisé en surveillant la perte de notre commerce et notre relation avec le prix d'ouverture. Si la direction change et que nous négocions nos transactions, nous pouvons tenter de les clôturer le plus près possible du prix d'entrée:

 bool BreakEven (int MN) int Ticket; for (int i = OrdersTotal () - 1; i> = 0; i--) OrderSelect (i, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol () == Symbol () && OrderMagicNumber () == MN) Ticket = OrderModify (OrderTicket (), OrderOpenPrice (), OrderOpenPrice (), OrderTakeProfit (), 0, Vert); si (Ticket < 0) Print("Error in Break Even : ", GetLastError()); break;   return(Ticket); 

Ce qui précède utilise OrderModify pour tenter de définir le stop loss sur le prix d'ouverture de la commande. Il s’agit d’une méthode simple mais simple pour garantir que nous nous retirons lorsque le prix revient à notre prix d’entrée. Ceci n'est appliqué que lorsque le profit non réalisé actuel est en perte.

Ajout d'une marge de rentabilité

Une marge de rentabilité pourrait être ajoutée en ajoutant simplement à la OrderOpenPrice méthode comme suit:

Ticket = OrderModify (OrderTicket (), OrderOpenPrice (), OrderOpenPrice () + 10, OrderTakeProfit (), 0, Vert);

Pour cet exemple, nous permettons une différence de 10 points dans notre entrée en fermeture via stop limit.

Remarque: Il convient de vérifier la direction du commerce pour cette méthode, à savoir si elle doit être ajoutée ou soustraite du prix d'entrée selon qu'il s'agit d'une position d'achat ou de vente..

Une autre façon de s’assurer que nos gains ne sont pas perdus est d’utiliser un arrêt de fuite, ce qui sera discuté en détail dans un autre guide..

Le script entier

Voici la liste complète de nos experts. Nous disposons de plusieurs paramètres, tels que le niveau de prise de profit, le stop loss et les périodes SMA.. 

N'hésitez pas à jouer avec les paramètres pour voir ce qui fonctionne le mieux pour votre situation commerciale et ajuster votre algorithme. 

Rappelez-vous: les performances passées ne préjugent en rien de l'avenir.

// + --------------------------------------------------- ------------------- + // | Double Sma.mq4 | // | Droits d'auteur 2017, Tom Whitbread. | // | http://www.gript.co.uk | // + --------------------------------------------------- ------------------- + copyright de propriété # "2017, Tom Whitbread." lien de propriété # "http://www.gript.co.uk" # description de propriété "Lisse Moyenne mobile échantillon conseiller expert" #define MAGICNUM 20131111 // Définissez nos paramètres input double Lots = 0.1; entrée int PeriodOne = 40; // La période de la première entrée SMA int PeriodTwo = 100; // La période pour la deuxième entrée SMA int TakeProfit = 40; // Le niveau de profit (0 désactivé) input int StopLoss = 0; // Le stop loss par défaut (0 disable) // + ------------------------------------- ----------------------------- + // | fonctions d'initialisation expertes | // + --------------------------------------------------- ------------------- + int init () return (0);  int deinit () return (0);  // + -------------------------------------------------- -------------------- + // | Vérifier le croisement de SMA | // + --------------------------------------------------- ------------------- + int CheckForCross (double entrée1, double entrée2) static int previous_direction = 0; static int current_direction = 0; // Direction vers le haut = 1 if (input1> input2) current_direction = 1;  // Down Direction = 2 if (input1 < input2) current_direction = 2;  // Detect a direction change if(current_direction != previous_direction) previous_direction = current_direction; return (previous_direction);  else  return (0);   //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double LotsOptimized()  double lot = Lots; // Calculate Lot size as a fifth of available free equity. lot = NormalizeDouble((AccountFreeMargin()/5)/1000.0,1); if(lot<0.1) lot=0.1; //Ensure the minimal amount is 0.1 lots return(lot);  //+------------------------------------------------------------------+ //+ Break Even | //+------------------------------------------------------------------+ bool BreakEven(int MN) int Ticket; for(int i = OrdersTotal() - 1; i >= 0; i--) OrderSelect (i, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol () == Symbol () && OrderMagicNumber () == MN) Ticket = OrderModify (OrderTicket (), OrderOpenPrice (), OrderOpenPrice (), OrderTakeProfit (), 0, Vert); si (Ticket < 0) Print("Error in Break Even : ", GetLastError()); break;   return(Ticket);  //+------------------------------------------------------------------+ //+ Run the algorithm | //+------------------------------------------------------------------+ int start()  int cnt, ticket, total; double shortSma, longSma, ShortSL, ShortTP, LongSL, LongTP; // Parameter Sanity checking if(PeriodTwo < PeriodOne) Print("Please check settings, Period Two is lesser then the first period"); return(0);  if(Bars < PeriodTwo) Print("Please check settings, less then the second period bars available for the long SMA"); return(0);  // Calculate the SMAs from the iMA indicator in MODE_SMMA using the close price shortSma = iMA(NULL, 0, PeriodOne, 0, MODE_SMMA, PRICE_CLOSE, 0); longSma = iMA(NULL, 0, PeriodTwo, 0, MODE_SMMA, PRICE_CLOSE, 0); // Check if there has been a cross on this tick from the two SMAs int isCrossed = CheckForCross(shortSma, longSma); // Get the current total orders total = OrdersTotal(); // Calculate Stop Loss and Take profit if(StopLoss > 0) ShortSL = Bid ​​+ (StopLoss * Point); LongSL = Ask- (StopLoss * Point);  if (TakeProfit> 0) ShortTP = Bid- (TakeProfit * Point); LongTP = Ask + (TakeProfit * Point);  // Un seul échange à la fois… si (total < 1) // Buy - Long position if(isCrossed == 1) ticket = OrderSend(Symbol(), OP_BUY, LotsOptimized(),Ask,5, LongSL, LongTP, "Double SMA Crossover",MAGICNUM,0,Blue); if(ticket > 0) if (OrderSelect (ticket, SELECT_BY_TICKET, MODE_TRADES)) Print ("ACHETER la commande ouverte:", OrderOpenPrice (), "SL:", LongSL, "TP:", LongTP);  else Print ("Erreur lors de l’ouverture de BUY Order:", GetLastError ()); retourner (0);  // Sell - Position courte if (isCrossed == 2) ticket = OrderSend (Symbol (), OP_SELL, LotsOptimized (),), Bid, 5, ShortSL, ShortTP, "Double SMA Crossover", MAGICNUM, 0, Rouge); if (ticket> 0) if (OrderSelect (ticket, SELECT_BY_TICKET, MODE_TRADES)) Print ("SELL Order Opened:", OrderOpenPrice (), "SL:", ShortSL, "TP:", ShortTP);  else Print ("Erreur lors de l’ouverture de la commande SELL:", GetLastError ()); retourner (0);  // Gérer les commandes en cours pour les critères de sortie pour (cnt = 0; cnt < total; cnt++) OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) // Look for long positions if(OrderType() == OP_BUY) // Check for Exit criteria on buy - change of direction if(isCrossed == 2) OrderClose(OrderTicket(), OrderLots(), Bid, 3, Violet); // Close the position return(0);   else //Look for short positions - inverse of prior conditions  // Check for Exit criteria on sell - change of direction if(isCrossed == 1) OrderClose(OrderTicket(), OrderLots(), Ask, 3, Violet); // Close the position return(0);   // If we are in a loss - Try to BreakEven Print("Current Unrealized Profit on Order: ", OrderProfit()); if(OrderProfit() < 0) BreakEven(MAGICNUM);    return(0); 

Le tester

Nous pouvons facilement tester les données de marché des jours, mois, voire années précédents d'un instrument financier dans l'environnement MT4 (Meta Trader 4). Cependant, les traders sont encouragés à ne pas se fier aux tests seul, mais de l'utiliser comme guide pour orienter leur stratégie commerciale et voir l'efficacité d'une idée. 

Les tests de retour permettent aux traders de vérifier si leur pensée tient la route, pour ainsi dire, avant de s'engager davantage et de passer à l'écriture ultérieure de leur algorithme dans le code.

Où placer les fichiers experts?

Si vous avez utilisé un éditeur de texte externe pour écrire votre conseiller, vous devez charger votre expert dans la plateforme de trading MT4 pour le compiler et le vérifier en cas d'erreur. Ajoutez simplement le fichier .mq4 à votre installation MetaTrader dans le répertoire Expert, par exemple.. / MetaTrader4 / MQL4 / Experts.

Expert Advisor sera alors disponible dans votre logiciel MT4 à partir du menu du navigateur situé à gauche dans la section Experts.. 

Remarque: Assurez-vous que vous testez sur un compte de démonstration. Un compte réel se négociera avec de l’argent réel et, bien que les profits soient réels, les pertes.

Test du dos

Si vous avez testé une stratégie sur la dernière année de câble (GBP / USD) et avez trouvé un ratio de profit supérieur à 1 (ce qui signifie que vous avez gagné de l'argent), vous pourriez alors être sur une bonne chose. 

La question de savoir si cela fonctionnera dans le monde réel est une toute autre question et c'est pourquoi les tests prospectifs sont tout aussi importants que les tests de score Z. C'est un sujet beaucoup plus avancé pour l'apprentissage automatique de votre algorithme, qui ne sera pas traité ici, mais dans des guides plus avancés plus tard.

Comment démarrer un test de dos

Utilisez le raccourci Contrôle-R pour ouvrir le testeur de stratégie ou le sélectionner dans le Vue menu. La fenêtre du testeur s’ouvrira au bas de la fenêtre..

À partir de là, vous pouvez sélectionner l'algorithme à exécuter dans le premier menu déroulant. Choisissez donc le nom du fichier du conseiller expert créé ici. Ensuite, vous pouvez choisir le symbole (instrument financier). Je vais tester sur le symbole forex GBPUSD de la paire livre sterling à dollar américain.

Nous pouvons également sélectionner la résolution de la période à exécuter (période de 15 minutes, période d'une heure, période d'un jour, etc.). Je vais utiliser le réglage de 30 minutes.

Enfin, nous avons une option pour la modélisation sur Chaque tique, Points de contrôle, ou Prix ​​ouverts seulement. Tout en écrivant votre script, vous pouvez opter pour la Prix ​​ouverts seulement, car il exécutera rapidement votre test, bien que les résultats habitude vaut encore de l'argent bancaire réel!

Pour cela, lorsque vous recherchez un vrai test avant de passer au test suivant, il est recommandé de le lancer sur Chaque tique. Cela prendra beaucoup plus de temps à traiter! (Vous pouvez le laisser fonctionner dans un MT4 VPN en ligne ou bien entendu du jour au lendemain sur votre ordinateur local si vous le souhaitez.)

Modification des paramètres

Nous définissons quelques paramètres (PeriodOne et PériodeDeux) Pour notre conseiller expert afin que les périodes des deux moyennes mobiles puissent être modifiées. 

Vous pouvez y accéder via le testeur de stratégie en cliquant sur le bouton Propriétés expertes bouton et affichage du contribution languette. 

Une valeur numérique peut être donnée pour chaque paramètre ici - les valeurs par défaut sont PeriodOne = 40 et Période Deux = 100.

Test avant

Une fois que vous avez testé des données historiques, vous pouvez commencer à tester avec le marché en direct, car vous avez déjà vu si vos idées ont résisté à la tempête et ont (espérons-le) retrouvé un peu de confiance dans ce que vous croyez être une stratégie gagnante.!

Sur le marché en direct, vous constaterez peut-être que votre stratégie tombe à plat du fait d'éléments que vous n'aviez pas pris en compte lors de vos tests précédents. Se souvenir du le marché a toujours raison. Votre code n'est jamais plus intelligent que le marché et il n'y a aucune chance d'être chanceux dans le commerce. 

Un test prospectif est vraiment le test décisif pour déterminer si la stratégie sera rentable pour vous, si vous y mettez de l'argent réel..

Le test direct est généralement mieux exécuté sur un VPN dédié à MT4 EA (Expert Advisors), qui est souvent fourni gratuitement par la plupart des courtiers FX. Le script fonctionnera 24 heures sur 24 pendant que le marché est ouvert et vous pourrez suivre les transactions en direct en vous connectant au compte à partir d'un terminal, car il s'exécutera sur votre appareil mobile via l'application MT4 ou l'ordinateur de bureau via le Logiciel MT4.

Haute volatilité

Ce qui peut être un véritable tueur pour nos scripts est la forte volatilité du marché, qui peut provenir de nombreux facteurs extérieurs.. 

Par exemple, tout krach boursier ou éclair, guerre, élection, hausse des taux d'intérêt, rendements obligataires ou rapports économiques significatifs tels que l'IPC, le PIB ou des modifications du système fiscal vont provoquer de grands changements dans l'économie mondiale et ses nombreux marchés financiers . Ainsi, indirectement, votre transaction sur une paire de devises ou sur un titre peut être affectée par les événements d'un autre pays, que vous n'aviez peut-être pas anticipés au début.

Plus récemment, l'enquête du FBI sur le Brexit et plus tard Hillary Clinton au cours de la période qui a précédé les élections américaines ont été des exemples de forte volatilité sur le marché pour ceux qui souhaitent regarder de plus près.. 

Prenons le cas du Brexit. Le public britannique semblait croire à la majorité qu'un vote sur le Brexit serait hautement improbable. Je n'étais pas si optimiste et j'ai sorti tous mes livres, économisant beaucoup de mes actions au Royaume-Uni en raison du taux de change en chute libre.. 

Quant aux autres, j'ai peur de dire qu'ils n'ont pas été aussi chanceux. Se protéger contre un sursis - comme l'avaient indiqué certains des conseillers des grandes banques - aurait bien sûr entraîné l'inverse et une perte d'environ 15% par rapport à ceux investis dans la livre sterling, dans l'attente de la reprise..

De telles situations sont idéales pour éteindre votre robot de négociation et ne négociez qu'en dehors de la forte volatilité du marché. Il sera très difficile de coder pour ce type de résultat si les indicateurs avancés ou retardés sont automatiquement appliqués et il est préférable de les échanger après l'événement ou manuellement. Les risques de signaux faux ou contradictoires sont toujours plus élevés lors de grands événements et une approche fondamentale manuelle plutôt que technique peut être plus rentable.

Il n’ya rien de mal à mettre votre robot en pause, car vous vous attendez à une crise. Cela peut vous épargner une perte, tandis que d'un autre côté, vous pourriez rater une victoire énorme. D'après mon expérience, les chances de gain sont beaucoup plus minces, en raison de la grande incertitude et de la probabilité d'un appel de marge ou d'un stop loss avant que la transaction ne puisse progresser en raison de pics momentanés extrêmes..

Conclusions

Nous avons exposé les bases de l'écriture d'un algorithme de trading et introduit de nombreuses nouvelles idées. En parcourant le code, j'espère que vous pouvez maintenant voir le fonctionnement interne d'un algorithme dans MQL4 et voir comment un indicateur technique, tel que la moyenne mobile, est utilisé pour générer un signal d'entrée et de sortie.. 

En ce qui concerne la gestion de l'argent, nous avons envisagé la possibilité d'inclure des conditions de rentabilité et un dimensionnement dynamique des lots pour utiliser un cinquième des fonds propres disponibles. N'hésitez pas à modifier ces parties du code en fonction de vos souhaits en matière de risque. Nous avons passé en revue le testeur de stratégie de back-testing de MT4 et ouvert les portes au potentiel de tests avancés et même de tests Z-score à l'avenir, qui sont tous essentiels avant toute mise en ligne..

Avec plus de mise au point et de recherche, vous pourrez peut-être bientôt vivre une expérience très rentable sur les marchés. Maintenant que vous avez un bon conseiller expert en bases, vous pouvez commencer