Funzione OrderSendAsync() - pagina 3

 

Messaggio tecnico. Riunire dichiarazioni interessanti in un unico argomento.

sergeev:

Yedelkin:
Quale proprietà del conto sarà responsabile del limite di ordini simultanei nella coda di esecuzione? Sarà possibile trovare questa cifra programmaticamente?

il risultato della funzione OrderSendAsync = false sarà semplicemente

usalo come guida

 
Rosh:

Ho riletto il thread con interesse, e l'ho anche testato nella pratica, e qui ho scoperto la palese discriminazione del trading automatico.

Ecco il registro della chiusura manuale delle posizioni: (cronologia comprensibile dal basso verso l'alto)

2012.04.26 22:32:05     Trades  '686934': deal #9256820 sell 0.02 EURUSD at 1.32391 done (based on order #10091825)
2012.04.26 22:32:05     Trades  '686934': order #10091825 sell 0.02 / 0.02 EURUSD at 1.32391 done
2012.04.26 22:32:05     Trades  '686934': accepted instant sell 0.02 EURUSD at 1.32391
2012.04.26 22:32:04     Trades  '686934': instant sell 0.02 EURUSD at 1.32391

Quello che vediamo qui: l'ordine viene inviato, l'ordine viene accettato, un ticket viene assegnato all'ordine, e infine l'ordine viene eseguito (ci possono essere alcuni spostamenti di interpretazione, ma questo è tutto). Tutto è classico.

L'unica cosa strana è che l'evento Trades sa con certezza (all'interno del terminale) da quale categoria è stato attivato, così come da quale ordine (per le ultime due categorie); altrimenti sarebbe impossibile emettere tale commento, e il programmatore dovrebbe reinventare la ruota per ottenere questa informazione. E la situazione con la funzione OrderSendAsync non ha aggiunto alcuna semplicità.

Tuttavia, dobbiamo notare che la velocità di esecuzione degli ordini è aumentata. Ora non abbiamo il tempo di notare che l'ordine viene messo in coda, ed è già stato eseguito.


Quindi abbiamo un pacchetto di ordini, ognuno dei quali teoricamente viene 4 Trades, in ognuno dei Trades avremmo bisogno di controllare ogni ordine.

Così, abbiamo 4*Numero_Ordine*Numero_Ordine punti di controllo, cioè abbiamo 400 per 10 ordini e 40000 per 100. E Dio non voglia, qualsiasi ordine avrebbe meno quantità di Trades di 4, allora l'intera logica di controllo crolla, poiché l'attesa prima di inviare un secondo ordine (se la prima richiesta non viene eseguita) avviene esattamente sul numero 4.

 

Hai inviato una pila di ordini di compravendita al server.

Per ogni ordine, è necessario tenere un controllo di esecuzione separato? E quanto tempo dobbiamo aspettare per una risposta?

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
 
joo:

Ogni ordine deve essere monitorato separatamente?


E quanto tempo devo aspettare per una risposta?

Varia da broker a broker. Se STP, è più una questione per il suo fornitore di liquidità.
 
sergeev:


Non hanno la stessa funzione per diversi broker. Se STP, allora è più una questione per il loro fornitore di liquidità.

No, è tutto indovinato dai fondi di caffè. Quando apri la finestra manualmente, premi buy, aspetti un requote o un'esecuzione, premi ok e hai finito.

Quando si apre in modalità automatica, ci dovrebbe essere anche un punto di riferimento, dal quale si deve inviare una seconda richiesta o tutto è ok.

SZS ha aggiunto al post sopra, rileggete.

 
Urain:

No, sono tutte congetture, quando apri manualmente una finestra, premi buy, aspetti un requote o un'esecuzione, premi ok e hai finito.

No. Questo è il caso quando il codice di ritorno è DONE(10009).

Ma ci sono broker che passano il tuo commercio al fornitore. E in questo caso vi restituiranno immediatamente PLACED(10008). E a proposito, se si tratta di un ordine di mercato, non ci sarà nessun Deal ticket in questa risposta, ma solo l'order ticket.

E non ci sarà nemmeno un biglietto per l'ordine in caso di OrderSendAsync.

Nella modalità automatica, così dovrebbe essere il punto di riferimento, da cui si desidera inviare una seconda richiesta, o tutto è OK.

Bene, qual è il punto di riferimento a requotes anche su MT4? Non farete un ciclo infinito e non aspetterete la cancellazione o l'apertura di un ordine.

Tutto è ticketype, con controlli degli stati salvati, ecc.

Документация по MQL5: Торговые функции / OrderGetTicket
Документация по MQL5: Торговые функции / OrderGetTicket
  • www.mql5.com
Торговые функции / OrderGetTicket - Документация по MQL5
 

Ho provato ad eseguire la funzione OrderSendAsync()

//+------------------------------------------------------------------+
//|                                               OrderSendAsync.mq5 |
//+------------------------------------------------------------------+
MqlTradeResult  res={0};
MqlTradeRequest req={0};
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   req.action=TRADE_ACTION_PENDING;
   req.symbol=_Symbol;
   req.volume=1.0;
   req.price=3.0;
   req.type=ORDER_TYPE_BUY_STOP;
   req.type_filling=ORDER_FILLING_RETURN;
   switch(OrderSendAsync(req,res))
     {
      case  true:
         Print("retcode=",res.retcode,", order=",res.order,", deal=",res.deal);
         break;
      default: Print("Неудача при отправке запроса функцией OrderSendAsync()");
     }
  }

Ha risposto con

2012.05.02 21:12:33 OrderSendAsync (USDCHF,M1) retcode=10008, order=0, deal=0

Sorge una domanda veloce: come pensiamo di tracciare il destino di una richiesta di compravendita quando viene inviata usando la funzione OrderSendAsync(), se non conosciamo nemmeno il ticket dell'ordine? Il commento deve essere compilato dal broker.

 
La modalità asincrona è progettata per l'immissione di ordini in blocco, ma non per una singola transazione. Per una singola transazione è meglio usare la modalità sincrona - tutto verrà eseguito alla stessa velocità, e con un servizio completo.

Traccia l'esecuzione di transazioni asincrone in OnTrade. Sì, questo è un percorso più complicato, ma questo è il prezzo dell'asincronia.
 
Renat:
La modalità asincrona è progettata per l'immissione di ordini in blocco, ma non per una singola transazione. Per una singola transazione è meglio usare la modalità sincrona - tutto sarà eseguito alla stessa velocità e con un servizio completo.

Traccia l'esecuzione di transazioni asincrone in OnTrade. Sì, è un modo più complicato, ma questo è il prezzo dell'asincronia.
Ok, permettetemi di chiarire una domanda: come si fa a seguire il destino di cinquecento richieste di compravendita in un invio in massa di ordini? Dal momento che qualsiasi invio in massa di ordini in batch consiste in molte transazioni singole, tutti useranno il principio del confronto tra lo stato precedente e quello attuale della storia? Non ci sono altri approcci?
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
 
La radice della comprensione è che i processi asincroni
1) non garantisce la tempestività e nemmeno la disponibilità della risposta
2) richiede chiaramente code di operazioni separate da parte dello sviluppatore

In altre parole, dovremo generare una lista di ordini e poi controllarli e riempirli all'interno di OnTrade. Questo, ovviamente, è straziante.

Da parte nostra, potremmo mantenere in modo trasparente code asincrone, riempirle di risposte e fornire ai commercianti comode funzioni per controllare e recuperare voci elaborate dalla coda. Puoi controllare le code in modo asincrono in OnTrade o in modo sincrono facendo il polling nel ciclo subito dopo l'invio di un batch di ordini.

Penseremo a un tale meccanismo - renderebbe la vita più facile agli sviluppatori EA alleggerendoli dalla loro routine.