Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 287
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
{
double summa=0;
int orders=OrdersHistoryTotal() ;
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Erreur dans l'historique !") ;
break ;
}
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL)
continue ;
//---
if(OrderProfit()>0) break ;
summa=OrderProfit()+summa ;
}
}
Bonjour. S'il vous plaît, aidez-moi avec cette fonction, elle résume les pertes des ordres fermés, metatrader se bloque lorsqu'elle est utilisée avec la fonction des ordres fermés, je pense qu'il y a une sorte d'erreur dans cette fonction.
Il est préférable de regarder les modèles prêts à l'emploi et de les ajuster si nécessaire. GetProfitFromDateInCurrency() (en anglais)
Après-midi. Aide avec la fonction s'il vous plaît, résume la perte des ordres fermés, lorsqu'il est utilisé avec la fonction de fermeture des ordres metatrader se bloque, je pense qu'il ya une sorte d'erreur dans cette fonction.
Comment ça, Metatrader se plante ? Le programme se compile avec des erreurs !!!
A trois endroits, au lieu de "si" avec une petite minuscule, il est écrit "si" avec une majuscule.
une paire de parenthèses est clairement inutile : la première après int orders=OrdersHistoryTotal() ; et sa paire après summa=OrderProfit()+summa ; - mais cela n'a pas d'importance
il y a aussi...
Après-midi. Aide avec cette fonction s'il vous plaît, il résume la perte des ordres fermés, lorsqu'il est utilisé avec la fonction de fermeture des ordres Metatrader se bloque, je pense qu'il ya une sorte d'erreur dans cette fonction.
Essayez ceci :
Compilé avec la directive #property strict - c'est la dernière ligne : i" - identifiant non déclaré. Le fait est que la variable est déclarée dans une boucle et n'est valable que dans cette boucle. Sans la directive #property strict, il compile sans erreur, mais c'est mauvais. La directive doit être utilisée.
Il est plus facile d'écrire if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) au lieu de if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)). L'étape suivante est une pause - c'est la sortie de la boucle. Mais nous devons traiter les autres commandes. Cependant, dans l'histoire, ce n'est pas nécessaire. L'erreur se produit sur les ordres au marché et les ordres en attente, si au moment du traitement, l'ordre a été fermé et qu'il est manquant. La règle générale est la suivante : if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue ; - continuer à traiter les commandes suivantes
Pour la même raison, remplacez if(OrderProfit()>0) break ; par if(OrderProfit()>0) continue ;
Et voici la raison de l'erreur : if(OrderProfit()<0)i++; - if(OrderProfit()>0 ; - l'indice est incrémenté. Et l'en-tête de boucle for(int i=ordres-1;i>=0;i--) le diminue. Le traitement du même ordre est répété et le programme se retrouve dans une boucle. C'est probablement ce qu'il faut faire :
2 minutes de retard en écrivant ... Considérons cette partie attentivement :
Compilé avec la directive #property strict - c'est la dernière ligne : i" - identifiant non déclaré. Le fait est que la variable est déclarée dans une boucle et n'est valable que dans cette boucle. Sans la directive #property strict, il compile sans erreur, mais c'est mauvais. La directive doit être utilisée.
Il est plus facile d'écrire if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) au lieu de if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)). L'étape suivante est une pause - c'est la sortie de la boucle. Mais nous devons traiter les autres commandes. Cependant, dans l'histoire, ce n'est pas nécessaire. L'erreur se produit sur les ordres au marché et les ordres en attente, si au moment du traitement, l'ordre a été fermé et qu'il est manquant. La règle générale est la suivante : if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue ; - continuer à traiter les commandes suivantes
Pour la même raison if(OrderProfit()>0) break ; remplacer par if(OrderProfit()>0) continue ;
Et voici la raison de l'erreur : if(OrderProfit()<0)i++; - if(OrderProfit()>0 ; l'indice est incrémenté. Et l'en-tête de boucle for(int i=ordres-1;i>=0;i--) le diminue. Le traitement du même ordre est répété et le programme se retrouve dans une boucle. C'est probablement ce qu'il faut faire :
Merci, plus de plantage de metatrader) Regarding
if(OrderProfit()>0) break ; remplacer par if(OrderProfit()>0) continue ;
si(OrderProfit()>0) break ;
Je dois arrêter le compteur si l'ordre s'est fermé sur le profit, je le vois correctement ?
Merci, plus de plantage metatrader) Ce dont j'ai besoin c'est que si un ordre se ferme sur le bénéfice, la fonction ne prenne pas en compte ce bénéfice, seulement le montant de la perte et jusqu'au premier ordre fermé sur le bénéfice. I.e.
Je dois arrêter le compteur si l'ordre s'est fermé sur le profit, je le vois correctement ?
Votre raisonnement est presque correct. Il n'y a aucune garantie d'un arrangement de l'ordre dans l'histoire. Pour vous-même - oui, mais pour vendre - mauvais.
S'il y a une source - DROW_NONE - pas de dessin
Cela n'a pas aidé, les chiffres s'affichent toujours dans le coin.
Par ordre d'apparition dans la liste. Mais il n'y a aucune garantie d'ordre dans cette liste.