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

 
Artyom Trishkin:

Je vous ai déjà répondu :

Vous prenez la dernière commande de la liste :

Et vous devez d'abord déterminer dans quelle mesure le statut de la liste des commandes a changé. Il était de 12, est devenu 8 - il a changé de 4 ordres. En conséquence - vous devez imprimer les quatre commandes. Et vous n'imprimez toujours que le dernier de la liste.

Comment savez-vous à quel point il a changé ? Lorsque vous démarrez l'EA, vous devez écrire le nombre de commandes dans une variable, par exemple, int last_total. Ensuite, à chaque tick, comparez le OrdersTotal() avec le last_total. S'ils ne sont PAS égaux, il s'agit d'un changement. Inscrivez la différence entre OrdersTotal() et last_total dans une variable, par exemple, num_changes et enregistrez le nouvel état de OrdersTotal() dans last_total.
Il peut y avoir quelques subtilités ici, par exemple, lorsqu'un ordre en attente est déclenché. Mais pour l'instant, vous devriez faire ce que vous devez faire en premier.
En connaissant le nombre d'ordres en attente, vous pouvez les consulter dans l'historique. Cependant, vous pouvez également limiter le suivi des ordres dans la liste historique - faites tout ce qui précède pour la liste des ordres historiques, et non pour la liste des ordres au marché. La différence entre ce qui était et ce qui est devenu - c'est le nombre de commandes que vous devez analyser. Vous n'analysez toujours que le dernier ordre de la liste.

Toutefois, cela ne peut garantir que la dernière commande dans la liste historique sera la dernière commande clôturée. Il s'agit également d'une nuance à prendre en compte. Mais alors.

Merci beaucoup. C'est beaucoup plus clair. Mots clés : vous devez imprimer non pas une mais quatre commandes à la fois. Si vous me l'aviez dit dans le premier message, je ne vous aurais pas torturé.

 
ANDREY:

Merci beaucoup. C'est beaucoup plus logique. Les mots clés sont d'imprimer non pas une mais 4 commandes à la fois. Si vous me l'aviez dit dans le premier message, je ne vous aurais pas torturé.

Vous êtes les bienvenus. Tant que vous n'apprendrez pas par vous-même à faire la logique de telle ou telle action, vous ne bougerez pas du point mort - vous demanderez sur le forum. Vous poserez des questions sur le forum. Il ne doit pas être lié aux commandes/listes/tickets etc...

Je pense que si vous utilisiez des pommes, vous pourriez facilement créer un algorithme pour suivre le nombre de pommes sur la table, puis vous sortez fumer et revenez - il y a moins de pommes...
Comment le savez-vous ? Facile - 5 pommes, 3 pommes. Deux sont manquants. Le chat doit avoir... Ou bien il y en avait cinq et maintenant il y en a six. Un est sorti. De l'humidité, peut-être... Dans les deux cas, vous avez compté la différence dans votre esprit.

Alors en quoi la même action est-elle différente du comptage des commandes ? Les mêmes pommes... Au lieu de "dans l'esprit", écrivez "dans la fonction".

 

veuillez indiquer comment retirer la fonction du code(décomposition), s'il y a déjà plus de 200 lignes de code et qu'il est peu pratique de tout parcourir. Je m'intéresse à la "mécanique" : comment la fonction est "décomposée", où elle est écrite, afin de l'appeler plus tard dans le code principal.

Si vous avez un exemple avec une description, j'apprécierais un lien.
 
Alexey Kolybelnikov:

veuillez indiquer comment retirer la fonction du code(décomposition), s'il y a déjà plus de 200 lignes de code et qu'il est peu pratique de tout parcourir. Je m'intéresse à la "mécanique" : comment la fonction est "décomposée", où elle est écrite, afin de l'appeler plus tard dans le code principal.

S'il existe un exemple avec une description, j'apprécierais un lien.

C'était le cas avant :

double a = (b + c) / (d - e);


Devenu :

double a = Add(b,c) / Sub(d,e);

//---------

Add(const double v1,const double v2) { return v1 + v2; }

Sub(const double v1,const double v2) { return v1 - v2; }
 
Artyom Trishkin:

Vous êtes les bienvenus. Tant que vous n'apprendrez pas à formuler la logique d'une action, vous ne sortirez pas du point mort - vous poserez des questions sur le forum. Et la logique ne peut pas être plus simple - elle peut être résumée par des mots simples. Il ne doit pas être lié à des mandats/listes/tickets etc...

Je pense qu'avec les pommes, on peut facilement créer un algorithme pour suivre leur quantité - tout se passe comme dans la vie réelle : on se souvient du nombre de pommes sur la table, on sort fumer une cigarette, et quand on revient, il y a moins de pommes...
Comment le savez-vous ? Facile - 5 pommes, 3 pommes. Deux sont manquants. Le chat doit avoir... Ou bien il y en avait cinq et maintenant il y en a six. Un est sorti. De l'humidité, peut-être... Dans les deux cas, vous avez compté la différence dans votre esprit.

Alors en quoi la même action est-elle différente du comptage des commandes ? Les mêmes pommes... Au lieu de "dans l'esprit", écrivez "dans la fonction".

Compris. Merci pour la clarification. La même question me trotte dans la tête depuis longtemps.... Mon code suppose que lafonction Print() sera imprimée fréquemment dans le journal. Automatiquement dans le journal sera imprimé chaque ordre ouvert et chaque clôture de chaque ordre. J'ai beaucoup de commandes. Par conséquent, il y aurait beaucoup d'enregistrements sur les ordres. Ces entrées me perturbent souvent lorsque je regarde les données de la fonction Print(), qui peuvent également être nombreuses.

Q : .

Comment puis-je faire en sorte que, lorsque j'en ai besoin, les informations relatives aux ordres ouverts et fermés n'apparaissent pas dans le journal, mais uniquement dans la fonction Print().

Cela peut-il être fait à l'aide d'une fonction MQL4 ou dois-je modifier le code du terminal MT4 ?

Merci.
 
ANDREY:

Je l'ai. Merci pour la clarification. La même question me trotte dans la tête depuis longtemps.... Mon code suppose que la fonction Print() sera imprimée dans le journal fréquemment. Automatiquement dans le journal sera imprimé chaque ordre ouvert et chaque fermeture de chaque ordre. J'ai beaucoup de commandes. Par conséquent, il y aurait beaucoup d'enregistrements sur les ordres. Ces entrées me perturbent souvent lorsque je regarde les données de la fonction Print(), qui peuvent également être nombreuses.

Q : .

Comment puis-je faire en sorte que, lorsque j'en ai besoin, les informations relatives aux ordres ouverts et fermés n'apparaissent pas dans le journal, mais uniquement dans la fonction Print().

Peut-on le faire en utilisant une fonction MQL4, ou cela nécessite-t-il des modifications du code du terminal MT4 ?

Merci.

Si vous faites l'enquête, vous feriez mieux de l'écrire dans un dossier. Je ne sais pas comment afficher les actions avec ordres dans le fichier journal et je pense que cela n'existe pas. C'est le niveau des entrées du début et de la fin du fonctionnement de l'EA. Ce sont les entrées du fichier journal. Le fichier ne contiendra que ce que vous voulez, en plus de vos entrées, le journal contiendra les entrées du terminal. Vous pouvez apporter des modifications dans le terminal, vous pouvez même écrire vos propres))) mais combien cela va-t-il coûter ?

 
Alexey Kolybelnikov:

veuillez indiquer comment retirer la fonction du code(décomposition), s'il y a déjà plus de 200 lignes de code et qu'il est peu pratique de tout parcourir. Je m'intéresse à la "mécanique" : comment la fonction est "décomposée", où elle est écrite, afin de l'appeler plus tard dans le code principal.

S'il existe un exemple avec une description, je serais reconnaissant d'avoir un lien.

https://www.mql5.com/ru/docs/runtime/imports

https://www.mql5.com/ru/docs/basis/preprosessor/include

et plus loin sur les liens... En général, mettez tout ce qui est "supplémentaire" dans la bibliothèque *.mqh, au début du code principal. Le compilateur "collera" le tout.

Mais en général, 200 lignes ne sont pas de trop - en utilisant les boutons, vous pouvez vous sentir à l'aise avec plus de mille lignes.

 
Valeriy Yastremskiy:

Si vous effectuez des recherches, il est préférable d'écrire dans un fichier. Je ne sais pas comment montrer les actions des ordres dans le fichier journal et je ne pense pas qu'il y en ait, c'est le niveau des enregistrements de début et de fin de l'EA. Ce sont les entrées du fichier journal. Le fichier ne contiendra que ce que vous voulez, le journal contiendra les enregistrements du terminal en plus des vôtres. Vous pouvez apporter des modifications dans le terminal, vous pouvez même écrire vos propres))) mais combien cela va-t-il coûter ?

Merci pour le conseil. Mais je ne pense pas avoir jamais écrit un EA dans un fichier. J'ai toujours écrit les EAs dans MetaEditor 4. Pour voir ce que Pront() a fait pendant toute la période de test, je choisis Journal - onglet Ouvrir. Un fichier s'ouvre dans le Bloc-notes avec le même contenu que dans l'onglet Journal. Ça ressemble à un fichier journal pour moi.
Mais il me semble que je ne suis pas en mesure de supprimer tous les ordres ouverts et fermés de ce fichier notepad. Pour être plus précis, vous le faites. Mais c'est un travail très fastidieux et qui prend du temps.
Je vous serais très reconnaissant si vous me disiez le secret pour que mon code ouvre et ferme les ordres, mais dans le fichier, les informations sur l'ouverture et la fermeture de tous les ordres n'étaient pas, et il y avait seulement des entrées de la fonction Pront().
Merci pour votre aide.

 
ANDREY:


Savez-vous où je peux en savoir plus sur les dernières mises à jour de MQL4 ? Il y a beaucoup d'informations, mais il est difficile de trouver ce dont on a besoin.

https://www.mql5.com/ru/forum/160683/page1109#comment_15711102

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2020.03.31
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
ANDREY:

Merci pour le conseil. Mais je ne pense pas avoir jamais écrit EA dans un fichier. J'ai toujours écrit l'EA dans MetaEditor 4. Pour voir ce que la fonction Pront() a produit pendant toute la période de test, je sélectionne l'onglet Log - Open. Un fichier s'ouvre dans le Bloc-notes avec le même contenu que dans l'onglet Journal. Il me semble qu'il s'agit d'un fichier journal.
Mais il me semble que je ne suis pas en mesure de supprimer tous les ordres ouverts et fermés de ce fichier dans Notepad. Pour être plus précis, vous le faites. Mais c'est un travail très fastidieux et qui prend du temps.
Je vous serais très reconnaissant si vous me disiez le secret pour que mon code ouvre et ferme les ordres, mais dans le fichier, les informations sur l'ouverture et la fermeture de tous les ordres n'étaient pas, et il y avait seulement des entrées de la fonction Pront().
Merci pour votre aide.

int OnInit()
  {   
//----------
   FileTest() // функция открытия файла записи данных
   point = 1/Point; // чтобы не делить на пойнт
   tx=TimeCurrent();// задание времени начала работы советника
//--- create timer
   EventSetTimer(60);

//---
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {

   FileClose( Handle );                // Закрываем файл
   Alert("Файл ",File_Name," закрыт.");// Сообщение
     
//--- destroy timer
   EventKillTimer();

  }

void OnTick()    // Функция start() раньше называлась
  {
.................
 Qnt_Symb=FileWrite(Handle,Symbol()," ТФ ",Period(),"Открыт ордер Buy по цене ",Ask,
            "Ticket = ",Ticket," ProfB=",ProfB," MxProfB=",MxProfB, " ProfS=",ProfS," MxProfS=",MxProfS);//Запись в файл
            if(Qnt_Symb<=0) // Если не получилось
              {
               Alert("Ошибка записи в файл ",GetLastError());// Сообщение
              };
.................
}
//-------------------------------------------------------------- 12 --

int FileTest()
  {
   Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE,";");//Открытие файла
   if(Handle==-1) // Неудача при открытии файла
     {
      Alert("Ошибка при открытии файла. ",// Сообщение об ошибке
            "Возможно, файл занят другим приложением");

     }

   return(Handle);
  }
//+------------------------------------------------------------------+

Dans le testeur, le fichier sera dans le dossier \tester\files, et si vous le mettez sur la fenêtre, il sera dans le dossier \MQL4\Files. Et Kovalev l'a en détail.

Raison: