Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 558

 

Ecco, ho trovato il mio errore. Alcune persone hanno bisogno di esprimere la loro domanda per capire dopo come hanno sbagliato.

Purtroppo, a quanto pare, io sono uno di quei personaggi. (((

 
Konstantin Nikitin:

OrderSend
OrderSelect

Suppongo che lei intenda pernumero di biglietto?

Qualche insidia?

 
Decromor:

Saluti!


Si può accedere a un ordine con il comando OrderSelect tramite il suo numero.

Domanda, è possibile conoscere in anticipo i numeri degli ordini esistenti, per non passarli tutti? Per esempio, possiamo memorizzare questo numero quando apriamo un nuovo ordine.

Capisco che questo numero è assegnato in ordine a partire da 1. Quali sono le possibili sfumature?

Grazie in anticipo.

  1. Possiamo rivolgerci a questo ordine per il suo indice nella lista degli ordini (quando lo proviamo nel ciclo), o per il suo biglietto (se è conosciuto in anticipo).
  2. Non desiderabile - in caso di qualsiasi guasto (riavvio dell'Expert Advisor, riavvio del terminale, guasto del sistema, ecc.), i ticket memorizzati possono essere persi. Quindi, devono essere memorizzati o in variabili globali del terminale, o in un file, il che è fattibile, ma più difficile della solita ricerca, che non viene fatta ad ogni tick, ma solo quando serve.
  3. No. A partire dal numero 1, e in ordine crescente - solo nel tester.
  4. Non c'è di che.
 
Artyom Trishkin:
  1. Ci si può riferire ad esso per il suo indice nella lista degli ordini (quando si cerca nel ciclo), o per il suo biglietto (se è conosciuto in anticipo)
  2. Non desiderabile - in caso di qualsiasi guasto (riavvio dell'EA, riavvio del terminale, guasto del sistema, ecc.), i biglietti memorizzati possono essere persi. Quindi, devono essere memorizzati o in variabili globali del terminale, o in un file, il che è fattibile, ma più difficile della solita ricerca, che non viene fatta ad ogni tick, ma solo quando serve.
  3. No. A partire dal numero 1, e in ordine crescente - solo nel tester.
  4. Per favore.

È possibile eseguire nel codice OnInit() nel ciclo OrdersTotal() e raccogliere tutte le informazioni sugli ordini aperti, in particolare OrderTicket()?

string orders[][3];

int OnInit() {
   for (int n = OrdersTotal() + 1; n >= 0; n--) {              
      if (OrderSelect(n, SELECT_BY_POS, MODE_TRADES)) {
         int i = (ArraySize(orders) / 3);
         ArrayResize(orders, i + 1);
         orders[i][0] = IntegerToString(OrderTicket());
         orders[i][1] = IntegerToString(OrderType());
         orders[i][2] = DoubleToString(OrderOpenPrice(), Digits);   
      } 
   }
   return(INIT_SUCCEEDED);
}


Quando un ordine viene chiuso automaticamente da TP o SP, è possibile ottenere i dati di questo ordine?

 
Decromor:

È possibile eseguire il programma nel corpo OnInit() e raccogliere tutte le informazioni sugli ordini aperti, in particolare OrderTicket(), nel ciclo OrdersTotal()?


Quando un ordine viene chiuso automaticamente da TP o SP, è possibile ottenere i dati di questo ordine?

  1. Sì, possiamo. E poi? Gli ordini possono cambiare nel tempo, e le informazioni raccolte durante l'inizializzazione non sono aggiornate.
  2. Dobbiamo trovare l'ultimo ordine chiuso e ottenere tutte le informazioni necessarie su di esso.
 
Artyom Trishkin:
  1. È possibile. E poi? Gli ordini possono cambiare nel tempo e le informazioni su di essi, raccolte durante l'inizializzazione, diventeranno obsolete.
  2. Bisogna trovare l'ultimo ordine chiuso e ottenere tutte le informazioni necessarie su di esso.

Durante BUY, SELL salvo i dati richiesti in un array e poi arrotolo questo array e a seconda del prezzo faccio le modifiche richieste (trasferimento SL a Breakeven, chiusura dell'ordine dopo l'inversione, etc.), indirizzando all'ordine richiesto tramite il ticket.

Ma ho ordini con TP e SL che possono chiudersi a mia insaputa. Non mi piace l'opzione di cercare l'ultimo ordine chiuso ogni tick e cercarlo nel mio array per correggerlo.

"Gli ordini possono cambiare nel tempo, e le informazioni raccolte su di essi durante l'inizializzazione diventeranno obsolete" . Suppongo che questo sia ciò che si intende - chiudere l'ordine?

L'unica opzione che vedo è quella di fare 2 cicli in un tick, il mio con gli ordini eOrdersTotal() e non mi piace nemmeno questo.

"Ma più complicato della solita forza bruta, che non viene fatta ad ogni spunta, ma solo quando serve" Si prega di condividere questo algoritmo.

 
Decromor:

È possibile eseguire il programma nel corpo OnInit() e raccogliere tutte le informazioni sugli ordini aperti, in particolare OrderTicket(), nel ciclo OrdersTotal()?


Quando un ordine viene chiuso automaticamente da TP o SP, è possibile ottenere i dati di questo ordine?

E perché abbiamo bisogno di convertire tutto questo in una stringa? È un tipo di stringa?

 
Decromor:

È possibile eseguire il programma nel corpo OnInit() e raccogliere tutte le informazioni sugli ordini aperti, in particolare OrderTicket(), nel ciclo OrdersTotal()?


Quando un ordine viene chiuso automaticamente da TP o SP, è possibile ottenere i dati di questo ordine?

struct SOrders
{
     int ticket,
         type;
     double price;
} orders[];

int OnInit() {
   for (int n = 0; n < OrdersTotal(); n++)
   {              
      if(!OrderSelect(n, SELECT_BY_POS, MODE_TRADES)) continue;
      int i = ArraySize(orders);
      if(ArrayResize(orders, i+1) < i+1) continue;
      orders[i].ticket = OrderTicket();
      orders[i].type   = OrderType();
      orders[i].price  = OrderOpenPrice();
   }
   return(INIT_SUCCEEDED);
}
 
Konstantin Nikitin:
Grazie mille per le informazioni, questo è nuovo per me.
 
Alexey Viktorov:

Perché tradurre tutto questo in una stringa? Tipo di stringa?

Perché, per esempio, un biglietto è di tipo Int, il prezzo Double, e un array può essere solo di un tipo.
Motivazione: