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

 
Vladimir Gribachev:

Eh bien, sur le serveur MetaQuotes-Demo (où le modérateur effectue des tests), le niveau de stop min. revient normalement. Vérifiez par vous-même, 0 ne le fera pas.

Je ne sais pas sur quel serveur est testé le modérateur mais le démarreur topik vérifiait un niveau d'arrêt et il a renvoyé le produit à l'amélioration de l'erreur 130. Lisez le fil de discussion depuis le début.
 
Vitalii Ananev:
Je ne sais pas sur quel serveur le modérateur de test mais le sujet de départ avait une vérification pour un niveau d'arrêt et le produit lui a été retourné pour amélioration à cause d'une erreur 130. Lisez le fil de discussion depuis le début.

Dans son cas, 130 peut ne pas se produire uniquement lorsque les hiboux tentent de placer un stop loss trop près du marché.

Il est préférable de vérifier directement lors de l'envoi ou de la modification d'un slp.

 
Vladimir Gribachev:

Question, pourquoi mettre un stop loss de 1 point sur le réel?

Je viens de me rappeler... Une fois que j'ai testé un tel algorithme avec un stop loss minimum, le contrôle est fondamentalement le même et il n'y a eu aucune erreur ainsi qu'aucun profit.

Le vendeur de 60 produits Marketplace -- qui a écrit 80 tâches en freelance -- a un site avec des annonces pour écrire des EA -- et tout cela n'est pas la première année -- est le topicstarter.

Et soudain, le topicstarter demande ce qu'il faut faire à propos du zéro stoplevelling et dit que les modérateurs de la place de marché vérifient bizarrement les EA de la place de marché.

Contrairement à ses commentaires, les utilisateurs du forum qui ont une expérience du développement, qui ont une expérience de la mise sur le marché de produits, lisent ses commentaires et sont perplexes.

Il me semble que l'auteur du sujet est dans un état d'inadéquation totale et a carrément aspiré le problème de sa main.

 
Andrey F. Zelinsky:

Le vendeur de 60 produits sur le marché -- qui a rédigé 80 tâches en freelance local -- qui a un site web faisant de la publicité pour la rédaction d'EA -- et tout cela est loin d'être la première année -- est le lanceur de sujets.

Et soudain, le topicstarter demande ce qu'il faut faire pour éviter le stoplevelling et dit que les modérateurs de la place de marché vérifient bizarrement les conseillers de la place de marché.

Contrairement à ses commentaires, les utilisateurs du forum qui ont une expérience du développement, qui ont une expérience de la mise sur le marché de produits, lisent ses commentaires et sont perplexes.

Il me semble que l'auteur du sujet est dans un état d'inadéquation totale et a carrément aspiré le problème de sa main.

Peut-être qu'il veut juste communiquer ? ) la programmation de bots est une activité très solitaire
 
lilita bogachkova:

le code affiché ici :

double point=SymbolInfoDouble(symToWorkmodify,SYMBOL_POINT);
int spread=(ask-bid)/point;

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 du championnat 2010 a provoqué le plantage de certains EA avec une erreur dedivision par zéro, alors que cette fonction renvoyait 0 dans OnInit.

 
Vladimir Gribachev:

Question, pourquoi mettre un stop loss de 1 point sur le réel?

Je viens de me rappeler... J'ai testé une fois un algorithme similaire avec un stop-loss minimum, le contrôle était fondamentalement le même et il n'y a pas eu d'erreurs, ni de profits.

Regardez à la racine du problème. Il ne s'agit pas de savoir pourquoi je fixe un stop loss de 1 pip. Le fait est que le stop loss peut être inférieur au stop loss qui est caché par le courtier et calculé sur la base de la largeur du spread.

Pour clarifier l'essence du problème, je vous montre un Conseiller Expert qui utilise votre algorithme pour vérifier les stops :

#property strict
//--- input parameters
input int      i_slSize          = 10;
input int      i_tpSize          = 10;
input int      i_magicNumber     = 32847623;

int OnInit()
{
   Print("Величина стоплевел: ", MarketInfo(_Symbol,MODE_STOPLEVEL));
   return(INIT_SUCCEEDED);
}

int GetExpertOrderTicket()
{
   for (int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS))          
         continue;
         
      if (OrderSymbol() != Symbol())
         continue;   
         
      if (OrderMagicNumber() != i_magicNumber)
         continue;
         
      if (OrderType() == OP_BUY)
         return OrderTicket();
   }
   
   return -1;
}

void OnTick()
{
   int ticket = GetExpertOrderTicket();
   if (ticket < 0)
   {
      ticket = OrderSend(Symbol(), OP_BUY, 0.01, Ask, 30, 0.0, 0.0, NULL, i_magicNumber);
      return;
   }
      
   if (!OrderSelect(ticket, SELECT_BY_TICKET) || OrderCloseTime() != 0 || OrderStopLoss() > 0.0 || OrderTakeProfit() > 0.0)
      return;
      
   double SL=NormalizeDouble(OrderOpenPrice()-MathMax(i_slSize,(int)MarketInfo(_Symbol,MODE_STOPLEVEL))*_Point,_Digits);
   double TP=NormalizeDouble(OrderOpenPrice()+MathMax(i_tpSize,(int)MarketInfo(_Symbol,MODE_STOPLEVEL))*_Point,_Digits);
   
   bool result = OrderModify(ticket, 0.0, SL, TP, 0);
}

Résultat du test d'un tel conseiller expert :

0       14:52:30.354    Expert CheckStopLevel EURUSD,H1: removed
0       14:52:30.372    Expert CheckStopLevel EURUSD,H1: loaded successfully
0       14:52:30.390    Tester: template 'D:\ForexDC\Alpari\templates\tester.tpl' applied
0       14:52:30.395    TestGenerator: current spread 10 used
2       14:52:32        2015.01.12 00:00  CheckStopLevel inputs: i_slSize=10; i_tpSize=10; i_magicNumber=32847623; 
0       14:52:32        2015.01.12 00:00  CheckStopLevel EURUSD,H1: Величина стоплевел: 0.0
2       14:52:32        2015.01.12 00:00  CheckStopLevel EURUSD,H1: open #1 buy 0.01 EURUSD at 1.18674 ok
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:36        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130

Comme on peut le constater, la méthode ne passe pas le test élémentaire.

 
Ihor Herasko:

Allez à la racine du problème. Il ne s'agit pas de savoir pourquoi vous devriez mettre un stoploss d'un point. Il s'agit de...

Si l'on veut aller à la racine du problème, il faut faire la distinction entre a) "tromper l'acheteur promoteur" et b) compter sur le fait que l'acheteur est un idiot. Ce sont des protections différentes.

Aucun acheteur sain d'esprit ne mettrait une prise négative et s'arrêterait. Par conséquent, vérifier "comment l'EA va réagir à un stop and take négatif", c'est compter sur le fait que l'acheteur est un idiot.

Créer un EA dans lequel un take et un stop définis par l'utilisateur sont appliqués en augmentant en permanence d'une valeur incompréhensible de "2 spreads" - c'est de la "foolproofing" - seulement une protection contre un "fool of a developer".

Surtout si le développeur met une telle protection afin de passer la modération du marché.

 
Andrey F. Zelinsky:

Si vous regardez à la racine du problème, vous devez faire la distinction entre a) "tromper l'acheteur promoteur" et b) compter sur le fait que l'acheteur est un idiot. Ce sont des protections différentes.

Aucun acheteur sain d'esprit ne mettrait une prise négative et s'arrêterait. Par conséquent, vérifier "comment l'EA va réagir à un stop and take négatif", c'est compter sur le fait que l'acheteur est un idiot.

Créer un EA dans lequel le take et le stop définis par l'utilisateur sont forcés d'augmenter continuellement d'un montant incompréhensible de "2 spreads" est "infaillible", mais seulement infaillible en n'achetant pas le produit du "développeur infaillible".

Pensez-vous qu'il y ait beaucoup de personnes saines d'esprit ici ? :) Surtout parmi les acheteurs.
 
Ihor Herasko:

Allez à la racine du problème. Il ne s'agit pas de savoir pourquoi vous devriez mettre un stop loss de 1 pip. Il s'agit du fait que le stop loss peut être inférieur au stop loss, qui est caché par le courtier et est calculé sur la base de la largeur du spread.

Pour clarifier le problème, je vous montre un Expert Advisor qui utilise votre algorithme pour vérifier les stops :

Résultat du test d'un tel conseiller expert :

Comme on peut le constater, la méthode ne passe pas le contrôle élémentaire.

Si c'est si grave, voici

#property strict
//--- input parameters
input int      i_slSize          = 10;
input int      i_tpSize          = 10;
input int      i_magicNumber     = 32847623;

int OnInit()
{
   Print("Величина стоплевел: ", MarketInfo(_Symbol,MODE_STOPLEVEL));
   return(INIT_SUCCEEDED);
}

int GetExpertOrderTicket()
{
   for (int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS))          
         continue;
         
      if (OrderSymbol() != Symbol())
         continue;   
         
      if (OrderMagicNumber() != i_magicNumber)
         continue;
         
      if (OrderType() == OP_BUY)
         return OrderTicket();
   }
   
   return -1;
}

void OnTick()
{
   int ticket = GetExpertOrderTicket();
   if (ticket < 0)
   {
      ticket = OrderSend(Symbol(), OP_BUY, 0.01, Ask, 30, 0.0, 0.0, NULL, i_magicNumber);
      return;
   }
      
   if (!OrderSelect(ticket, SELECT_BY_TICKET) || OrderCloseTime() != 0 || OrderStopLoss() > 0.0 || OrderTakeProfit() > 0.0)
      return;
      
   double SL=NormalizeDouble(Bid-MathMax(i_slSize,(int)MarketInfo(_Symbol,MODE_STOPLEVEL))*_Point,_Digits);
   double TP=NormalizeDouble(Bid+MathMax(i_tpSize,(int)MarketInfo(_Symbol,MODE_STOPLEVEL))*_Point,_Digits);
   
   bool result = OrderModify(ticket, 0.0, SL, TP, 0);
}

journal

2016.03.16 15:09:35.611 GBPUSD,H1: 94 tick events (1095 bars, 286082 bar states) processed in 0:00:06.037 (total time 0:00:10.109)
2016.03.16 15:09:35.611 2016.03.01 00:12  Tester: order #14  is closed
2016.03.16 15:09:35.588 2016.03.01 00:12  Tester: stop button pressed
2016.03.16 15:09:35.547 2016.03.01 00:12  abcd GBPUSD,H1: modify #14  buy 0.01 GBPUSD at 1.39165 sl: 1.39130 tp: 1.39154 ok
2016.03.16 15:09:35.483 2016.03.01 00:12  abcd GBPUSD,H1: open #14  buy 0.01 GBPUSD at 1.39165 ok
2016.03.16 15:09:35.483 2016.03.01 00:12  Tester: take profit #13  at 1.39144 (1.39144 / 1.39165)
2016.03.16 15:09:35.099 2016.03.01 00:12  abcd GBPUSD,H1: modify #13  buy 0.01 GBPUSD at 1.39156 sl: 1.39120 tp: 1.39144 ok
2016.03.16 15:09:35.035 2016.03.01 00:11  abcd GBPUSD,H1: open #13  buy 0.01 GBPUSD at 1.39156 ok
2016.03.16 15:09:35.035 2016.03.01 00:11  Tester: stop loss #12  at 1.39148 (1.39135 / 1.39156)
2016.03.16 15:09:34.971 2016.03.01 00:11  abcd GBPUSD,H1: modify #12  buy 0.01 GBPUSD at 1.39171 sl: 1.39148 tp: 1.39172 ok
2016.03.16 15:09:34.907 2016.03.01 00:11  abcd GBPUSD,H1: open #12  buy 0.01 GBPUSD at 1.39171 ok
2016.03.16 15:09:34.907 2016.03.01 00:11  Tester: take profit #11  at 1.39143 (1.39150 / 1.39171)
2016.03.16 15:09:34.267 2016.03.01 00:10  abcd GBPUSD,H1: modify #11  buy 0.01 GBPUSD at 1.39147 sl: 1.39119 tp: 1.39143 ok
2016.03.16 15:09:34.203 2016.03.01 00:10  abcd GBPUSD,H1: open #11  buy 0.01 GBPUSD at 1.39147 ok
2016.03.16 15:09:34.203 2016.03.01 00:10  Tester: stop loss #10  at 1.39132 (1.39126 / 1.39147)
2016.03.16 15:09:33.947 2016.03.01 00:10  abcd GBPUSD,H1: modify #10  buy 0.01 GBPUSD at 1.39174 sl: 1.39132 tp: 1.39156 ok
2016.03.16 15:09:33.883 2016.03.01 00:10  abcd GBPUSD,H1: open #10  buy 0.01 GBPUSD at 1.39174 ok
2016.03.16 15:09:33.883 2016.03.01 00:10  Tester: stop loss #9  at 1.39157 (1.39153 / 1.39174)
2016.03.16 15:09:33.435 2016.03.01 00:09  abcd GBPUSD,H1: modify #9  buy 0.01 GBPUSD at 1.39186 sl: 1.39157 tp: 1.39181 ok
2016.03.16 15:09:33.371 2016.03.01 00:09  abcd GBPUSD,H1: open #9  buy 0.01 GBPUSD at 1.39186 ok
2016.03.16 15:09:33.371 2016.03.01 00:09  Tester: take profit #8  at 1.39163 (1.39165 / 1.39186)
2016.03.16 15:09:32.603 2016.03.01 00:06  abcd GBPUSD,H1: modify #8  buy 0.01 GBPUSD at 1.39173 sl: 1.39139 tp: 1.39163 ok
2016.03.16 15:09:32.539 2016.03.01 00:06  abcd GBPUSD,H1: open #8  buy 0.01 GBPUSD at 1.39173 ok
2016.03.16 15:09:32.539 2016.03.01 00:06  Tester: take profit #7  at 1.39152 (1.39152 / 1.39173)
2016.03.16 15:09:32.346 2016.03.01 00:06  abcd GBPUSD,H1: modify #7  buy 0.01 GBPUSD at 1.39173 sl: 1.39128 tp: 1.39152 ok
2016.03.16 15:09:32.282 2016.03.01 00:06  abcd GBPUSD,H1: open #7  buy 0.01 GBPUSD at 1.39173 ok
2016.03.16 15:09:32.282 2016.03.01 00:06  Tester: take profit #6  at 1.39148 (1.39152 / 1.39173)
2016.03.16 15:09:32.025 2016.03.01 00:05  abcd GBPUSD,H1: modify #6  buy 0.01 GBPUSD at 1.39155 sl: 1.39124 tp: 1.39148 ok
2016.03.16 15:09:31.961 2016.03.01 00:05  abcd GBPUSD,H1: open #6  buy 0.01 GBPUSD at 1.39155 ok
2016.03.16 15:09:31.961 2016.03.01 00:05  Tester: stop loss #5  at 1.39140 (1.39134 / 1.39155)
2016.03.16 15:09:31.249 2016.03.01 00:04  abcd GBPUSD,H1: modify #5  buy 0.01 GBPUSD at 1.39170 sl: 1.39140 tp: 1.39164 ok
2016.03.16 15:09:31.185 2016.03.01 00:04  abcd GBPUSD,H1: open #5  buy 0.01 GBPUSD at 1.39170 ok
2016.03.16 15:09:31.185 2016.03.01 00:04  Tester: take profit #4  at 1.39147 (1.39149 / 1.39170)
2016.03.16 15:09:30.801 2016.03.01 00:02  abcd GBPUSD,H1: modify #4  buy 0.01 GBPUSD at 1.39159 sl: 1.39123 tp: 1.39147 ok
2016.03.16 15:09:30.737 2016.03.01 00:01  abcd GBPUSD,H1: open #4  buy 0.01 GBPUSD at 1.39159 ok
2016.03.16 15:09:30.737 2016.03.01 00:01  Tester: take profit #3  at 1.39136 (1.39138 / 1.39159)
2016.03.16 15:09:30.481 2016.03.01 00:01  abcd GBPUSD,H1: modify #3  buy 0.01 GBPUSD at 1.39143 sl: 1.39112 tp: 1.39136 ok
2016.03.16 15:09:30.417 2016.03.01 00:01  abcd GBPUSD,H1: open #3  buy 0.01 GBPUSD at 1.39143 ok
2016.03.16 15:09:30.417 2016.03.01 00:01  Tester: stop loss #2  at 1.39126 (1.39122 / 1.39143)
2016.03.16 15:09:30.225 2016.03.01 00:00  abcd GBPUSD,H1: modify #2  buy 0.01 GBPUSD at 1.39156 sl: 1.39126 tp: 1.39150 ok
2016.03.16 15:09:30.161 2016.03.01 00:00  abcd GBPUSD,H1: open #2  buy 0.01 GBPUSD at 1.39156 ok
2016.03.16 15:09:30.161 2016.03.01 00:00  Tester: take profit #1  at 1.39135 (1.39135 / 1.39156)
2016.03.16 15:09:29.647 2016.03.01 00:00  abcd GBPUSD,H1: modify #1  buy 0.01 GBPUSD at 1.39148 sl: 1.39111 tp: 1.39135 ok
2016.03.16 15:09:29.583 2016.03.01 00:00  abcd GBPUSD,H1: open #1  buy 0.01 GBPUSD at 1.39148 ok
2016.03.16 15:09:29.583 2016.03.01 00:00  abcd GBPUSD,H1: Величина стоплевел: 12.0
2016.03.16 15:09:29.574 2016.03.01 00:00  abcd inputs: i_slSize=10; i_tpSize=10; i_magicNumber=32847623; 
2016.03.16 15:09:27.513 TestGenerator: current spread 21 used

et aucun problème.

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

Si vous voulez aggraver une EE uniquement pour aller à la modération de la Place du marché, c'est inadéquat.

Si mon EA n'a pas été vérifié pour la 130ème erreur et ajoute +1 aux stops. Mais c'est juste une absurdité.
 
Maxim Dmitrievsky:
Pensez-vous qu'il y ait beaucoup de personnes saines d'esprit ici ? :) Surtout parmi les acheteurs.

Je pense que si vous faites des recherches, il y a plus d'acheteurs sains d'esprit que de promoteurs sains d'esprit.

L'acheteur peut se tromper. On peut faire comprendre au client. Ils peuvent être persuadés.

Mais si le développeur a un problème avec le bon sens, il ne peut pas être résolu.

Affecter la fonctionnalité du conseiller expert uniquement pour aller sur le marché - c'est inadéquat.