Je suis complètement perdue

 

Je veux créer un "EA" comme vous l'appelez. C'est drôle que vous utilisiez cet acronyme, mais en ce qui me concerne, il signifie "algorithme évolutif", ce qui est exactement ce qu'est ma méthode. Si elle fonctionne. Ce qui est le cas, si l'écart est assez faible. C'est sur la barrière.

Quoi qu'il en soit, j'ai de l'expérience en programmation. Et d'après ce que j'en ai vu, MQL4 ressemble à peu près à C++. Mais il me manque quelques détails cruciaux. Je connais déjà les variables, les constantes et bien d'autres choses, mais j'ai besoin d'une sorte de modèle de base pour travailler, et j'ai quelques lacunes conceptuelles. Quelqu'un pourrait-il poster une sorte d'exemple de programme de robot de trading simple mais comportant tous les éléments dont j'ai besoin et expliquer ce que fait chaque partie de ce programme pour que je puisse dire "aha, c'est comme ça que je fais ce que je dois faire".

En gros, j'aimerais que mon programme soit capable de télécharger dans la mémoire vive de mon ordinateur les éléments suivants (en téléchargeant les données sur mon ordinateur via la plateforme de trading de devises)

les données de haut, bas, ouverture, fermeture pour les prix d'achat ET de vente (puisque la valeur de l'écart peut varier) pour un certain incrément de temps que je spécifie dans le programme (si cela peut être fait), y compris le plus récent, soit dès qu'il est terminé (donc toutes les minutes, ou toutes les 5 minutes, ou toutes les 10 minutes, etc, quel que soit l'intervalle de temps) ou éventuellement à chaque tick - chaque fois que le prix change - quel que soit le cas de figure, j'aimerais également pouvoir disposer d'une variable qui représente le temps écoulé depuis la dernière exécution (donc si c'est toutes les 10 minutes, il y aurait une variable qui serait mise à jour à chaque tick qui compte jusqu'à 10 minutes à partir de 0, et lorsqu'elle arrive à 10 minutes, il y a une autre mise à jour des données), Je voudrais aussi télécharger la valeur totale du compte à la liquidation, télécharger le nombre total de positions et la taille des positions et le type de positions (par exemple USD/JPY vaut 10000 ou 100000 DOLLARS de yens, mais EUR/USD vaut 10000 ou 100000 EUROS de dollars, mais la valeur de mon compte sera en dollars, donc il faut pouvoir déterminer la taille variable du lot d'une position). À partir des prix d'achat et de vente actuels, le programme pourrait bien sûr simplement soustraire l'un de l'autre pour obtenir la valeur actuelle de l'écart.

Ensuite, j'aimerais que le programme puisse effectuer les actions suivantes (en téléchargeant les données de mon ordinateur via la plateforme de trading de devises)

acheter ou vendre via des ordres au marché ou des ordres à cours limité. De plus, veuillez me dire si je place un ordre à cours limité mais que le prix lorsqu'il passe, si je peux m'attendre à ce qu'il me donne le prix limite que j'ai placé, ou peut-il être meilleur ? Par exemple, supposons que le prix d'achat de l'EUR/USD est de 1,3500 et que j'ai un ordre limite d'achat à 1,3501, vais-je payer 1,3501 ou 1,3500 ? Dois-je m'attendre à ce que le courtier me trompe à ce niveau ? Ou est-ce que le fonctionnement est identique à celui d'un ordre au marché, à l'exception du fait que si le prix est de 1,3502 ou plus au moment où l'ordre entre dans le système, il ne sera pas exécuté ?

ENFIN, j'aimerais que le programme d'exemple implique un appel de fonction à une autre fonction. Si le passage par valeur et le passage par référence sont tous deux possibles comme dans MQL4, veuillez inclure un exemple de chaque fonction (commenté pour montrer ce que vous faites) dans le programme d'exemple.

De plus, veuillez me dire si cela implique généralement plus d'un fichier réel (avec l'extension mql4 ?) comme cela peut être le cas en C++ ou si c'est généralement un seul fichier mql4, et s'il est compilé par la plateforme de trading, ou si j'ai besoin d'un compilateur pour cela et qu'ensuite la plateforme de trading utilise le code machine ou tout ce qui est généré par le compilateur ?

Si quelqu'un devait faire cela, juste pour faire un programme factice qui contienne tous ces éléments, ce serait non seulement très utile pour moi mais aussi pour d'autres personnes j'imagine. Merci d'avance à quiconque le fera.

 
Oh oh, mieux encore, pour la variable qui commence à 0 et compte jusqu'à 10 minutes (ou n'importe quel temps que vous utilisez) - elle devrait être normalisée - divisée par l'unité de temps - de sorte qu'elle soit un double qui varie entre 0 et 1. Je dis cela juste au cas où il y aurait un problème avec un facteur d'échelle. De cette façon, on pourrait peut-être l'appliquer à un graphique de 5 minutes, de 10 minutes ou de 1 minute, mais quelle que soit l'unité de temps, cette variable est toujours comprise entre 0 et 1.
 
Il n'existe pas de programme qui vous donne tout ce que vous devez savoir sur mql4 en une seule instance. Je vous recommande de parcourir la base de code par exemple ea puisque vous avez déjà des notions de programmation. Si vous n'aimez pas apprendre en regardant des codes, mais plutôt une explication du langage, alors consultez le mql4_book. Il y a aussi les documentations pour une référence facile.
 
Je demandais si quelqu'un pouvait en écrire un. Si vous connaissez le format de base du langage, cela devrait prendre 5 minutes, à peu près le temps qu'il a fallu pour lire mon message. Il suffit d'écrire le programme, de taper un exemple de chacune de ces choses et de le mettre en ligne. J'ai regardé le livre mql4, il passe directement de l'explication de ce qu'est une variable à des présuppositions sur mes connaissances des fonctions et je m'endors en essayant de trouver le point de transition où il passe de beaucoup plus simple que ce dont j'ai besoin à plus que ce que je suis prêt à comprendre. Vous savez, je ne demande pas à quelqu'un d'écrire un "conseiller économique" pour moi, juste un truc stupide qui contient toutes les instructions que je pourrais vouloir utiliser. Un truc qui télécharge dans des variables de mon ordinateur toutes les informations que je pourrais vouloir utiliser, et toutes les instructions que je pourrais vouloir entrer - et maintenant que j'y pense, j'aimerais qu'il n'y ait pas seulement des ordres d'achat et de vente à cours limité et des ordres de marché, mais aussi quelque chose qui annule tous les ordres existants, après tout, je ne voudrais pas laisser traîner des ordres à cours limité au cas où ils ne seraient pas exécutés, je ne voudrais pas que le programme les oublie.
 
zortharg: Je demandais si quelqu'un pouvait en écrire un. Si vous connaissez le format de base du langage, cela devrait prendre 5 minutes, à peu près le temps qu'il vous a fallu pour lire mon message. Il suffit d'écrire le programme, de taper un exemple de chacune de ces choses et de le mettre en ligne. J'ai regardé le livre mql4, il passe directement de l'explication de ce qu'est une variable à des présuppositions sur mes connaissances des fonctions et je m'endors en essayant de trouver le point de transition où il passe de beaucoup plus simple que ce dont j'ai besoin à plus que ce que je suis prêt à comprendre. Vous savez, je ne demande pas à quelqu'un d'écrire un "conseiller économique" pour moi, juste un truc stupide qui contient toutes les instructions que je pourrais vouloir utiliser. Un truc qui télécharge dans des variables de mon ordinateur toutes les informations que je pourrais vouloir utiliser, et toutes les instructions que je pourrais vouloir entrer - et maintenant que j'y pense, j'aimerais qu'il n'y ait pas seulement des ordres d'achat et de vente à cours limité et des ordres de marché, mais aussi quelque chose qui annule tous les ordres existants, après tout, je ne voudrais pas laisser traîner des ordres à cours limité au cas où ils ne seraient pas exécutés, je ne voudrais pas que le programme les oublie.

Je pense que vous êtes au mauvais endroit.

Nous n'écrivons pas de codes pour d'autres personnes sur ce forum.

Nous attendons de vous que vous écriviez votre propre code.

Si vous êtes bloqué, nous vous indiquons la bonne direction.

Si vous voulez que quelqu'un écrive des codes pour vous, allez ici.

Ils font mql4 et mql5.

 
zortharg:

[...]

Eh bien, cela me change de la discussion sur la mise à jour majeure de MT4 qui doit avoir lieu dans quelques jours.


Je veux créer un "EA" comme vous l'appelez. C'est amusant que vous continuiez à utiliser cet acronyme.

Cela dépend de votre expérience. Pour le meilleur ou pour le pire, MT4 et MQL4 ont actuellement un quasi-monopole sur le marché mondial des changes au détail, et le terme "EA" a une signification pour, au minimum, des centaines de milliers de personnes.


Et d'après ce que j'en ai vu, MQL4 ressemble beaucoup à C++.

Il existe effectivement deux versions du langage MQL4. Celle qui existe depuis 9 ans n'a pas de classes ou d'objets et ressemble donc plus à C qu'à C++. D'un autre côté, elle n'a pas de pointeurs ni d'allocation de mémoire explicite.

La nouvelle version de MT4 et MQL4 - dont la sortie en direct est prévue lundi prochain - ajoute des classes, mais là encore sans allocation et gestion explicites de la mémoire. On peut se demander si cela ressemble plus à du C++, ou plus à du Javascript, mais sans le typage en canard et les fonctions lambda, etc.


En gros, j'aimerais que mon programme soit capable de télécharger dans la mémoire vive de mon ordinateur ce qui suit [...].

En simplifiant un peu les choses, la plateforme le fait pour vous automatiquement, et vous n'avez aucun moyen facile de remplacer son comportement standard. Télécharger des données de prix externes et les manipuler ensuite dans MQL4 - en particulier le MQL4 traditionnel plutôt que la nouvelle version étendue - n'est pas joli.

Vous pouvez obtenir les prix actuels, et vous pouvez facilement manipuler les prix historiques pour tous les délais que la plate-forme prend en charge : M1, M5, M15 etc. mais pas M3, H2 etc.


les données de haut, bas, ouverture, fermeture pour les prix d'achat ET de vente (puisque la valeur de l'écart peut varier).

Le spread peut en effet varier, mais l'une des charmantes particularités de la plateforme MT4 est qu'elle ne fournit que les cours acheteurs historiques. (Les prix actuels et le spread actuel sont évidemment disponibles).


Je voudrais aussi télécharger la valeur totale du compte à la liquidation [...] le nombre total de positions et la taille [...] mais la valeur de mon compte sera en dollars

En fait, la plate-forme diffuse en permanence ces données. Il n'y a pas de "téléchargement" explicite de ces données. Par exemple, le code MQL4 a constamment accès à l'équité actuelle du compte via la fonction AccountEquity(). Les positions ouvertes sont automatiquement rapportées dans votre devise de dépôt.


Par exemple, supposons que le prix d'achat de l'EUR/USD est de 1,3500 et que j'ai un ordre limite d'achat à 1,3501, vais-je payer 1,3501 ou 1,3500 ?

Cela dépend du courtier mais, dans l'ensemble, la plateforme/courtier n'acceptera tout simplement pas un ordre limité à ou au-delà du BBO actuel. Je ne peux pas penser immédiatement à une exception à cette règle.


s'il implique généralement plus d'un fichier réel (avec l'extension mql4 ?) comme cela peut être le cas en C++ ou s'il s'agit généralement d'un seul fichier mql4.

D'une manière générale, un projet ne peut être constitué que d'un seul fichier .mq4, mais il peut y avoir plusieurs fichiers #inclus .mqh. Par conséquent, vous pouvez avoir des bibliothèques de code communes et les réutiliser entre les projets. Ce que vous ne pouvez pas faire, c'est avoir plusieurs fichiers .mq4 qui existent en pari passu, c'est-à-dire qui sont compilés ensemble dans le cadre du même projet. Malgré les origines de MQL4 en C, la structure d'un grand projet typique est différente : un fichier .mq4, plus une ou plusieurs bibliothèques de différents types (précompilées ou #incluses).


La plateforme de trading utilise ensuite le code machine ou tout ce qui est généré par le compilateur.

Le compilateur génère une sorte de byte-code/p-code/quel que soit le nom que vous voulez lui donner plutôt que du code machine. Vous pouvez compiler les fichiers .mq4 explicitement, ou vous pouvez les placer dans le dossier requis du logiciel et ils seront automatiquement compilés et disponibles au prochain démarrage.


Si quelqu'un faisait cela, juste pour créer un programme factice contenant tous ces éléments, ce ne serait pas seulement très utile pour moi, mais aussi pour d'autres, j'imagine...

Ce n'est pas le bon moment. Tout le monde sur ce forum est bien trop occupé à discuter de la première mise à jour vraiment significative de MQL4 depuis 9 ans.

 
zortharg: Je demandais si quelqu'un voulait en écrire un.
Vous n'avez que trois choix : Le chercher,apprendre à le coder, ou payer quelqu'un. Nous n'allons pas le coder POUR vous. Nous sommes prêts à vous AIDER si vous postez votre tentative (en utilisant SRC) et la nature de votre problème.
 

Je ne demandais pas à quelqu'un de produire quelque chose de valeur commerciale pour moi. Je ne demande pas à quelqu'un de "coder ma méthode POUR moi", WHRoeder. J'ai juste besoin d'un point de départ. Je peux peut-être trouver quelque chose à partir du lien que vous avez mis dans la rubrique "recherche", mais j'aimerais vraiment recevoir un simple "voici ce qu'il faut". Je ne sais pas à quoi devrait ressembler le programme. Je ne sais pas ce qui est strictement nécessaire pour être dans le programme. Si j'essaye de le faire moi-même sans aucun point de référence, je vais juste avoir des erreurs de compilation parce que je ne vais même pas savoir ce qu'il manque. Et si je fais quelque chose qui devrait fonctionner, je l'initialiserai mal et je ne saurai même pas que je l'ai bien fait. Ok, que pensez-vous de ça. Un exemple simple. Quelque chose qui vous ferait perdre de l'argent si vous le faisiez dans la vie réelle : un conseiller expert qui maintient une position qui est l'audace*(votre valeur de compte)*(la différence entre le prix actuel et le prix d'il y a 1 unité de temps)/X, et X commence à 1 mais chaque unité de temps, X est mis à jour pour être X=.9*X+.1*(prix actuel-prix d'il y a 1 unité de temps)^2, et l'audace est un paramètre spécifié par l'utilisateur. Et pour déterminer combien acheter ou vendre, il doit aussi déterminer combien de positions il possède déjà. Donc, juste un programme stupide, mais il a pratiquement tous les éléments dont j'aurais besoin pour travailler comme point de départ.

gchrmt4 merci. Vous avez répondu à beaucoup de mes questions. Mais quand vous dites "vous pouvez facilement manipuler les prix historiques pour tous les délais pour lesquels la plate-forme est disponible", comment puis-je faire cela ? Y a-t-il une fonction similaire à AccountEquity() qui renvoie un prix à un moment donné, et vous lui donnez les unités de temps il y a et si vous voulez une ouverture, un bas, un haut, une fermeture et le type d'unités de temps qu'elle utilise ? Le type d'unités de temps est-il déterminé par le type de graphique auquel vous l'appliquez ? C'est-à-dire que si vous l'appliquez à un graphique d'une minute, 1 unité de temps il y a une minute, mais si vous l'appliquez à un graphique de 5 minutes, 1 unité de temps il y a 5 minutes, ou est-ce que le pas de temps est codé en dur dans le programme lui-même plutôt que d'être appliqué à un graphique ? Et l'écart actuel, comment puis-je y accéder ? Vous dites que ces éléments sont "en continu" et facilement accessibles, mais comment y accéder ?

Merci pour toute aide que vous voudrez bien m'apporter.

 
zortharg:
Existe-t-il une fonction similaire à AccountEquity() qui renvoie un prix à un moment donné, et vous lui donnez les unités de temps d'il y a un an et si vous voulez une ouverture, un bas, un haut, une fermeture et quel type d'unités de temps elle utilise ? Le type d'unités de temps est-il déterminé par le type de graphique auquel vous l'appliquez ? C'est-à-dire que si vous l'appliquez à un graphique d'une minute, 1 unité de temps il y a une minute, mais si vous l'appliquez à un graphique de 5 minutes, 1 unité de temps il y a 5 minutes, ou est-ce que le pas de temps est codé en dur dans le programme lui-même plutôt que d'être appliqué à un graphique ? Et l'écart actuel, comment puis-je y accéder ? Vous dites que ces éléments sont "en continu" et facilement accessibles, mais comment y accéder ?

Merci pour l'aide que vous voudrez bien m'apporter.

Il existe toute une famille de fonctions de séries chronologiques. Par exemple, iHigh("USDJPY", PERIOD_H1, 2) vous donnera le plus haut de la barre H1 de l'USDJPY 2 barres en arrière (où la barre en cours est #0). Il existe des fonctions pour convertir les temps en indices de barres.

L'écart actuel est disponible de plusieurs façons. La plus simple est Ask - Bid (qui vous donne le spread pour le symbole sur le graphique duquel votre code est exécuté). L'écart pour un symbole différent du graphique actuel est disponible via différentes voies, et exprimé en termes différents, comme MarketInfo("symbol", MODE_ASK) - MarketInfo("symbol", MODE_BID), ou MarketInfo("symbol", MODE_SPREAD).

 

@zortharg

Il y a une chose appelée documentation ici (partiellement dépréciée) : docs.mql4.com/

et ici (bientôt à venir, partiellement non applicable) : mql5.com/fr/docs


Vous y trouverez tout ce que vous avez toujours voulu savoir ; il y a aussi des exemples dans le terminal lui-même. Des exemples de scripts, de conseillers experts et d'indicateurs. Et vous pouvez également importer des DLL, pour accomplir des choses qui sont au-delà de MQL.

Si vous pouvez l'obtenir à partir de là, vous êtes prêt, et si non, eh bien...


 

Je comprends votre demande, un exemple de travail pour commencer est très utile.

https://www.mql5.com/en/code

Vous pouvez également trouver sur Google des sources gratuites de conseillers experts pour apprendre.

recherchez du code effectuant des tâches simples, regroupez-les dans des fonctions et essayez de garder votre code simple et lisible

start() {

   SearchOrders();
   DetectEnvironment();      
   UpdateIndicators();
   RiskAssessment();
   CalcVolume();
   if( EnterSignal() ) OpenOrder();
   if ( ExitSignal() ) CloseOrder();
   TrailingStop();
   DisplayInfos();

}
Raison: