Cosa significa la voce del diario di bordo - pagina 4

 
E non ho ancora controllato OrderModify :(
E gli ordini in sospeso:((
 
Quindi è passato un bel po' di tempo, qualche giorno. Durante questo periodo, diversi esperti sono riusciti a lavorare. Ecco i log (il codice che genera questi log è sopra). Sto ancora aspettando almeno qualche risposta dagli sviluppatori. Almeno a livello di "riconosciamo il problema, sistemiamolo".

Diario 1:
Cercando di comprare, tentativo 0 fallito, errore 6
Cercando di comprare, tentativo 1 fallito, errore 129
Cercando di comprare, tentativo 2 fallito, errore 129
Cercando di comprare, tentativo 3 fallito, errore 129
Cercando di comprare, tentativo 4 fallito, errore 129
Errore di acquisto a zig zag: 4050
2.28000000, 0.02700000, 0.00000000
Cercando di comprare, tentativo 0 fallito, errore 6
Cercando di comprare, 1 tentativo riuscito

L'ordine è stato aperto al 7° tentativo. Diversi messaggi di errore sono stati ricevuti lungo la strada e non avevano nulla a che fare con la realtà.

Diario 2.
7.9.2005 11:0:15, Segnale: sell7.9.2005 11:0:15 Prova a vendere, tentativo 0.
Ask: 1.24820000, StopLoss: 0.00600000, TakeProfit: 0.00000000
fallito, errore 6
7.9.2005 11:0:15 Cercando di vendere, tentativo 1.
Ask: 1.24820000, StopLoss: 0.00600000, TakeProfit: 0.00000000
di successo

Al secondo tentativo. L'errore numero sei è stato oggetto di un intero ramo, più di cento post. Su consiglio degli sviluppatori, Rosh e Composter, la frequenza degli errori è stata ridotta da "una volta ogni tanto" a "circa una volta su cinque". Ma è ancora lì.

Diario 3.
Tentativo di chiudere una posizione lunga, ticket: 1784257
6.9.2005 12:0:13 Ordine con questo biglietto ancora presente, riprova
6.9.2005 12:0:13 Ordine con questo biglietto ancora presente, riprova
6.9.2005 12:0:13 Ordine con questo biglietto ancora presente, riprova
6.9.2005 12:0:13 Ordine con questo biglietto ancora presente, riprova
6.9.2005 12:0:13 Ordine con questo biglietto ancora presente, riprova

Cinque fallimenti, non c'era nessun codice di errore. Il programma pensava che quella posizione fosse chiusa. Stavo catturando il biglietto nel ciclo, se non l'avessi fatto, il problema non sarebbe stato rilevato.

E così via.
 
Fallo così
<br / translate="no"> void CloseBuy(string strExpertName)
{
int nTicket = OrderTicket();
SaveComment("tentando di chiudere una posizione lunga, biglietto: " + nTicket);

int nResult = OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua);

Dormire(10000);

se(nResult == -1)
{
int nError = GetLastError();
Alert(strExpertName + ", errore: " + nError);
}

}


Ho dovuto usare una citazione per rendere il testo in grassetto.
 
Se questo viene fatto, è probabile che mascheri l'errore. E l'obiettivo è quello di aiutare gli sviluppatori a trovarlo, in modo che tutto funzioni senza loop.

Lo scopo di Sleep è solo quello di aspettare fino a quando la condizione che ha causato il fallimento è sparita (sai, i ping iniziano a passare). Perché - tenendo conto che le operazioni commerciali "prendono" il controllo e non lo lasciano andare finché non tornano, allora se c'è un errore, dovrebbe apparire immediatamente. Se non è così - è un bug.

L'unica eccezione possibile è il mio ciclo che controlla il biglietto di una posizione appena chiusa. Ma anche qui possiamo discutere su come il sistema dovrebbe idealmente comportarsi.

Di nuovo, il problema non è solo che gli errori vengono restituiti, ma anche che i codici di errore sono presi dal soffitto, e a volte non ci sono affatto codici - viene restituito il codice di successo dell'operazione.

Se non capisco qualcosa, per favore spiegatemi.
 
Spiegazione. Secondo i termini di un Expert Advisor, se l'attuale prezzo Ask supera lo stop loss di un ordine di vendita pendente, viene eseguita una serie di azioni:
1. Viene inviato un SMS che informa dell'intenzione di rimuovere tale ordine.
2. Viene fatto un tentativo di cancellare l'ordine
3. Il risultato della funzione OrderDelete() viene analizzato e se è negativo (l'ordine non è stato rimosso), allora
4. Invia un SMS di conferma del fallimento.

Ieri abbiamo ricevuto 2 SMS, tutto secondo le regole ma l'ordine è stato cancellato nello stesso secondo, secondo i registri.
Quindi l'EA stava cercando di ottenere il risultato dell'operazione di cancellazione dell'ordine qualche frazione di secondo prima di aver ottenuto il risultato. È come nella barzelletta sul cinese che piantava le patate e poi le dissotterrava il giorno dopo. Alla domanda "Sta maturando così in fretta", rispondevano "No, ma morde" :)
 
Capito, MA:
1. Ho fatto tutto questo casino per gli ordini veri e propri. E se si comportano così, bisogna rimediare.
2) L'idea è che gli EA MT dovrebbero essere in grado di fare trading SENZA un ciclo ritardato. È così che dovrebbe essere.
Metterò un ritardo, ma, come si dice, "senza piacere" :)
 
Ho pensato tra me e me. Se suggerisco di usare una pausa tra l'operazione di modifica dell'ordine e il controllo dei risultati di questa operazione, significa che sto assumendo un funzionamento asincrono dell'EA. Significa che inviamo una richiesta al server cercando di modificare l'ordine e poi, senza aspettare la risposta, l'Expert Advisor continua il suo lavoro secondo l'algoritmo. Per impostazione predefinita, viene data una risposta negativa all'Expert Advisor finché non riceve una risposta dal server. Se la risposta viene ricevuta, la risposta è reale, ma se non lo è, la risposta è virtuale.

Io stesso non ci credo, gli sviluppatori possono spiegare quanto mi sbaglio?
 
È stato raggiunto un consenso. Ma ho messo in pausa - solo per essere sicuro. Almeno, prima di verificare la disponibilità del biglietto di un ordine appena chiuso, il database sul server può essere consultato, dovremmo dargli il tempo di rinfrescarsi. Anche se è sbagliato :)

Un po' imbarazzante è il fatto che per 37 messaggi in questo thread ce n'è solo uno degli sviluppatori...
 
È un po' sconcertante che ci sia un solo post di sviluppatore in 37 in questo thread...

perché interferire con una discussione già produttiva
 
perché interferire con una discussione già produttiva

ed ecco i prodotti =)

Ho fatto alcuni test. Un Expert Advisor apre e chiude una posizione (alternativamente comprare e vendere). Pausa minima tra tutti gli scambi - 10 sec.

Tempo di test (da parte di Alpari): 02:00 - 09:30 (cioè 7,5 ore)
Tentativi di OrderSend: 996
Successful*: 888
Errori**: 108

* - Per tentativo "riuscito" intendo quanto segue: orderSend ha restituito il numero del biglietto, GetLastError ha restituito 0, posizione aperta selezionata con successo orderselect.
** - Tutti gli errori #148 "il contesto commerciale è occupato" - questo è ciò che Slava stava chiedendo nel prossimo thread - "cosa succede se disabilitiamo il controllo isTradeAllowed? Gli errori sono iniziati alle 07:16:46 e si stanno ancora accumulando)

-----------------------------------------------------------------------------------------------------------------------

OrderClose attempts: 890
Successful*: 736
Errori**: 154

* - per tentativo di chiusura "riuscito" intendo quanto segue: orderclose ha restituito true, GetLastError ha restituito 0, posizione chiusa selezionata con successo orderelect in mod_history.
** - 152 errore #1 "nessun errore", uno #6 e uno #138(requotes)


La situazione che è stata catturata non è accaduta. Cioè tutte le posizioni chiuse erano effettivamente chiuse.