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

 

Salut à tous, mes amis !

Il y a uneparticularité de Marketplace : nous devons vérifier toutes les valeurs pour l'arrêt min.

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 ?

 

Bien sûr qu'il ne l'est pas )))) Ce n'est pas SL, TP et TS qui doivent être réglés au minimum, mais le niveau de Stop. Et pas seulement une fois au début du programme, mais à chaque tic:

   digits          = (int) SymbolInfoInteger(symbol, SYMBOL_DIGITS);
   point           = SymbolInfoDouble(symbol, SYMBOL_POINT);
   
   tickSize        = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE);
   
   ask             = SymbolInfoDouble(symbol, SYMBOL_ASK);
   bid             = SymbolInfoDouble(symbol, SYMBOL_BID);
   spread          = ask - bid;

   stopLevel       = MarketInfo(symbol, MODE_STOPLEVEL) * point;
   
   if (stopLevel == 0)
   {
      if (!isECN)
         stopLevel = NormalizeDouble(2 * spread, digits);
   }
   else
      stopLevel = NormalizeDouble(stopLevel + tickSize, digits);
isECN - doit être disponible à l'utilisateur pour le réglage. Il existe des comptes comme le "vrai ECN" où il n'y a vraiment aucune limitation sur les distances minimales, c'est-à-dire que les arrêts/profits/positions peuvent être fixés à l'intérieur du spread.
 

Merci. Mais votre conception est la même que la mienne, seulement vous avez multiplié à min stop = 0 juste par le spread*2, mais comme nous savons à beaucoup de courtiers min stop = 3 spread, pourquoi avez-vous fait 2 ?

Je vérifie le stop min à chaque tick.

 
StopLevel ne sera pas utile car il renvoie également zéro, utilisez la différence entre l'offre et la demande, qui peut être multipliée.
 
Alexander Bereznyak:
StopLevel ne m'aide pas, car il renvoie également zéro, j'utilise la différence Ask-Bid.
c'est pour le spread, mais pour le min stop ?
 
et pour un arrêt minute aussi
 
Alexander Bereznyak:
et pour l'arrêt minute, aussi.
Vous faites donc en sorte que le stop min soit égal au spread ?
 
Vladislav Andruschenko:

Salut à tous, mes amis !

Il y a une particularité de Marketplace : nous devons vérifier toutes les valeurs pour l'arrêt min.

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.

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

Qui s'occupe de ce problème ?

En option, introduire une restriction sur la taille minimale des arrêts. Par exemple, dans OnInit(), si un utilisateur définit un stop inférieur à 2 points, il faut donner un avertissement et renvoyer le code INIT_PARAMETERS_INCORRECT.

Une autre option consiste à ne pas permettre à l'utilisateur de contrôler la taille du stop, mais de la calculer dynamiquement dans le conseiller expert en fonction des conditions de trading.

 
comme le courtier indique que le stop minimum est de zéro, il n'y a rien d'autre à faire, vous pouvez prendre le multiplicateur si le spread n'est pas suffisant.
 
Vitalii Ananev:

Vous pouvez également introduire une limite sur la taille minimale des arrêts. Par exemple, dans OnInit(), si un utilisateur définit un stop de moins de 2 pips, il émettra un avertissement et renverra le code INIT_PARAMETERS_INCORRECT.

Une autre option consiste à ne pas permettre à l'utilisateur de contrôler la taille du stop, mais de la calculer dynamiquement dans le conseiller expert en fonction des conditions de trading.

Je suis d'accord - ne pas donner le contrôle, mais vous savez comment c'est exigé par le type : je veux fixer mon propre arrêt.

Je vais réfléchir à la sortie du message - merci.

 
Alexander Bereznyak:
Comme le courtier déclare que le stop min est à zéro, il n'y a rien d'autre à faire, vous pouvez prendre un multiplicateur si l'écart n'est pas suffisant.

Oui, c'est seulement pour le marché - mais il n'y a pas d'universalité pour n'importe quel courtier.

la façon dont cela fonctionne est que vous devez faire un stop min à 3 spreads afin d'être accepté sur le marché,

La seule différence est que le marché les accepte - vous devez faire un stop min et 3 spreads, mais en fait c'est faux - si un stop min de courtier = 1 spread - alors l'utilisateur ne pourra pas mettre moins de 3 spreads.

Déflecteur.

Raison: