La tâche de recherche des commandes - page 3

 
Игорь Герасько:

En mettant en œuvre différentes "grilles", j'ai abouti à cette structure :

La structure est remplie à chaque nouveau tick, sur la base de la valeur du Magic Number (il stocke toutes les informations nécessaires à l'identification de l'ordre : numéro d'ordre, grille à laquelle il appartient, etc.)

Voici le code que j'ai trouvé

class Info
  {
private:
   struct str
     {
      string            Sym;                                // Символ ордера
      string            Com;                                // Коммент ордера
      int               Tic;                                // Тиккет ордера
      int               Typ;                                // Тип ордера
      int               Mag;                                // Меджик номер ордера
      double            Lot;                                // Лот ордера
      double            Pri;                                // Цена открытия ордера
      double            SL_;                                // Стоп лосс ордера
      double            TP_;                                // Тейк профит ордера
      datetime          Tim;                                // Время открытия ордера
      double            Pro;                                // Профит ордера
     };
   int               m_tick_upper;                          // Тиккет максимального по цене ордера
   int               m_tick_upper_;                         // Тиккет предпоследнего максимального по цене ордера
   int               m_tick_lower;                          // Тиккет минимального по цене ордера
   int               m_tick_lower_;                         // Тиккет предпоследнего минимального по цене оредра

   int               m_tick_start;                          // Тиккет первого по времени ордера
   int               m_tick_start_;                         // Тиккет вторго по времени ордера
   int               m_tick_end;                            // Тиккет последнего по времени ордера
   int               m_tick_end_;                           // Тиккет предпоследнего по времени ордера

   int               m_magic;                               // Меджик номер
   string            m_symbol;                              // Символ ордера

   void              SearchTicketPriceType(const int type); // Поиск по цене
   void              SearchTicketTimeType(const int type);  // Поиск по времени

public:

   str               Price_Max;                             // Структура запроса максимальных ценн
   str               Price_Min;                             // Структура запроса минимальных  ценн
   str               Time_End;                              // Структура последних ордеров
   str               Time_Start;                            // Структура начальных ордеров

   str               Price_Max2;                            // Структура запроса максимальных ценн
   str               Price_Min2;                            // Структура запроса минимальных  ценн
   str               Time_End2;                             // Структура последних ордеров
   str               Time_Start2;                           // Структура начальных ордеров

   void              SetMagic (const int    mag) { m_magic  = mag; } // Принудительное указание меджик номера
   void              SetSymbol(const string sym) { m_symbol = sym; } // Принудительное указание символа

   void              SearchTimeOrder(const int type);       // Заполнение структуры по времени      
   void              SearchPriceOrder(const int type);      // Заполнение структуры по ценам 

                     Info(const string sym,const int mag);  // Параметрический конструктор
                     Info(){};
                    ~Info(){};
  };
 
Михаил:
...

"Au fait - si Windows est en panne, l'EA ne peut pas non plus supprimer les ordres - uniquement manuellement ici, donc cet exemple ne peut pas s'appliquer entièrement à l'auto-trading."

POSSIBLE, vous ne savez probablement pas comment. Si cela vous intéresse, je peux vous envoyer le code.

Nah, tu n'as pas besoin du code. Algorithme en bref, si vous pouvez... Je ne sais vraiment pas comment exécuter un EA dans un terminal fonctionnant sous un système d'exploitation en panne.
 
Artyom Trishkin:
Non, vous n'avez pas besoin d'un code. L'algorithme en quelques mots, si vous pouvez... Je ne sais vraiment pas comment exécuter un EA dans un terminal fonctionnant sous un système d'exploitation en panne.

C'est plus facile pour moi d'exposer le code que de l'expliquer :

//+------------------------------------------------------------------+
//| Expert Remove orders function                                    |
//+------------------------------------------------------------------+
void RemoveOrders()
{
  int orders_total = OrdersTotal();
//---  
  if ( orders_total > 0 )
  {
    for ( int i = 0; i < orders_total; i++ )
    {
      ulong temp_order_ticket = OrderGetTicket( i );
      
      if ( OrderSelect( temp_order_ticket ) )
      {
        string temp_symbol = OrderGetString( ORDER_SYMBOL );
        
        if ( temp_symbol == _Symbol )
        {
          RemoveOldOrder( temp_symbol, temp_order_ticket );
        }
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Expert remove old order function                                 |
//+------------------------------------------------------------------+
void RemoveOldOrder( const string symbol, const ulong ord_ticket )
{
  MqlTradeRequest request = {0};
  MqlTradeResult  result  = {0};
  
  request.action = TRADE_ACTION_REMOVE;
  request.order  = ord_ticket;
  
   if ( OrderSend( request, result ) )
   {
     if ( result.retcode == TRADE_RETCODE_PLACED )
     { 
//        SetTransCount( true );
     }
  }
  else
  {
    Print( "Удаление старого ордера не выполнено! Билет = ", ord_ticket);
  }
}
 
Vladimir Pastushak:

Voici le code que j'ai trouvé

Merde, mec, c'est pas des conneries. Vous avez vous-même défini la bonne direction : l'État doit être récupéré dans l'environnement actuel, ce que MT vous donne est l'option la plus fiable. Au lieu de cela, vous écrivez une longue et inutile classe Info, dans laquelle vous devez d'une manière ou d'une autre fourrer les valeurs trouvées par les fonctions externes. Oui, il contiendra éventuellement les variables dont vous avez besoin : le ticket maximum et minimum en termes de prix pour la commande, ainsi que d'autres éléments importants pour vous. Mais en réalité, le problème est résolu par un conteneur spécialisé d'ordres : Imaginez que vous avez une liste d'ordres, où chaque ordre représente une ligne de tableau avec de nombreuses colonnes (identifiant de l'ordre, heure d'ouverture, prix d'ouverture, profit, etc.) Vous effectuez un tri par l'une des colonnes, et vous obtenez exactement la séquence dont vous avez besoin. Ainsi, tout cela peut être fait à l'aide de classes, que vous aimez utiliser (bien que je n'y connaisse rien, désolé). J'écrirai comment le faire demain, si cela vous intéresse.
 
Vasiliy Sokolov:
Merde, mec, c'est pas des conneries. Vous avez vous-même défini la bonne direction : l'État doit être récupéré dans l'environnement actuel, ce que MT vous donne est l'option la plus fiable. Au lieu de cela, vous écrivez une longue et inutile classe Info, dans laquelle vous devez d'une manière ou d'une autre fourrer les valeurs trouvées par les fonctions externes. Oui, il contiendra éventuellement les variables dont vous avez besoin : le ticket maximum et minimum en termes de prix pour la commande, ainsi que d'autres éléments importants pour vous. Mais en réalité, le problème est résolu par un conteneur spécialisé d'ordres : Imaginez que vous avez une liste d'ordres, où chaque ordre représente une ligne de tableau avec de nombreuses colonnes (identifiant de l'ordre, heure d'ouverture, prix d'ouverture, profit, etc.) Vous effectuez un tri par l'une des colonnes, et vous obtenez exactement la séquence dont vous avez besoin. Ainsi, tout cela peut être fait à l'aide de classes, que vous aimez utiliser (mais que vous ne connaissez pas, désolé). Comment faire - j'écrirai demain, si cela vous intéresse.

Très impatient de voir....

J'ai besoin d'informations, non pas pour le plaisir de l'information, mais pour un traitement et un calcul ultérieurs ...

 
Михаил:

C'est plus facile pour moi de poster le code que de l'expliquer :

Comment cela fonctionnera-t-il sur un ordinateur cassé ? (ce qui n'est pas du tout surprenant compte tenu des fonctions).

C'est pourquoi j'ai dit - je n'ai pas besoin de code. J'ai besoin d'un algorithme qui fonctionne sur un ordinateur qui ne fonctionne pas (l'axe est cassé, si vous vous souvenez d'une citation : "Je ne sais vraiment pas comment faire fonctionner l'Expert Advisor dans le terminal, qui tourne sur le système d'exploitation en panne", et je n'ai pas besoin de VPS et d'autres trucs - pensez que le système d'exploitation de l'ordinateur, du serveur, etc., où tourne le terminal avec l'Expert Advisor, est en panne - votre code est un cataplasme pour cela et ... ).

 
Artyom Trishkin:

Comment cela va-t-il fonctionner sur un ordinateur cassé ? ?? (ce qui n'est pas du tout surprenant compte tenu des fonctions).

C'est pourquoi j'ai dit - je n'ai pas besoin de code. J'ai besoin d'un algorithme qui fonctionne sur un ordinateur qui ne fonctionne pas (parce que le système d'exploitation est en panne, si vous vous souvenez - et je cite : "Je ne sais vraiment pas comment faire fonctionner l'Expert Advisor dans le terminal, qui tourne sur le système d'exploitation en panne", et je n'ai pas besoin de VPS et d'autres trucs - pensez que le système d'exploitation de l'ordinateur, du serveur, etc., où tourne le terminal avec l'Expert Advisor, est en panne - votre code est un cataplasme pour cela et ... Avec nos mains, avec nos mains ... ).

Nous y voilà, le faussaire dans la forêt...

Terminons notre discussion ici !

 
Михаил:

Nous y voilà, pour le meilleur et pour le pire...

Mettons fin à notre discussion ici !

Pas de problème. Je suis malade et fatigué d'essayer de faire valoir mon point de vue...
 
Artyom Trishkin:
Pas de problème. J'en ai assez d'essayer de faire passer mon message...

L'essentiel est que, même si le système d'exploitation du serveur est en panne, vous pouvez utiliser un PC domestique qui rétablira le contrôle du compte au moment où il est nécessaire de redémarrer le servo.

Dans ma pratique de travail avec les serveurs VDS / VPS, le système d'exploitation n'a jamais basculé, mais les redémarrages sont des événements imprévus et programmés.

L'essence de ma question est d'écrire de manière compétente un code qui collecte des informations sur la situation actuelle...

 
Vladimir Pastushak:

...

Le but de ma question est d'écrire correctement un code qui collecte des informations sur la situation actuelle...

Vous avez écrit ici que vous avez déjà écrit dans le style procédural. Il suffit donc de rassembler tout cela dans une classe. Vous pouvez également supprimer certains paramètres de l'appel de la fonction, créer des méthodes pour prédéfinir les paramètres (magik, symbol), mais il est préférable de ne pas le faire.

Bien sûr, si vous n'avez rien à faire, vous pouvez prendre un autre chemin. La classe. Il possède une méthode Refresh() pour obtenir la liste des commandes (la seule qui peut renvoyer false). Les autres méthodes utilisent cette liste.