Il compito di cercare gli ordini - pagina 3

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

Nell'implementazione di diverse "griglie" sono arrivato a questa struttura:

La struttura viene riempita ad ogni nuovo tick, in base al valore del Magic Number (memorizza tutte le informazioni necessarie per identificare l'ordine: numero d'ordine, a quale griglia appartiene, ecc.)

Questo è il codice che ho trovato

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

"A proposito - se il Windows è giù, anche l'EA non può cancellare gli ordini - solo manuale qui, quindi questo esempio non può applicarsi completamente all'auto-trading".

POSSIBILE, probabilmente non sai come. Se interessato posso postare il codice.

No, non hai bisogno del codice. Algoritmo in breve, se potete... Non so davvero come eseguire un EA in un terminale che gira in un sistema operativo bloccato
 
Artyom Trishkin:
No, non hai bisogno di un codice. Algoritmo in poche parole, se puoi... Non so davvero come eseguire un EA in un terminale che gira in un sistema operativo bloccato

È più facile per me stendere il codice che spiegarlo:

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

Questo è il codice che ho trovato

Merda, amico, *** non dire stronzate. Tu stesso hai definito la direzione giusta: lo stato dovrebbe essere ripristinato dall'ambiente attuale, quello che MT ti dà è l'opzione più affidabile. Al suo posto, si scrive una lunga e inutile classe Info, in cui si devono in qualche modo stipare i valori trovati dalle funzioni esterne. Sì, alla fine conterrà le variabili di cui hai bisogno: biglietto massimo e minimo in termini di prezzo per l'ordine, così come altre cose importanti per te. Ma in realtà il problema si risolve con un contenitore specializzato di ordini: immaginate di avere una lista di ordini, dove ogni ordine rappresenta una riga di tabella con molte colonne (id ordine, tempo aperto, prezzo aperto, profitto, ecc. ecc.) Fai l'ordinamento per una delle colonne e ottieni esattamente la sequenza che ti serve. Quindi, tutto questo può essere fatto con l'aiuto delle classi, che vi piace usare (anche se non ne avete idea, scusate). Scriverò come farlo domani, se ti interessa.
 
Vasiliy Sokolov:
Merda, amico, *** non dire cazzate. Tu stesso hai definito la direzione giusta: lo stato deve essere recuperato dall'ambiente attuale, quello che ti dà MT è l'opzione più affidabile. Al suo posto, si scrive una lunga e inutile classe Info, in cui si devono in qualche modo stipare i valori trovati dalle funzioni esterne. Sì, alla fine conterrà le variabili di cui hai bisogno: biglietto massimo e minimo in termini di prezzo per l'ordine, così come altre cose importanti per te. Ma in realtà il problema si risolve con un contenitore specializzato di ordini: immaginate di avere una lista di ordini, dove ogni ordine rappresenta una riga di tabella con molte colonne (id ordine, tempo aperto, prezzo aperto, profitto, ecc. ecc.) Fai l'ordinamento per una delle colonne e ottieni esattamente la sequenza che ti serve. Quindi, tutto questo può essere fatto con l'aiuto delle classi, che vi piace usare (anche se non ne avete idea, scusate). Come farlo - lo scriverò domani, se ti interessa.

Molto ansioso di vedere....

Ho bisogno di informazioni non per il bene delle informazioni, ma per ulteriori elaborazioni e calcoli...

 
Михаил:

È più facile per me postare il codice che spiegarlo:

Come funzionerà su un computer rotto? (nessuna sorpresa con le funzioni).

Ecco perché ho detto - non ho bisogno di codice. Ho bisogno di un algoritmo che funzioni su un computer che non funziona (l'asse è rotto, se ricordate una citazione: " Non so proprio come eseguire l'Expert Advisor nel terminale, che è in esecuzione sul sistema operativo che si è schiantato", e non ho bisogno di VPS e altre cose - pensa, che il sistema operativo sul computer, server, ecc, dove il terminale con l'Expert Advisor è in esecuzione, si è schiantato - il tuo codice è un cataplasma per esso lì e ... ).

 
Artyom Trishkin:

Come funzionerà su un computer rotto? (nessuna sorpresa con le funzioni).

Ecco perché ho detto - non ho bisogno di codice. Ho bisogno di un algoritmo che funzioni su un computer che non funziona (perché il sistema operativo è fuori uso, se vi ricordate - e cito: " Non so proprio come eseguire l'Expert Advisor nel terminale, che è in esecuzione sul sistema operativo che si è schiantato", e non ho bisogno di VPS e altre cose - pensa, che il sistema operativo sul computer, server, ecc, dove il terminale con l'Expert Advisor è in esecuzione, si è schiantato - il tuo codice è un cataplasma per esso lì e ... Con le nostre mani, con le nostre mani... ).

Ecco, falsario nella foresta...

Finiamo qui la nostra discussione!

 
Михаил:

Ecco qui, nel bene e nel male...

Finiamo qui la nostra discussione!

Nessun problema. Sono stufo di cercare di far valere il mio punto di vista...
 
Artyom Trishkin:
Nessun problema. Sono stufo di cercare di farmi capire...

La linea di fondo è che anche se il sistema operativo sul server è giù, è possibile eseguire un PC domestico che ripristinerà il controllo dell'account al momento che è necessario per riavviare il servo.

Nella mia pratica di lavoro con i server VDS / VPS il sistema operativo non si è mai capovolto, ma i riavvii sono imprevisti e programmati succede.

L'essenza della mia domanda è scrivere con competenza un codice che raccolga informazioni sulla situazione attuale...

 
Vladimir Pastushak:

...

Il punto della mia domanda è scrivere correttamente il codice che raccoglie informazioni sulla situazione attuale...

Lei ha scritto qui che ha già scritto in stile procedurale. Quindi, tutto quello che dovete fare è raccogliere tutto in una classe. Si possono anche rimuovere alcuni parametri dalla chiamata di funzione, fare metodi per preimpostare i parametri (magik, symbol), ma è meglio non farlo.

Naturalmente se non avete niente da fare, potete andare in un altro modo. Classe. Ha il metodo Refresh() per ottenere la lista degli ordini (l'unico che può restituire false). Gli altri metodi usano questa lista.