Erreurs, bugs, questions - page 2218

 
Georgiy Merts:

Exactement.

À mon avis, toutes les parties structurelles des programmes devraient être transformées en blocs indépendants de la plate-forme (les interfaces virtuelles sont, à mon avis, très appropriées pour cela), de sorte que les changements de plate-forme n'affectent que de petites zones isolées du code. De plus, il y a le bonus de pouvoir brancher de nouvelles plateformes.

En ce qui concerne les nouvelles i-Fonctions, je n'en vois qu'une seule - rechercher un bar à une heure précise. Peut-être que cette fonction fonctionnera plus rapidement que la mienne. Le reste - j'en suis sûr - ne donnera pas une augmentation de la vitesse par rapport à la mienne, ce qui signifie que l'on ne cherche pas le bon côté des choses.

J'ai écrit ma bibliothèque sur les barres il y a longtemps et il est peu probable que j'utilise les innovations.

 
Alexey Volchanskiy:

J'ai écrit ma bibliothèque sur les barres il y a longtemps et il est peu probable que j'utilise des innovations.

La recherche native de barre par heure peut être vraiment plus rapide.

Maintenant, il se limite au calcul de l'indice de barre requis par le temps de la première barre, de la dernière barre et du temps requis, avec correction ultérieure.

J'avais l'habitude d'utiliser la recherche binaire également, mais le calcul direct avec correction - s'est avéré plus rapide.

Et les développeurs peuvent avoir un index qui trouve la bonne barre beaucoup plus rapidement que ces deux options.

 
fellow:

Quels sont ces chiffres entre guillemets ?

une chaîne de caractères est un tableau uchar

Entre guillemets se trouve un caractère, à gauche des guillemets se trouve un code de caractère.


plus précisément :

void OnStart()
  {
   string s;
   uchar u[1];
   for(int i=32; i<=255; i++)
     {
      u[0]=(uchar)i;
      if(i%16==0) s="";
      s+=IntegerToString(u[0],3)+"-"+CharArrayToString(u)+"  ";
      if (i==152) s+=" ";
      if(i%16==15)  Print(s);
     }
  }
 

qui a mis à jour en 1860, confirmez-vous le problème indiqué précédemment par plusieurs utilisateurs lors des tests ?

parce que c'est la deuxième fois que le courtier Otkritie envoie cette mise à jour ;))

 
Vitaly Muzichenko:

Si vous utilisez un logiciel gratuit, tenez-le à jour, et s'il y a des publicités à l'avenir, c'est bien aussi (logiciel gratuit). Personne ne vous doit rien.

Le logiciel n'est pas gratuit - il coûte beaucoup d'argent au courtier. En tant que trader, je verse au courtier une commission, à partir de laquelle les développeurs sont payés. Je suis un commerçant et je veux être traité comme il se doit.

Je ne me soucie pas des fonctions (je les ai réécrites), mais le testeur a commencé à avoir des problèmes et à planter tous les 2-3 passages, vous auriez pu télécharger une version stable.

 
Au minimum, prenez le fait qu'en 10 ans, ils n'ont jamais appris au logiciel comment calculer correctement les drawdowns. Je devais tout écrire moi-même.
 
// Воспроизведение ситуации, когда OrderSend успешно выполнилась, но ордера нет ни среди живых, ни среди мертвых.

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
/*
  // Посылаем поочередно ордера на открытие/закрытие позиций
  while (!IsStopped() &&
         (OrderSend(_Symbol, OP_SELL, 1, Bid, 0, 0, 0) != -1) &&
         OrderSelect(0, SELECT_BY_POS) && OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0))
    ;
*/

  MqlTradeResult Result;
  MqlTradeRequest Request = {0};

  Request.action = TRADE_ACTION_DEAL;
  Request.symbol = _Symbol;
  
  do
  {
    Request.position = PositionSelect(Request.symbol) ? PositionGetInteger(POSITION_TICKET) : 0;  
    Request.type = Request.position ? (ENUM_ORDER_TYPE)(1 - PositionGetInteger(POSITION_TYPE)) : ORDER_TYPE_SELL;
    Request.price = Request.position ? PositionGetDouble(POSITION_PRICE_CURRENT) : Bid;
    Request.volume = Request.position ? PositionGetDouble(POSITION_VOLUME) : 1;
          
  } // Посылаем поочередно ордера на открытие/закрытие позиций
  while (!IsStopped() && (OrderSend(Request, Result) ? OrderSelect(Result.order) || HistoryOrderSelect(Result.order) : true));
  
  PRINT(Result.order);
  PRINT(OrderSelect(Result.order));
  PRINT(HistoryOrderSelect(Result.order));
}


Résultat surForexTimeFXTM-Demo01

Result.order = 2210942086
OrderSelect(Result.order) = false
HistoryOrderSelect(Result.order) = false


Le script ouvre et ferme des positions jusqu'à ce qu'il détecte un "ordre fantôme" - ni parmi ceux en cours ni dans l'historique. Dois-je considérer cela comme un bogue ou une fonctionnalité de la plateforme ?


Le scénario est écrit de telle manière que plusieurs postes peuvent s'ouvrir grâce à cette nuance. Mais cela n'empêche pas la réception d'une "commande fantôme".

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2018.02.08
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
C'était la même chose à BCS forex il y a un an, après que la Dtz ait changé quelque chose dans leur conseiller.
 

Bonjour. Aujourd'hui, j'ai mis à jour la version 1860 et en optimisant le conseiller expert, j'ai rencontré ce problème :

Retard dans l'optimisation

Le délai entre les passages est de 1 minute ! Pouvez-vous me dire quel est le problème ?

p.s. Avant la mise à jour, tout fonctionnait comme sur des roulettes.

 
fxsaber:


Résultat surForexTimeFXTM-Demo01


Le script ouvre et ferme des positions jusqu'à ce qu'il détecte un "ordre fantôme" - ni parmi ceux en cours ni dans l'historique. Dois-je considérer cela comme un bogue ou une fonctionnalité de la plateforme ?


ZZY Le scénario est écrit de telle sorte que plusieurs postes peuvent s'ouvrir grâce à cette nuance. Mais cela n'empêche pas d'obtenir une "commande fantôme".

Je ne veux pas être ringard, mais des expressions comme celles-ci :

(ENUM_ORDER_TYPE)(1 - PositionGetInteger(POSITION_TYPE))

Vous vous souvenez peut-être par cœur de toutes les valeurs numériques d'une énumération donnée et de l'ordre dans lequel elles vont, mais d'autres personnes ne connaissent peut-être pas ces tripes. Vous ne devriez pas traiter l'énumération de cette façon. La brièveté est certainement la sœur du talent, mais seulement si elle ne nuit pas à la qualité.

Et en ce qui concerne la question à l'étude, c'est dans l'ordre.deal, et non dans le résultat.order, qu'il faut chercher la position à ouvrir. Par conséquent, elle doit se trouver parmi les positions, et non les ordres. N'est-ce pas ?

Raison: