Erreurs, bugs, questions - page 347

 
Donc c'est soit un bug dans le terminal, soit dans l'historique du serveur. Mais plus probablement le terminal, car les rapports de l'historique du serveur sont plus susceptibles d'avoir été récupérés.
 

Urain:
Так что это или баг терминала, или серверной истории. Но скорее терминала, тк отчёты на чемпе скорее с серверной истории восстанавливались.

C'est cool. Je ne faisais pas attention. Explications claires.
 
Yedelkin:
C'est drôle. Je ne faisais pas attention. Explications claires.
C'est tout, qui s'amuse et qui a deux semaines pour attraper le virus :o)
 
Je l'ai trouvé, il propose par défaut un tri par heure et doit trier par numéro de transaction. C'est bon alors.
 
Urain:
Je l'ai trouvé, il propose par défaut un tri par heure et doit trier par numéro de transaction. Alors tout est correct.

Il n'y a donc pas d'erreurs ? Le but est de compter/trier les transactions par numéro de ticket, et non par heure.

Je ne faisais qu'un examen superficiel des rapports, je ne calculais pas les états de position.

 
Renat:

Il n'y a donc pas de bogues ? Le but est de compter/trier les transactions par ticket et non par heure.

Je ne faisais qu'un examen superficiel des rapports, je ne calculais pas les états de position.

Exactement, c'est juste que lorsque vous enregistrez un rapport, il n'y a pas d'automatisation de ce processus et il faut le surveiller attentivement. Je ne pense pas que tous les utilisateurs y prêteront attention et, par conséquent, il y aura des bogues lors de l'analyse du rapport.

ZS J'ai ajouté le tri après avoir analysé le rapport. En conséquence, tout a fonctionné pour moi, mais je prédis que plus d'un programmeur aura du mal avec cette fonctionnalité.

 

Pendant l'optimisation, le nom du paramètre d'optimisation est affiché dans le coin supérieur droit du graphique d' optimisation.


Lors de l'observation de l'optimisation, cette inscription est gênante car le nouveau maximum est toujours caché derrière cette inscription.

Renat, déplaçons-le dans le coin supérieur gauche ! Ou dans le coin inférieur droit. Ou en bas à gauche... N'importe où, enlevez-le juste du coin supérieur droit, pour l'amour de Dieu. S'il vous plaît ! :)

// Ou au moins le rendre pâle et le mettre en arrière-plan pour qu'il ne masque pas l'information.

 
MetaDriver:

Pendant l'optimisation, le nom du paramètre d'optimisation est affiché dans le coin supérieur droit du graphique d' optimisation.

Lors de l'observation de l'optimisation, cette inscription est gênante car le nouveau maximum est toujours caché derrière cette inscription.

Renat, déplaçons-le dans le coin supérieur gauche ! Ou dans le coin inférieur droit. Ou en bas à gauche... N'importe où, enlevez-le juste du coin supérieur droit, pour l'amour de Dieu. S'il vous plaît ! :)

// Ou au moins le rendre pâle et le mettre en arrière-plan pour qu'il ne masque pas l'information.

En bas à gauche, et comme fond.
 

S'il vous plaît, dites-moi où je me suis trompé. J'essaie d'écrire un script simple qui supprime les positions et les ordres en attente sur l'instrument actuel. Ici :

//+------------------------------------------------------------------+
//|                                                        clean.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlTick current_tick;
   MqlTradeRequest close_request;
   MqlTradeResult  close_result;
   SymbolInfoTick(_Symbol,current_tick);
   int counter01;
   while(check_position()==true);
     {
      PositionSelect(_Symbol);
      close_request.action=TRADE_ACTION_DEAL; close_request.symbol=_Symbol; close_request.volume=PositionGetDouble(POSITION_VOLUME); close_request.type_filling=ORDER_FILLING_AON;
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         close_request.price=current_tick.bid; close_request.type=ORDER_TYPE_SELL;
        }
      else
        {
         close_request.price=current_tick.ask; close_request.type=ORDER_TYPE_BUY;
        }
      OrderSend(close_request,close_result);
     }
   do
     {
      for(counter01=1; counter01<=OrdersTotal(); counter01++)
        {
         close_request.order=OrderGetTicket(counter01-1);
         if(OrderGetString(ORDER_SYMBOL)==_Symbol)
           {
            close_request.action=TRADE_ACTION_REMOVE;
            OrderSend(close_request,close_result);
           }
        }
     }
   while(check_order()==true);
   if(GetLastError()!=0)
      Print("ошибка код ",GetLastError()," функция ",__FUNCTION__," строка ",__LINE__);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool check_position() // функция проверяет наличие позиции
  {
   int counter01;
   bool position_exsist=false;
   for(counter01=0; counter01<PositionsTotal(); counter01++)
     {
      if(PositionGetSymbol(counter01)==_Symbol)
        {
         position_exsist=true;
         break;
        }
     }
   return(position_exsist);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool check_order() // функция проверяет наличие ордеров
  {
   int counter01;
   bool order_exsist=false;
   for(counter01=0; counter01<OrdersTotal(); counter01++)
     {
      OrderGetTicket(counter01);
      if(OrderGetString(ORDER_SYMBOL)==_Symbol)
        {
         order_exsist=true;
         break;
        }
     }
   return(order_exsist);
  }
//+------------------------------------------------------------------+
Le script se bloque lorsqu'il y a une position. En le déboguant, j'ai découvert qu'il se bloque lors de la vérification de la position. Lorsque la condition de boucle while(check_position()==true) commence à être vérifiée, le contrôle est transmis à check_position() et la première fois que la fonction est exécutée normalement, elle renvoie true. Mais alors le corps de la boucle n'est pas exécuté ; il recommence à vérifier la condition et le contrôle arrive à check_position() et après l'opérateur return(order_exsist) ne retourne pas à la condition de la boucle ; il va au début de la fonction check_position(). S'il vous plaît, dites-moi où j'ai fait une erreur.
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
  • www.mql5.com
Основы языка / Операторы / Оператор возврата return - Документация по MQL5
 
molotkovsm:

S'il vous plaît, dites-moi où je me suis trompé. J'essaie d'écrire un script simple qui supprime les positions et les ordres en attente sur l'instrument actuel. C'est ici :

Le script se bloque lorsqu'il y a une position. En le déboguant, j'ai découvert qu'il se bloque lors de la vérification de la position. Lorsque la condition de la boucle while(check_position()==true) commence à être vérifiée, le contrôle est transmis à la fonction check_position() et au premier moment, la fonction est exécutée normalement et renvoie true. Mais alors le corps de la boucle n'est pas exécuté ; il recommence à vérifier la condition et le contrôle arrive à check_position() et après l'opérateur return(order_exsist) ne retourne pas à la condition de la boucle ; il va au début de la fonction check_position(). Veuillez me dire où je dois me tromper.

S'il y a une position, vous obtiendrez une boucle infinie car

while(check_order()==true);

Est égal à

while(check_order()==true)
{
 //  пустой оператор
}
Il n'y a aucun moyen de sortir de la boucle dans le code car il n'y a pas de rupture dans le corps de l'opérateur ;
Raison: