Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1191

 

Comment se connecter aux serveurs Meta Quotes pour que la bibliothèque dll puisse envoyer des ordres et échanger des données afin que le langage c++, et non mql4, soit impliqué dans la mise en œuvre de l'EA autant que possible ?


Est-il possible de dessiner des objets dans MT4 en utilisant la bibliothèque dll, que peut-on apprendre à ce sujet ?

 
Mihail Matkovskij:

Mais pourquoi avec iBars(symbol, timeframe) l'histoire se révèle incomplète, alors qu'avec iBars(Symbol(), Period()) elle est tout à fait normale ? Et cela ne se produit que lorsque le terminal est redémarré, pas toujours. Et les variables symbole, timeframe sont initialisées correctement, dans la section initialisation (je l'ai vérifié moi-même).

Essayez de presser mon exemple: https://c.mql5.com/3/324/Test.mq5.

Séquence d'actions :

1. lancez le fichier compilé sur le graphique. Les messages que vous recevez quand vous faites ça :

2. Terminez le terminal et redémarrez-le. Les messages dans le journal seront les suivants :

Résolu.

Au lieu de ce code

public:  
  Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe)); // Данный вызов iBars() даёт 0 при перезапуске терминала
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); // Этот же вызов iBars() работает нормально
  }

J'ai écrit ce qui suit

public:  
  Loader(): symbol(NULL), timeframe(PERIOD_CURRENT) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe));
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); 
  }

Maintenant, il n'y a pas d'erreur lors du redémarrage du terminal. Mais le symbole et la période doivent être initialisés uniquement avec des valeurs vides.

Voici deux versions du code source, avec le bug et celle qui fonctionne. Je vous rappelle que la séquence des tests est la suivante: https://www.mql5.com/ru/forum/160683/page1189#comment_17047032.

Dossiers :
Bug.mq5  7 kb
Correct.mq5  6 kb
 
Seric29:

Comment se connecter aux serveurs Meta Quotes pour que la bibliothèque dll puisse envoyer des ordres et échanger des données afin que l'implémentation de l'Expert Advisor fasse appel autant que possible au langage C++ et non à mql4 ?

Il n'y a pas moyen. Le protocole est fermé.

La bibliothèque dll peut-elle dessiner des objets dans MT4 ? Que puis-je étudier à ce sujet ?

Non, vous ne pouvez pas.

 
Seric29:

Wow, je vais vérifier. Je sais que l'on peut initialiser des variables avec des éléments de tableau avec des fonctions, mais je ne savais pas que cela changeait automatiquement, je ne pense pas qu'il y ait une telle chose en c++ non plus, je vérifierai plus tard.

J'ai fait une erreur (

Si vous devez recalculer le lot avant les opérations de transaction, il est préférable de placer la définition du lot au début de OnTick.

ou (comme je l'ai modifié) OnTimer

 

Bonjour, aidez-moi à sortir toutes les valeurs, je ne peux sortir que les dernières. Et la deuxième question, comment sortir ces valeurs avec un décalage vers la droite(définir n'importe quel décalage). Merci !

   for(int p = 0; p < 4; p++)
      for(int c = 0; c < 4; c++)
         for(int ps = 0; ps < 4; ps++)
            Comment(StringFormat("Выводим значения\nP = %G\nC = %G\nPS = %d", p, c, ps));
 

Où puis-je me renseigner sur les délimiteurs dans l'imprimerie ? C'est soit des délimiteurs plus, soit des délimiteurs virgule, je n'y comprends rien, c'est le bazar.

Print(a, b + "abc") ;

 
Koldun Zloy:

Négatif. Le protocole est fermé.

Tu ne peux pas.

Que voulez-vous dire par le protocole est fermé. Il y a des fonctions d'ouverture de commande dans mql4, c'est essentiellement du code. Il en va de même pour les objets graphiques. J'ai entendu dire que mql4 est un produit commercial et que c'est pourquoi il n'y a pas de code source ou de fonctions intégrées (par exemple Arrayresize/Range etc.). Par exemple, je ne suis pas à l'aise pour utiliser mql4 pour écrire un programme, c'est un langage trop mort, très limité. Qu'en est-il du langage Win API 32, il ne peut rien faire pour mes questions ? Je suppose que tout est fermé pour Win API 32 également.

 
Seric29:

Que voulez-vous dire par le protocole est fermé. Il existe des fonctions d'ouverture de commande dans mql4, il s'agit essentiellement de code simple. Il en va de même pour les objets graphiques. J'ai entendu dire que mql4 est un produit commercial et que c'est pourquoi il n'y a pas de code source ou de fonctions intégrées (par exemple Arrayresize/Range etc.). Par exemple, je ne suis pas à l'aise pour utiliser mql4 pour écrire un programme, c'est un langage trop mort, très limité. Qu'en est-il du langage Win API 32, il ne peut rien faire pour mes questions ? Probablement, tout est verrouillé pour Win API 32 aussi.

Il serait préférable de faire un sujet séparé, ce sera plus vivant).

 
MakarFX:

J'ai fait une erreur.

Si vous avez besoin de recalculer le lot avant d'effectuer une opération, il est préférable de placer la définition du lot au début de OnTick.

ou (comme je l'ai modifié) OnTimer

Ce que je veux dire, c'est que si vous initialisez la variable "lot" avec une expression, il n'y a aucune chance que cette expression soit remplie automatiquement. Vous pouvez même le vérifier, prendre un simple compteur, lui attribuer une valeur lors de l'initialisation, puis modifier le compteur et la valeur de Lot ne changera pas, sauf si vous la modifiez vous-même. Il fonctionne en C++.

int Pomidor=9;
int Pomidor1(int q=Pomidor){return q;}//при инициализации
Вызов
Print(Pomidor());// результат будет автоматически равен Pomidor и это будет регулярная смена значений 

Mais cela ne fonctionne pas dans mql4, cela ne fonctionne que comme ceci

int Pomidor1(int q=67){return q;}

Résultat 67.

 
Valeriy Yastremskiy:

Mieux vaut faire un sujet séparé, ce sera plus vivant)

Je me disais aussi, le sujet est pertinent mais bien sûr pas le fait qu'il vaille la peine d'encombrer le forum, peut-être que ce n'est pas intéressant pour beaucoup de gens. Je suis intéressé, j'aime écrire du code en C++.