La tarea de búsqueda de pedidos - página 3

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

Al poner en práctica diferentes "parrillas", se me ocurrió la siguiente estructura:

La estructura se rellena en cada nuevo tick, en función del valor del Número Mágico (almacena toda la información necesaria para identificar la orden: número de orden, a qué cuadrícula pertenece, etc.).

Este es el código que se me ocurrió

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(){};
  };
 
Михаил:
...

"Por cierto - si el Windows está caído, el EA tampoco puede borrar órdenes - sólo manualmente aquí, por lo que este ejemplo no puede aplicarse plenamente al auto-trading".

POSIBLE, probablemente no sepas cómo. Si está interesado puedo publicar el código.

No, no necesitas el código. Algoritmo en resumen, si puede... Realmente no sé cómo ejecutar un EA en un terminal que se ejecuta en un sistema operativo estrellado
 
Artyom Trishkin:
No, no necesitas un código. El algoritmo en pocas palabras, si puede... Realmente no sé cómo ejecutar un EA en un terminal que se ejecuta en un sistema operativo estrellado

Me resulta más fácil exponer el código que explicarlo:

//+------------------------------------------------------------------+
//| 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:

Este es el código que se me ocurrió

Mierda, hombre, *** no mientas. Tú mismo has definido la dirección correcta: el estado debe ser restaurado por el entorno actual, lo que MT te da es la opción más fiable. En lugar de ello, escribes una larga e inútil clase Info, en la que tienes que meter de alguna manera los valores encontrados por las funciones externas. Sí, eventualmente contendrá las variables que necesitas: ticket máximo y mínimo en términos de precio para el pedido, así como otras cosas importantes para ti. Pero en realidad el problema se resuelve con un contenedor especializado de órdenes: Imagina que tienes una lista de órdenes, donde cada orden representa una fila de la tabla con muchas columnas (id de la orden, hora de apertura, precio de apertura, beneficio, etc., etc.). Se hace la ordenación por una de las columnas, y se obtiene exactamente la secuencia que se necesita. Por lo tanto, todo esto se puede hacer con la ayuda de las clases, que le gusta usar (aunque despistado, lo siento). Mañana escribiré cómo hacerlo, si te interesa.
 
Vasiliy Sokolov:
Mierda, hombre, *** no mientas. Tú mismo has definido la dirección correcta: hay que recuperar el estado del entorno actual, lo que te da MT es la opción más fiable. En lugar de ello, escribes una larga e inútil clase Info, en la que tienes que meter de alguna manera los valores encontrados por las funciones externas. Sí, eventualmente contendrá las variables que necesitas: ticket máximo y mínimo en términos de precio para el pedido, así como otras cosas importantes para ti. Pero en realidad el problema se resuelve con un contenedor especializado de órdenes: Imagina que tienes una lista de órdenes, donde cada orden representa una fila de la tabla con muchas columnas (id de la orden, hora de apertura, precio de apertura, beneficio, etc., etc.). Se hace la ordenación por una de las columnas, y se obtiene exactamente la secuencia que se necesita. Por lo tanto, todo esto se puede hacer con la ayuda de las clases, que le gusta usar (aunque despistado, lo siento). Cómo hacerlo - escribiré mañana, si te interesa.

Muy ansioso por ver....

Necesito información no por la información, sino para el procesamiento y el cálculo posterior...

 
Михаил:

Me resulta más fácil publicar el código que explicarlo:

¿Cómo va a funcionar en un ordenador roto? (no es ninguna sorpresa con las funciones).

Por eso he dicho que no necesito código. Necesito un algoritmo que funcione en un ordenador que no funciona (el eje está roto, si recuerda una cita: " Realmente no sé cómo ejecutar el Asesor Experto en el terminal, que se ejecuta en el sistema operativo estrellado", y no necesito VPS y otras cosas - pensar, que el sistema operativo en el ordenador, servidor, etc, donde el terminal con el Asesor Experto se ejecuta, se estrelló - su código es una cataplasma para él allí y ... ).

 
Artyom Trishkin:

¿Cómo va a funcionar en un ordenador roto? (no es ninguna sorpresa con las funciones).

Por eso he dicho que no necesito código. Necesito un algoritmo que funcione en un ordenador que no funciona (porque el sistema operativo no funciona, si recuerdas -y cito-: " Realmente no sé cómo ejecutar el Asesor Experto en el terminal, que se ejecuta en el sistema operativo estrellado", y no necesito VPS y otras cosas - pensar, que el sistema operativo en el ordenador, servidor, etc, donde el terminal con el Asesor Experto se ejecuta, se estrelló - su código es una cataplasma para él allí y ... Con su código y ... ).

Aquí vamos, forjador en el bosque...

¡Terminemos nuestra discusión aquí!

 
Михаил:

Aquí vamos, para bien o para mal...

Terminemos nuestra discusión aquí.

No hay problema. Estoy harto de tratar de hacer mi punto...
 
Artyom Trishkin:
No hay problema. Estoy harto de tratar de entender mi punto de vista...

La conclusión es que, aunque el sistema operativo del servidor se caiga, se puede ejecutar un PC doméstico que restablecerá el control de la cuenta en el momento que se requiera para reiniciar el servo.

En mi práctica de trabajar con los servidores VDS / VPS OS nunca ha volteado, pero los reinicios son imprevistos y programados sucede.

La esencia de mi pregunta es escribir competentemente un código que recoja información sobre la situación actual...

 
Vladimir Pastushak:

...

El objetivo de mi pregunta es escribir correctamente un código que recoja información sobre la situación actual...

Usted escribió aquí que ya ha escrito en estilo procesal. Por lo tanto, lo único que hay que hacer es reunirlo todo en una clase. También se pueden eliminar algunos parámetros de la llamada a la función, hacer métodos para preestablecer parámetros (magik, symbol), pero es mejor no hacerlo.

Por supuesto, si no hay nada que hacer, puedes ir por otro camino. Clase. Tiene el método Refresh() para obtener la lista de pedidos (el único que puede devolver false). Los otros métodos utilizan esta lista.