Comment exécuter une EA pour plusieurs paires ? - page 2

 
mittalpa

Je pense que les deux approches sont bonnes.

La seule chose que j'aimerais ajouter, c'est que l'option n°2 a des avantages en termes de performances, en raison de la réduction des frais généraux. Tout sera en mémoire, ce qui est évidemment plus rapide qu'une opération sur fichier.

L'option n°3 présente un avantage si vous souhaitez utiliser les données du fichier pour quelque chose que MT4 ne peut pas faire.

Considérez également que si vous avez besoin de construire un EA qui peut se remettre d'une panne de courant, etc. sans intervention de l'utilisateur pour mettre à jour les conditions du marché, etc. vous vous retrouverez de toute façon à construire une fonctionnalité d' accès au fichier.

 
cloudbreaker wrote >>

Considérez également que si vous devez construire un EA qui peut se remettre d'une panne de courant, etc. sans intervention de l'utilisateur pour mettre à jour les conditions du marché, etc. vous devrez de toute façon construire une fonctionnalité d'accès aux fichiers.

D'après mon expérience, vous aurez beaucoup de mal à construire un EA qui négocie plusieurs paires.

1. Chaque paire a besoin de sa propre logique personnalisée, de son optimisation et, pour certaines paires, peut-être même d'une stratégie commerciale différente. J'ai écrit des EA qui étaient optimisés pour une paire particulière au point de bien négocier. Puis, lorsque j'ai essayé de l'utiliser sur une autre paire qui avait la plus grande corrélation avec la première paire, j'ai été surpris de constater que de nombreuses choses devaient être modifiées pour que l'EA fonctionne et soit optimisé pour la deuxième paire. J'ai découvert que chaque paire a besoin de son propre ensemble complet de paramètres personnalisés, de valeurs d'indicateurs et souvent même de changements dans la logique et la stratégie de base. Pour moi, il est beaucoup plus logique de créer un EA très flexible qui intègre plusieurs stratégies et branches de logique différentes. Il suffit ensuite de créer un nouveau fichier .set optimal pour chaque paire.

2. L'EA que vous souhaitez créer ne pourra pas être rétro-testé et optimisé dans Strategy Tester. Le back-testing et l'optimisation sont essentiels selon mon expérience. Il y a des optimisations qui ont grandement amélioré les performances de mon EA et que je n'aurais jamais pu découvrir si je n'avais pas utilisé le Strategy Tester. Il m'a permis d'obtenir des paramètres d'indicateurs si éloignés de ce qui est considéré par beaucoup comme les valeurs les plus utiles et les plus optimales pour un indicateur particulier, que je n'aurais jamais pensé à essayer des valeurs proches de celles qui se sont avérées optimales. Pensez au nombre de paramètres que vous avez dans votre EA. Chacun d'entre eux doit être optimisé, et chaque optimisation d'un paramètre peut nécessiter une modification d'un autre paramètre. C'est pourquoi vous ne pouvez pas simplement optimiser chaque paramètre séparément. L'objectif de l'optimisation est de faire en sorte que tous vos paramètres soient optimisés les uns par rapport aux autres du mieux que vous pouvez. Cela peut prendre beaucoup de temps et de travail en utilisant le testeur, mais il est pratiquement impossible d'effectuer ces optimisations manuellement en modifiant les paramètres un par un.

Par ailleurs, quelle que soit la façon dont vous décidez de coder votre EA, la sauvegarde de l'état de l'EA ou d'autres informations dans un fichier n'est pas obligatoire dans la plupart des cas et n'est pas la seule option. La meilleure façon de procéder, la plus efficace et la plus simple, est de sauvegarder votre état dans des variables globales. Après tout, c'est la raison même pour laquelle la fonction Variables globales a été ajoutée à MT. Certains d'entre vous ont également parlé de la création d'une EA supplémentaire dans le seul but d'échanger des données stockées sur le système de fichiers, permettant ainsi l'échange de données et l'interaction entre les deux EA. Cela n'est pas non plus nécessaire. L'échange de données et même la capacité de logique conditionnelle entre plusieurs EA est une autre caractéristique des variables globales. Cela permet à plusieurs EA sur différents graphiques d'avoir accès aux données de n'importe quel EA et d'utiliser ces données pour prendre des décisions qui peuvent entraîner un changement dans un autre EA. Ces données sont sûres et sécurisées, même en cas de panne d'ordinateur ou de coupure de courant. Mais que se passe-t-il en cas de panne d'ordinateur ou de courant lorsque vous êtes en train d'enregistrer, de lire ou d'échanger des données entre des AE et que vous avez un ou deux fichiers ouverts ? Vous risquez fort de vous retrouver avec des données manquantes, des données corrompues et, pire encore, des fichiers de zéro octet ou aucun fichier. Avec les variables globales, aucun de ces problèmes ne peut se produire. L'état de votre EA sera exactement le même que la milliseconde précédant la panne de votre système. L'inconvénient des GV, dont tout le monde parle, est qu'elles ne peuvent pas stocker de chaînes de caractères, mais il existe de bons moyens de contourner ce problème.

Tout d'abord, les GV peuvent stocker des chaînes de caractères si vous utilisez le nom du GV EN TANT QUE valeur de la chaîne, par exemple GlobalVariableSet(Symbol() + "LastUptime=" + TimeLocal(), -1) ; Le problème est que la longueur des noms de GV est limitée et que vous ne pouvez pas utiliser cette méthode pour enregistrer de longues chaînes de caractères. Une autre solution que j'utilise en permanence consiste à enregistrer des chaînes dans les champs de texte des objets graphiques. Vous pouvez les utiliser comme vous le faites pour les commandes et les GV. Il existe des fonctions mql pour obtenir le nombre total de GV et d'objets graphiques, ce qui vous permet de les parcourir en boucle et de trouver celui que vous cherchez, de la même manière que vous parcourez vos commandes.

AVERTISSEMENT- Je vais maintenant m'aventurer sur un chemin de lapin à propos d'autres façons dont les objets graphiques peuvent améliorer vos fonctions de trading... je m'éloigne un peu du sujet mais cela peut être utile...

Il y a des choses beaucoup plus utiles que vous pouvez faire avec les objets graphiques. Par exemple, un de mes EA a une fonction optionnelle de couverture. Lorsque la couverture est activée, il n'y a bien sûr pas de réel stop loss sur les nouveaux ordres placés, car lors de la couverture sur le même symbole, le but est d'ouvrir un ordre opposé si le premier ordre dépasse ce que le stop loss normal serait et le premier ordre doit rester ouvert. Votre code doit donc savoir quel est le stop loss et surveiller la transaction afin d'ouvrir la couverture lorsque le premier ordre atteint le prix du stop loss. Au cas où il y aurait un malentendu, la raison pour laquelle nous ne pouvons pas utiliser un stop loss réel sur l'ordre est qu'alors l'ordre serait fermé, ce qui, bien sûr, ne créerait pas de couverture du tout. Mais avec les objets graphiques, vous pouvez améliorer le fonctionnement et faire en sorte que l'utilisateur ait exactement la même impression qu'avec un vrai stop loss. Voici ce que vous devez faire : Lorsque vous passez l'ordre, vous créez en même temps un objet ligne horizontale dont le paramètre de prix = le prix du stop loss. Le nom de l'objet ligne est "Order #" + orderTicket ; la description est "StopLoss @ " + SLPrice. Définissez le style de ligne sur STYLE_DASHDOT, la couleur sur rouge et vous obtenez une ligne d'arrêt des pertes qui ressemble exactement à la ligne réelle. Le code pour le faire fonctionner est également simple. Toutes les informations dont vous avez besoin sont déjà stockées dans l'objet ligne - le numéro du ticket de commande et le prix SL, qui est la valeur de l'objet ligne. Ensuite, vous créez une fonction qui vérifie si le prix actuel atteint ou dépasse la ligne. Lorsque cela se produit, vous obtenez le numéro de ticket qui a été enregistré dans le champ du nom de la ligne. Ensuite, vous trouvez l'ordre ouvert qui a le même ticket. Sélectionnez l'ordre pour voir s'il s'agit d'un ordre d'achat ou de vente et obtenez également la taille du lot. Vous avez maintenant toutes les informations dont vous avez besoin pour ouvrir votre ordre de couverture. Vous ouvrez un nouvel ordre opposé au premier et avec la même taille de lot. L'étape finale consiste à supprimer la ligne de stop loss. Lorsque vous observez le fonctionnement de l'ordre, c'est plutôt cool car vous pouvez maintenant voir quand vous êtes sur le point d'être "couvert".

Un autre avantage est que si vous pensez que votre ordre pourrait être exécuté, si le prix semble revenir en votre faveur mais que vous avez besoin d'un peu plus d'espace, il suffit de faire glisser la ligne SL/Hedge un peu plus haut. Ne souhaitez-vous pas pouvoir faire cela avec les lignes SL et TP standard ? Ce serait une excellente nouvelle fonctionnalité s'ils rendaient les lignes d'arrêt de perte et de prise de profit mobiles afin que nous puissions faire des ajustements rapides lorsque le marché bouge vraiment. Bien sûr, vous pouvez le faire aujourd'hui dans vos EA en suivant les étapes ci-dessus et l'un des avantages est que le courtier ne verra jamais votre SL ou TP. L'inconvénient est que si votre ordinateur s'éteint, vous n'avez pas de SL ou de TP côté serveur. Mais il en va de même pour les robots comme FapTurbo. Leur méthode "furtive" consiste à mettre de fausses valeurs de SL et de TP sur les ordres et soit à fermer les ordres à partir du code, soit à modifier l'ordre avec les valeurs correctes de SL et de TP à la dernière minute lorsque le prix se rapproche.

 
Jacques366:

Bonjour,

Je préfère garder à l'esprit que nous travaillons toujours en temps réel, donc j'oublie d'utiliser la boucle while ou la fonction wait pour garder la main sur la communication !

Attacher votre EA à une paire comme l'EURUSD vous fournit suffisamment de signaux pour gérer toutes les autres paires, les ticks sont très fréquents. Ce n'est pas une question de minute mais de seconde (faire tourner une boucle pendant 2 minutes me semble vraiment fou). Si ce n'est pas une question de seconde, demandez-vous pourquoi ou voyez avec un autre courtier.

Si vous avez vraiment besoin de plus que ce que vous obtiendrez en attachant votre EA à eurusd, pensez à exécuter une instance séparée de votre EA attachée à chaque devise. Désolé mais j'ai tendance à penser "ou repenser votre système".

Désolé si ce message est un peu abrupt. Je voulais partager avec vous mon point de vue.

Bonne chance.

Je suis un programmeur novice, alors considérez ceci comme un scénario "what-if" à des fins de discussion :


Je réalise que c'est une mauvaise programmation de créer une boucle While sans fin avec rien de productif dans la boucle, ou si cela vous empêche d'exécuter le reste de votre EA, mais que se passe-t-il si vous créez une boucle While sans fin contenant le corps de votre EA. Je ne comprends pas assez bien la programmation MQL4 pour comprendre pleinement votre commentaire "garder la main sur la communication". Si vous lancez des ordres de transaction via un script autonome, aurez-vous des problèmes de communication si l'EA continue à tourner dans une boucle sans fin ?


Je continue à jouer avec l'idée d'utiliser une boucle sans fin While et d'émettre des ordres via des scripts autonomes, car le fait de compter sur les ticks EURUSD entrants pour exécuter l'EA peut entraîner des retards importants. Par exemple, entre 0700 et 0800 GMT aujourd'hui, l'attente la plus longue aurait été de 31 secondes, mais plus tard dans la journée, vers la fin de la session de New York, l'attente peut prendre jusqu'à 2 minutes pour un tick entrant --- Je n'ai pas encore vérifié la session asiatique, mais je soupçonne qu'elle a aussi des intervalles longs entre les ticks.


Si vous placez le corps de votre EA dans une boucle sans fin, vous pouvez facilement contrôler la fréquence de mise à jour de toutes les devises que vous négociez et ne sacrifier aucun délai. En fait, il se peut que vous deviez insérer une instruction de mise en veille de 100 à 250 millisecondes dans la boucle pour la ralentir un peu si 50 passages dans l'EA en une seconde vous paraissent insupportables.


J'apprécie tous les commentaires.

 
vangrosh wrote >>

AVERTISSEMENT - Je vais maintenant partir sur une piste de lapin ici sur d'autres façons cool des objets graphiques peuvent améliorer vos fonctions de négociation ... s'éloigner un peu du sujet, mais peut être des informations utiles ...

Génial !

 
vangrosh:

D'après mon expérience, vous aurez beaucoup de mal à construire un EA qui négocie plusieurs paires.

C'est vraiment cool et je vais sûrement introduire la plupart de ces éléments dans mon EA.

J'ai déjà décidé d'un certain nombre de choses
1. Une seule paire par EA.
2. Un seul ordre par paire. (Cela peut changer plus tard mais je m'y tiendrai jusqu'à ce que je devienne suffisamment compétent).

Merci beaucoup de partager vos expériences en or.

Pankaj
 

Ce graphique montre l'intervalle de temps entre les ticks pour la paire EURUSD le 29 avril 2009. Je ne sais pas quel fuseau horaire ces données représentent. Les données tick ont été téléchargées depuis Gain Capital.

Comme vous pouvez le constater, à certaines périodes de la journée, l'intervalle entre les ticks dépasse fréquemment une minute et parfois deux minutes.



 
vangrosh:

Il suffit ensuite de créer un nouveau fichier .set optimal pour chaque paire.

vangrosh : Comment crée-t-on et utilise-t-on un fichier .set ? Je n'ai pas trouvé de référence pour ce type de fichier.

 
cloudbreaker wrote >>

Considérez également que si vous avez besoin de construire un EA qui peut se remettre d'une panne de courant, etc. sans intervention de l'utilisateur pour mettre à jour les conditions du marché, etc. vous devrez de toute façon construire une fonctionnalité d'accès aux fichiers.

Jetez un coup d'œil ici : https://book.mql4.com/special/index

Caractéristiques générales des programmes complexes


C'est la voie à suivre si vous souhaitez créer des EAs multi-cirrents.

 
StraightTrader:

Veuillez jeter un coup d'œil ici : https://book.mql4.com/special/index

Caractéristiques générales des programmes complexes


La voie à suivre si vous souhaitez créer des EAs multi-devises.

Merci pour la référence.

 
FXtrader2008 wrote >>

Ce graphique montre l'intervalle de temps entre les ticks pour la paire EURUSD le 29 avril 2009. Je ne sais pas quel fuseau horaire ces données représentent. Les données tick ont été téléchargées depuis Gain Capital.

Comme vous pouvez le constater, à certaines périodes de la journée, l'intervalle entre les ticks dépasse fréquemment une minute et parfois deux minutes.

Merci pour le graphique. Il serait bien de le faire correspondre avec celui de quelques autres devises, juste pour s'assurer que vous n'avez pas les mêmes retards. (J'apprécierais si vous pouviez facilement présenter des graphiques pour disons 4 paires).

J'ai juste remarqué, lorsque j'ai commencé à construire mon EA, que lorsque je n'ai pas de ticks pendant 1 ou 2 minutes sur l'eurusd, alors c'est la même chose pour les autres devises. Peut-être que c'était juste un hasard à ce moment là ou une mauvaise hypothèse que j'ai faite mais j'ai gardé cette idée et mon EA fonctionne depuis des mois maintenant sans problème. L'expérience factuelle compense le manque de logique et j'ai continué à faire fonctionner mon EA de cette manière. Si j'avais rencontré des problèmes, j'aurais implanté votre solution, je veux dire votre idée de garder votre EA éveillée avec juste un délai entre deux exécutions. Logiquement, c'est ainsi que cela devrait être fait, pour autant que je sache : mais je ne sais pas comment les ticks sont générés par les brokers, il est donc difficile d'aller plus loin.

Il est aussi 'normal' ou 'mieux' de coder en fonction du système dans lequel votre programme fonctionne.

Ainsi, en permettant le traitement de plusieurs devises, nous devrions normalement être en mesure d'attacher notre EA à un canal fournissant tous les ticks. C'est un manque dans la logique du système que nous devons traiter d'une manière ou d'une autre.

Salutations