Vérification du stop minimum dans les EAs publiés sur la place de marché. - page 12

 
Igor Volodin:

Vous ne pouvez pas diviser par un point de cette façon, la valeur de la fonctionSymbolInfoDouble(symToWorkmodify,SYMBOL_POINT) peut être égale à zéro.
Cela vaut également pour les autres fonctions du marché.

Par exemple, l'utilisation deAccountInfoInteger(ACCOUNT_LEVERAGE) dans les calculs a provoqué le crash de certains Expert Advisors au championnat 2010 avec l'erreurZero divide, lorsque cette fonction a retourné 0 dans OnInit.

Si vous regardez la référence,SymbolInfoDouble(), SymbolInfoInteger() doivent toujours être vérifiés pour les erreurs.
 
Vladimir Gribachev:

Si c'est si mauvais, voilà

Une fois de plus, veuillez noter que le sujet concerne une situation où le stoplevel est égal à 0. Vous avez cité un résultat de test avec un stoplevel supérieur à zéro.

Et si c'est si grave, comme le souligne à juste titreAndrey F. Zelinsky

vous pouvez ajouter un contrôle pour la 130e erreur et ajouter +1 aux arrêts. Mais cela n'a pas de sens du tout.
La vérification de l'erreur 130 est une pratique normale, comme toute autre erreur dans le programme. Mais ajouter 1 aux arrêts, premièrement, ne sert à rien, deuxièmement, est une mauvaise solution.
 
Ihor Herasko:

Une fois de plus, veuillez noter que le sujet traite de la situation où le stoplevel est égal à 0. Vous avez donné un résultat de test avec un stoplevel supérieur à zéro.

Montrez-moi où sur le serveur MetaQuotes-Demo stoplevel = 0

même si le niveau d'arrêt = 0, alors le stop loss minimum est égal à la valeur du spread.

Si le spread = 0 aussi, alors montrez-moi un tel courtier et j'irai là-bas pour couper mon argent.

La vérification de l'erreur 130 est une pratique normale, comme toute autre erreur dans le programme. Quant à ajouter 1 aux arrêts, premièrement cela ne sert à rien, deuxièmement c'est une mauvaise décision.

Qui a dit que c'était bon.

J'ai posté le code de vérification, vous avez mis des hiboux pour la vérification, j'ai montré que sur le serveur où les modérateurs vérifient cette vérification fonctionne.

Si vous devez vous moquer du système et ne pas trouver une solution que le topikstarter voulait, vous devez créer un nouveau sujet intitulé "Faisons sauter les cerveaux !

ZS. Le gardien du sujet avait besoin d'une solution pour être testé sur le marché. Les modérateurs testent sur leur serveur, pas sur Alps ou ailleurs.

 
Vladimir Gribachev:

Si le spread est également de 0, alors montrez-moi un tel courtier et j'irai là-bas pour couper de l'argent.

Non, vous ne le ferez pas, il y aura une commission.
 

:-) Je l'ai lu et j'ai souri.


Je n'ai pas demandé ce qu'il faut faire si le serveur renvoie 0, modérez votre ego - je m'adresse spécifiquement à une personne, elle le comprendra ou non - mais cela n'a pas d'importance.

Le post n'a pas été écrit dans un but de communication, mais pour des exemples spécifiques de programmeurs qui mettent leurs produits sur le marché, il est étrange d'entendre un homme qui n'a jamais vendu un seul produit - sur ce qu'il faut faire et ce qu'il ne faut pas faire.

LE SUJET PORTE SUR LA VÉRIFICATION SUR LE MARCHÉ.

Nous ne parlons pas de ce qu'un EA doit vérifier et de la manière de traiter les erreurs. - Je suis d'accord avec ça.

 
Vladislav Andruschenko:

Je n'ai pas demandé ce qu'il faut faire si le serveur renvoie 0.

Alors vous auriez dû être plus clair dans l'objet du message :

Actuellement, 90 % des courtiers ont des spreads flottants et des minstops et rapportent 0.

 
Ihor Herasko:

Alors vous devez être plus clair dans le fil de discussion :

Je demandais comment contourner l'erreur de la place de marché si le serveur renvoie 0 - et lors de la vérification dans macret le modérateur met stoploss = 1, mais l'EA ne peut pas passer au stop min car il est à 0, - il est flottant.

Il est clair que l'EA renvoie l'erreur 130 et dit que le stoploss est faux, faites des changements, mais sur le marché, cette commande ne fonctionne pas.

mon message ressemblait à ça :

Bonjour à tous, mes amis!

ily a une caractéristique de la place de marché : vous devez vérifier toutes les valeurs pour l'arrêt minimum.

Si la valeur de la variable est inférieure à la butée minimale, il faut alors assigner une butée minimale, de manière à ce qu'il n'y ait pas d'erreur 130.

Actuellement, 90% des courtiers ont un spread flottant et un STOP min et un rendement de 0.

Il existe une construction de code qui affecte toutes les variables à l'arrêt min.

 int OnInitLevels(string symToWorkmodify)
  {
   if(lot<SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MIN))lots=SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MIN);else
   if(lot>SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MAX))lots=SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MAX);else lots=lot;
   if(StopLoss>0 && StopLoss<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))StopLosss=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else StopLosss=StopLoss;
   if(TakeProfit>0 && TakeProfit<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TakeProfits=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TakeProfits=TakeProfit;
   if(TrailingStop>0 && TrailingStop<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TrallingStops=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TrallingStops=TrailingStop;
   if(TakeProfitALL>0 && TakeProfitALL<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TakeProfitsAver=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TakeProfitsAver=(int)TakeProfitALL;
   if(TrailingStop>0 && TrailingStop<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TrallingStops=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TrallingStops=TrailingStop;
   return(0);
  }

Mais cela ne fonctionne plus sur le marché, car minstop = 0 partout maintenant,

Qui s'occupe de ce problème ?

 
Vladimir Gribachev:

Montrez-moi où sur le serveur MetaQuotes-Demo stoplevel = 0

Pas sur le serveur MetaQuotes, mais sur le chèque de la place de marché (voir le premier message du fil de discussion) :

mais il ne passe plus sur le marché, car maintenant min stoplevel = 0 partout ,

Vladimir Gribachev:

même si min stoploss = 0, alors le min stop loss est égal au spread.

Ce n'est pas un fait. Il pourrait y avoir 2 ou 3 écarts. Peut-être n'avez-vous tout simplement pas rencontré de telles situations. Mais cela ne signifie pas qu'ils n'existent pas. Si vous ne savez pas de quoi je parle, vous pouvez essayer de les éviter.

 
Ihor Herasko:

Pas sur le serveur MetaQuotes, mais lors de la vérification sur le marché (voir le premier message du fil de discussion) :

Ce n'est pas un fait. Il peut y avoir 2 ou 3 écarts. Peut-être n'avez-vous jamais rencontré de telles situations. Mais cela ne veut pas dire qu'ils n'existent pas. La situation chez le courtier que j'ai mentionné est exactement la même.

C'est justement ça le problème, fixer un stop min dur pour les écarts 1-2-3 est une excuse.

vous avez besoin d'une vraie solution au problème des arrêts flottants.

Ils ne savent pas quel type d'arrêt flottant ils ont, mais ils ne vous disent pas comment le faire. Je suis désolé. Ou il ne veut pas me le dire.

 

Je pense que vous devriez être clair sur la question :)). En attendant, vous êtes confus :

я не спрашивал что делать если сервер возвращает 0

et par la poste :

Je voulais savoir comment contourner l'erreur de la place de marché si le serveur renvoie 0.

Raison: