Une fois que vous aurez nettoyé votre code, il sera plus lisible pour vous, sans parler des autres personnes qui doivent comprendre votre logique. C'est là que l'on verra tous les bugs.
OK, c'est mieux ?
Maintenant, supprimez les accolades appariées inutiles et disposez le reste normalement en blocs, et vous verrez où vous avez des défauts de logique.
Artyom Trishkin: Maintenant, enlevez les crochets appariés supplémentaires et disposez le reste normalement dans des blocs, et vous verrez où votre logique est défectueuse.
Artyom Trishkin: Vous avez beaucoup d'accolades inutiles dans votre code - traitez le code avec un stylet, et vous verrez immédiatement les accolades vides supplémentaires.
1.count++ ; // compte les ticks depuis le début du programme
Meilleure méthode : if(count<=20) count++ ; - pourquoi compter davantage si vous n'avez besoin que de 21 ?
2.
if(count>20) // если количество тиков больше начинаем работу ... и дальше код эксперта { if(Bars<801 || (IsTradeAllowed()==false)) //--- Проверим достаточна ли в истории баров для анализа и разрешение торговли Print("Нет достаточного количества баров или торговля на текущем инструменте запрещена"); return; }
Et voici le wigwam. Cela ne vérifiera le nombre de barres et n'imprimera que sile compte >20, le reste du code fonctionnera si lecompte<=20.
Si vous n'avez besoin de prendre en compte que les marchés (et c'est ce que vous attendez de la suite du code), vous n'avez pas besoin decontinuer du tout.
2 ce n'est pas ok, les blocs suivants ne devraient pas fonctionner àcount<20
3 OK, je vais le corriger
4 Oui, c'est une minute mais elle ne doit être lancée que s'il n'y a plus d'ordres de marché pour le symbole en cours. J'ai essayé de l'implémenter par le biais d'un résultat négatif de la sélection de l'ordre, c'est pourquoi nous devrions définir le retour quelque part, mais le retour dans void OnTick() ne semble pas très bon. Et encore une fois, OrdersTotal() donnera un résultat erroné si nous avons beaucoup d'ordres pour tous les symboles.
2 n'est pas OK, les blocs suivants ne devraient pas fonctionner lorsquecount<20
Ensuite, nous devons ajouter else return après le bloc ;
4 Oui, c'est une minute mais elle ne doit être lancée que s'il n'y a plus d'ordres de marché pour le symbole en cours. J'ai essayé de l'implémenter à travers un résultat négatif de la sélection des ordres, c'est pourquoi nous devrions définir le retour quelque part, alors que le retour dans void OnTick() ne semble pas très bon. Et encore une fois, OrdersTotal() donnera un résultat erroné si nous avons beaucoup d'ordres sur tous les symboles.
Pourquoi avons-nous besoin de trois sons ?
Eh bien, nous pouvons tout faire en deux étapes : dans la première boucle, vous fermez les ordres et dans la suivante, vous recalculez tous les ordres au marché pour vérifier s'il en reste, et s'il n'y en a pas, les fanfares jouent.
Mais je ne comprends toujours pas quel est le truc avec la musique après la clôture des commandes. Bon, vous pouvez imprimer un journal, envoyer un message par courrier ou une notification sur votre smartphone, mais pourquoi transformer un EA en boîte à musique ?
Ensuite, vous devez ajouter un retour après le bloc else return;
Pourquoi avons-nous besoin de trois fois plus de son ?
Mais vous pouvez tout faire en deux étapes : dans la première boucle, vous fermez les ordres, et dans la suivante, vous recalculez tous les ordres au marché pour vérifier s'il y en a qui ne sont pas fermés, et s'il n'y en a pas, la fanfare joue.
Je ne comprends toujours pas quel est le truc avec la musique lorsque les commandes ont été clôturées. Bien, nous pouvons l'imprimer sur le journal, envoyer un message par courrier ou le notifier sur le smartphone, mais pourquoi devrions-nous transformer notre EA en boîte à musique ?
Comment séparez-vous les cycles ?
Comment lier le son au dernier ordre clôturé ? Parce que s'il n'y a pas d'ordre, le conseiller expert ne déclenchera pas de son.
Et une dernière chose : je suis content de la musique pour l'instant.
Comment lier le son au dernier ordre fermé ? car s'il n'y a pas d'ordre, l'Expert Advisor ne fonctionnera pas.
Et enfin, je suis content de la musique pour l'instant.
Que voulez-vous dire par "séparé" ? Nous n'avons pas besoin de séparer quoi que ce soit. Nous avons juste besoin de deux boucles (elles sont presque les mêmes) mais l'une a OrderClose() et l'autre a un compteur d'ordres. Le critère de sélection des commandes est le même. Si le compteur est=0, toutes les commandes ont été fermées et nous pouvons jouer de la musique.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Une fois que vous aurez nettoyé votre code, il sera plus lisible pour vous, sans parler des autres personnes qui doivent comprendre votre logique. C'est là que l'on verra tous les bugs.
Maintenant, enlevez les crochets appariés supplémentaires et disposez le reste normalement dans des blocs, et vous verrez où votre logique est défectueuse.
Lesquelles sont redondantes ?
Vous avez beaucoup d'accolades inutiles dans votre code - traitez le code avec un stylet, et vous verrez immédiatement les accolades vides supplémentaires.
Terminé
Fabriqué par
Meilleure méthode : if(count<=20) count++ ; - pourquoi compter davantage si vous n'avez besoin que de 21 ?
2.{
if(Bars<801 || (IsTradeAllowed()==false)) //--- Проверим достаточна ли в истории баров для анализа и разрешение торговли
Print("Нет достаточного количества баров или торговля на текущем инструменте запрещена");
return;
}
Et voici le wigwam. Cela ne vérifiera le nombre de barres et n'imprimera que sile compte >20, le reste du code fonctionnera si lecompte<=20.
3.
if(OrderSymbol()==Symbol() && OrderType()<2)
continue;
Si vous n'avez besoin de prendre en compte que les marchés (et c'est ce que vous attendez de la suite du code), vous n'avez pas besoin decontinuer du tout.
4.
{
dummy=(OrderClose(OrderTicket(),OrderLots(),Bid,0,White));
{
if((dummy==true) && ((OrderSelect(i,SELECT_BY_POS,MODE_TRADES))==false))
PlaySound("music");
Sleep(20000);
PlaySound("music");
Sleep(20000);
PlaySound("music");
Sleep(20000);
dummy=false;
ExpertRemove();
}
}
Il ferme une commande et s'élimine lui-même ? Et s'il y en a d'autres ? Et nous avons une minute entière pour dormir.
Je n'ai pas regardé le code ci-dessus, il n'y a pas encore d'endroit pour le tester.
1 ok, je vais le corriger
2 ce n'est pas ok, les blocs suivants ne devraient pas fonctionner àcount<20
3 OK, je vais le corriger
4 Oui, c'est une minute mais elle ne doit être lancée que s'il n'y a plus d'ordres de marché pour le symbole en cours. J'ai essayé de l'implémenter par le biais d'un résultat négatif de la sélection de l'ordre, c'est pourquoi nous devrions définir le retour quelque part, mais le retour dans void OnTick() ne semble pas très bon. Et encore une fois, OrdersTotal() donnera un résultat erroné si nous avons beaucoup d'ordres pour tous les symboles.
2 n'est pas OK, les blocs suivants ne devraient pas fonctionner lorsquecount<20
Ensuite, nous devons ajouter else return après le bloc ;
4 Oui, c'est une minute mais elle ne doit être lancée que s'il n'y a plus d'ordres de marché pour le symbole en cours. J'ai essayé de l'implémenter à travers un résultat négatif de la sélection des ordres, c'est pourquoi nous devrions définir le retour quelque part, alors que le retour dans void OnTick() ne semble pas très bon. Et encore une fois, OrdersTotal() donnera un résultat erroné si nous avons beaucoup d'ordres sur tous les symboles.
Pourquoi avons-nous besoin de trois sons ?
Eh bien, nous pouvons tout faire en deux étapes : dans la première boucle, vous fermez les ordres et dans la suivante, vous recalculez tous les ordres au marché pour vérifier s'il en reste, et s'il n'y en a pas, les fanfares jouent.
Mais je ne comprends toujours pas quel est le truc avec la musique après la clôture des commandes. Bon, vous pouvez imprimer un journal, envoyer un message par courrier ou une notification sur votre smartphone, mais pourquoi transformer un EA en boîte à musique ?Ensuite, vous devez ajouter un retour après le bloc else return;
Pourquoi avons-nous besoin de trois fois plus de son ?
Mais vous pouvez tout faire en deux étapes : dans la première boucle, vous fermez les ordres, et dans la suivante, vous recalculez tous les ordres au marché pour vérifier s'il y en a qui ne sont pas fermés, et s'il n'y en a pas, la fanfare joue.
Je ne comprends toujours pas quel est le truc avec la musique lorsque les commandes ont été clôturées. Bien, nous pouvons l'imprimer sur le journal, envoyer un message par courrier ou le notifier sur le smartphone, mais pourquoi devrions-nous transformer notre EA en boîte à musique ?Comment séparez-vous les cycles ?
Comment lier le son au dernier ordre clôturé ? Parce que s'il n'y a pas d'ordre, le conseiller expert ne déclenchera pas de son.
Et une dernière chose : je suis content de la musique pour l'instant.
Comment séparer les cycles ?
Comment lier le son au dernier ordre fermé ? car s'il n'y a pas d'ordre, l'Expert Advisor ne fonctionnera pas.
Et enfin, je suis content de la musique pour l'instant.
Que voulez-vous dire par "séparé" ? Nous n'avons pas besoin de séparer quoi que ce soit. Nous avons juste besoin de deux boucles (elles sont presque les mêmes) mais l'une a OrderClose() et l'autre a un compteur d'ordres. Le critère de sélection des commandes est le même. Si le compteur est=0, toutes les commandes ont été fermées et nous pouvons jouer de la musique.
J'ai également remarqué que la condition
{
if((Bid>=ma1-X*Point && Bid<ma1) || (Bid<=ma1+X*Point && Bid>ma1))
{
{y=true;}
}
}
Il ne semble pas être lié à un certain ordre, alors à quoi sert-il dans la boucle ?
Je le vérifierais avant la boucle de fermeture.