Caratteristiche del linguaggio mql4, sottigliezze e tecniche - pagina 35

 
fxsaber #:

Così ora mi sto chiedendo come passare attraverso TUTTI gli ordini in una sola volta.

Non sono sicuro di cosa fare, ma sto cercando di scrivere in modo tale che tali slittamenti non portino a conseguenze critiche.

La probabilità diminuirà, ma meno la diversificazione e la complicazione della gestione dei conti.

 
Andrei Trukhanovich #:

In alternativa, distribuisci i bot su diversi account.

Poi proibire, per esempio, la scadenza degli ordini di messa a disposizione. In generale, una stampella.

Una necessità fondamentale con una peculiarità così sfortunata. A quanto pare, per farlo attraverso le istantanee in qualche modo.

 
fxsaber #:

Grazie per la risposta dettagliata! Ora mi sto chiedendo come passare attraverso TUTTI gli ordini in una sola volta.

Che ne dite di ricordare il primo e l'ultimo ordine (biglietto)?

e dopo che il ciclo è stato completato, controllare che il primo e l'ultimo ordine abbiano gli stessi biglietti di prima del conteggio

   int n  = OrdersTotal();
   
   if(n == 0) return(0.0);
   else if(n == 1 && OrderSelect(0, SELECT_BY_POS)) return(OrderLots());
   
   int t_last = OrderSelect(n - 1, SELECT_BY_POS) ? OrderTicket() : -1;
   int t_first = OrderSelect(0, SELECT_BY_POS) ? OrderTicket() : -1;


SZY: abbastanza logicamente, OrderSelect() dovrebbe essere responsabile di questa collisione - dovrebbe restituire false nel caso in cui la tabella degli ordini sia cambiata, ma non ricordo di aver letto da nessuna parte sul forum che OrderSelect() abbia restituito false, non ho nemmeno incontrato gestori di errori per OrderSelect().

 
Igor Makanu #:

può ricordare il primo e l'ultimo ordine (biglietto)?

Senza una completa memorizzazione della sequenza dei biglietti, una tale soluzione fallirà.

 
fxsaber #:

Se non ricordate completamente la sequenza dei biglietti, questa soluzione fallirà.

E il salvataggio completo dei biglietti causerà anche dei fallimenti perché mentre stiamo eseguendo un ciclo, lo stato degli ordini che sono già stati elaborati può cambiare


naturalmente, non sono sicuro, ma se un ordine viene chiuso quando siamo nel ciclo, l'OrderTotal() cambierà

se l'ordine è chiuso e si apre un nuovo ordine, allora il biglietto e/o OrderSelect(0) o OrderSelect(OrderTotal()-1) sarà cambiato


e secondo voi, quale situazione potrebbe accadere, in modo che i precedenti "ordini estremi" e lo stesso OrderTotal() rimangano?

 
Igor Makanu #:

e secondo voi, quale situazione potrebbe accadere per mantenere gli stessi "ordini estremi" e lo stesso OrderTotal() ?

Molto probabilmente, il OrdersTotal cambierà quando la tabella degli ordini sarà scossa.

E poi è possibile che i limitatori vengano riempiti di nuovo e che si crei una posizione aggiuntiva.

 
Igor Makanu #:

possiamo memorizzare il primo e l'ultimo ordine (biglietto)?

ricordare il primo non fa nulla

 
fxsaber la funzione sia stata chiamata? O conterà due volte.

Cioè, cosa succede all'indicizzazione quando un ordine viene cancellato o appare durante l'enumerazione?

Raccolgo una serie di biglietti e ci lavoro.
Se OrdersTotal o Balance o Margin è cambiato - allora la lista deve essere ricreata.

Quindi EA lavora sempre e solo con i propri biglietti selezionati

 
Andrei Trukhanovich #:

ricordare il primo non fa nulla

queste sono peculiarità dell'implementazione dell'architettura, che non sono documentate e che nessuno può garantire in futuro...

Nota OrderTotal() eOrdersHistoryTotal(), e i biglietti degli ultimi ordini

se questi valori cambiano dopo i calcoli nel ciclo, allora elaborare


Ma non ci può essere una soluzione universale e affidabile - il compito qui è quello di indovinare cosa succederà sul server, come i dati vengono consegnati attraverso la rete, e cosa sta succedendo nei grafici adiacenti nel terminale ))))


L'unica cosa da sperare è la velocità di OrderSelect() - se ricordo bene, è più di un milione di chiamate al secondo

 
fxsaber #:

Senza una memoria completa della sequenza dei biglietti, una tale soluzione fallirà.

Può non essere costoso da ricordare, ma può essere costoso da tenere traccia dello stato completo. Sono d'accordo con i precedenti, ridurre il carico per logica di ragionevolezza e priorità.

Il mondo asincrono in cui viviamo non garantisce l'ordine delle risposte all'ordine delle richieste, né garantisce affatto l'ordine.