FORTI. Problemi di applicazione - pagina 62

 

Buon pomeriggio a tutti!

Ho una situazione leggermente diversa. Broker BCS. Un ordine di mercato non viene eseguito la prima volta.

Invio di un ordine di acquisto al mercato. La funzione restituisce "Ordine effettuato" e il numero dell'ordine, ma l'ordine non viene effettivamente eseguito!

E così il robot fa molti tentativi. Invia un ordine di acquisto al mercato, riceve una risposta positiva, ma non effettua scambi. Allo stesso tempo, il numero d'ordine nella risposta è ogni volta nuovo.

Di conseguenza, prima o poi la posizione si aprirà, ma devi bombardare il broker di ordini, il che è chiaramente sbagliato.

Per favore aiutatemi, non capisco se il mio robot ha dei bug o se il broker sta sbagliando? Non ci sono lamentele sul robot, tutte le funzioni di verifica vanno come previsto e le risposte vengono controllate.

Hanno chiamato i broker, ma il "consulente" ha alzato le spalle, come se si aprisse un affare con le mani, allora c'è un errore nel robot , ma qui sono fuori mercato.

 2015.12 . 23 11 : 02 : 00.053 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 55 ms
2015.12 . 23 11 : 02 : 00.006 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 59.554 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 59.507 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 59.413 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 116 ms
2015.12 . 23 11 : 01 : 59.304 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 59.117 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 59.055 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 58.774 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 54 ms
2015.12 . 23 11 : 01 : 58.711 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 58.680 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 58.633 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 58.259 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 74 ms
2015.12 . 23 11 : 01 : 58.181 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 57.916 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 57.869 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 57.775 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 57.729 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 57.682 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 57.619 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 57.557 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 57.510 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 57.385 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 57.323 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 57.292 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 57.245 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 57.058 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 63 ms
2015.12 . 23 11 : 01 : 56.995 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 56.777 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 56.730 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 56.481 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 56.434 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 56.169 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 56.122 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 56.075 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 56.028 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 55.451 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 55.389 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 55.326 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 55.279 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 55.155 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 55.092 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 55.045 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 54 ms
2015.12 . 23 11 : 01 : 54.983 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 54.983 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 54.921 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 54.843 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 54.796 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 54.655 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 54.609 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 54.546 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 54.484 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 54.453 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 151 ms
2015.12 . 23 11 : 01 : 54.297 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 53.844 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 53.797 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 53.751 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 53.688 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 53.423 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 53.376 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 53.361 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 60 ms
2015.12 . 23 11 : 01 : 53.298 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 53.283 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 53.236 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 53.142 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 53.080 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 53.033 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 52.986 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 52.877 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 52.830 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 52.830 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 69 ms
2015.12 . 23 11 : 01 : 52.752 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 52.643 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 52.596 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 52.487 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 52.440 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 52.425 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 52.378 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 52.081 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 55 ms
2015.12 . 23 11 : 01 : 52.019 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 51.988 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 51.941 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 51.879 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 51 ms
2015.12 . 23 11 : 01 : 51.832 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 51.364 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 51.317 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 51.223 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 51.161 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 51.114 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 51.052 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 50.989 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 50.943 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 50.693 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 50.631 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 50.584 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 50.521 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 50.475 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 50.412 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 50.397 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 50.350 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 50.225 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 53 ms
2015.12 . 23 11 : 01 : 50.178 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 50.147 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 50.100 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 50.053 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 49.991 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 49.975 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 52 ms
2015.12 . 23 11 : 01 : 49.913 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
2015.12 . 23 11 : 01 : 49.866 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487 placed for execution in 51 ms
2015.12 . 23 11 : 01 : 49.804 Trades   'xxxxxxx' : exchange buy 66.00 Si- 3.16 at market sl: 72487
 
Сергей:

Buon pomeriggio a tutti!

Ho una situazione un po' diversa. Il mio broker è BCS. L'ordine a mercato non viene eseguito al primo tentativo.

Mando un ordine di acquisto al mercato. La funzione restituisce "Ordine effettuato" e il numero dell'ordine, ma in realtà l'ordine non viene eseguito!

E così il robot fa molti tentativi. Invia un ordine di acquisto sul mercato, ottiene una risposta positiva, ma nessun accordo. Il numero d'ordine nella risposta è nuovo ogni volta.

Di conseguenza, la posizione si aprirà prima o poi, ma devo bombardare il broker con ordini, il che è ovviamente sbagliato.

Non so se il mio robot forex è guasto o se il mio broker non funziona bene. Non ho rivendicazioni sul robot, tutte le routine di controllo funzionano correttamente e le risposte vengono controllate.

Ho chiamato i broker, ma il "consulente" ha stretto le mani e ha detto che se un affare viene aperto a mano, significa che il robot è sbagliato e loro non c'entrano niente.

Sergiy!

È difficile dire qualcosa senza aver visto il vostro codice.

Ma, a giudicare dalla stampa, non si controlla correttamente il posizionamento dell'ordine.

 
Михаил:

Sergei!

È molto difficile da dire senza vedere il vostro codice.

Ma a giudicare dalla stampa, non stai controllando correttamente l'impostazione dell'ordine.


Mikhail, questo è il log del terminale, cioè accetta l'ordine, dice che è corretto, restituisce il codice di successo e il numero dell'ordine, cioè mette l'ordine nella coda di esecuzione ma non lo esegue. E così tante, tante volte.

Ma credo di aver capito.

Secondo l'algoritmo, il rischio consentito ti permette di aprire un trade per l'intero deposito. Deal volume = fondi disponibili / GO, cioè il deposito viene utilizzato quasi fino all'ultimo centesimo. (Questo è un errore, naturalmente, e non dovrebbe essere fatto in questo modo).

Tecnicamente, abbiamo abbastanza denaro per aprire un'operazione in questo volume e l'ordine viene controllato dal terminale e accettato dal kernel MT5(la funzione OrderSend restituisce true e il numero dell'ordine),

Ma poi l'ordine viene rifiutato da qualche parte nella coda di esecuzione (al broker o al gateway con lo scambio) e non viene eseguito come risultato. È qui che entra in gioco il difetto di MT5 sul lato Metacquotes.

Il problema è che io, come cliente, non sono informato in alcun modo su questo. Tutto è andato bene per il robot, ma in realtà l'ordine è stato rifiutato dal broker/gateway/exchange (posso solo speculare qui).


La funzione OrderSend avrebbe dovuto rifiutare l'ordine e restituire il codice di errore TRADE_RETCODE_NO_MONEY al robot ma non è successo per qualche motivo.

Sembra che abbiamo bisogno di tracciare l'esecuzione di OnTradeTransaction in dettaglio.

 
Сергей:


Michael, è il log del terminale, cioè accetta l'ordine, dice che è riempito correttamente, restituisce il codice di successo e il numero dell'ordine, cioè mette l'ordine nella coda di esecuzione, ma non lo esegue. E così tante, tante volte.

Ma credo di aver capito.

Secondo l'algoritmo, il rischio consentito permette di aprire un trade per l'intero deposito. Volume delle transazioni = fondi disponibili / CS, cioè il deposito viene utilizzato quasi fino all'ultimo centesimo. (Questo è ovviamente un errore, non si può fare).

Tecnicamente, abbiamo abbastanza denaro per aprire un'operazione in questo volume e l'ordine viene controllato dal terminale e accettato dal kernel MT5(la funzione OrderSend restituisce true e il numero dell'ordine),

Ma poi l'ordine viene rifiutato da qualche parte nella coda di esecuzione (al broker o al gateway con la borsa) e non viene eseguito come risultato. È qui che entra in gioco il difetto di MT5 sul lato Metacquotes.

Il problema è che io, come cliente, non sono informato in nessun modo su questo. Per il robot ha avuto successo, ma in realtà l'ordine è stato rifiutato dal broker/gateway/portale (posso solo speculare qui).


La funzione OrderSend avrebbe dovuto rifiutare l'ordine e restituire il codice di errore TRADE_RETCODE_NO_MONEY al robot ma per qualche motivo non l'ha fatto.

Ancora una volta, non stai controllando correttamente l'impostazione dell'ordine.

Solo perché hai ricevuto una FATTURA di un ordine non significa che l'ordine sia stato inserito nello scambio!

 
Михаил:

Ancora una volta, ripeto che non state controllando correttamente l'impostazione dell'ordine.

Solo perché avete ricevuto una FATTURA di un ordine non significa affatto che l'ordine sia stato piazzato in borsa!

Sono d'accordo, a quanto pare ho una lacuna di conoscenza su questo tema qui.

Non ho mai incontrato questo comportamento prima d'ora, ho banalmente inviato per mercato e si è sempre o aperto o ottenuto un errore immediatamente.

Non ho avuto bisogno di entrare nei dettagli delle sfumature di basso livello dell'esecuzione degli ordini nella coda. E qui...

 
Сергей:

Sono d'accordo, a quanto pare ho una lacuna di conoscenza su questo argomento.

Non ho riscontrato questo comportamento prima, ho banalmente inviato per mercato e si è sempre o aperto o ha ottenuto un errore immediatamente.

In generale, non avevo bisogno di entrare nei dettagli di basso livello dell'esecuzione degli ordini nella coda. E qui...

Dopo aver ricevuto un ordine, usare la funzione OrderRealSelect()

https://www.mql5.com/ru/forum/67298/page2#comment_2089220

ФОРТС: В помощь начинающим
ФОРТС: В помощь начинающим
  • www.mql5.com
Установка отложенного ордера командой OrderSend(). - Страница 2 - Категория: биржевой трейдинг
 

Questo è più o meno quello che dovreste fare:

//+------------------------------------------------------------------+
//|                                                   Test_array.mq5 |
//|                                          Copyright 2015, Mikalas |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Mikalas"
#property link      "https://www.mql5.com"
#property version   "1.00"
//
#define  ERR_ZERO_TICKET -1
//
enum ENUM_ORD_REAL_STATE
{
  ORD_NOT_SPECIFIED         = 0, //Состояние ордера не определено
  ORD_NONE_CANCELED         = 1, //Ордера нет, отменён пользователем
  ORD_NONE_PARTIAL_CANCELED = 2, //Ордера нет, исполнился частично (не был залит вторым объёмом)
  ORD_NONE_PARTIAL          = 3, //Ордера нет, исполнился частично
  ORD_NONE_EXPIRED          = 4, //Ордера нет, удалён по сроку
  ORD_NONE_FILLED           = 5, //Ордера нет, исполнился полностью
  ORD_NONE_REJECTED         = 6, //Ордера нет, отклонён брокером(биржей)
  ORD_BUSY                  = 7, //Ордер находится в переходном состоянии
  ORD_EXIST                 = 8, //Ордер выставлен на биржу, возможны действия над ним
  ORD_EXIST_PARTIAL         = 9  //Ордер выставлен на биржу, частично исполнился, возможны действия над ним
};
enum ENUM_ORD_SELECT
{
  SELECT_ERROR = 0,
  SELECT_FALSE = 1,
  SELECT_TRUE  = 2,
  SELECT_BUSY  = 3
};
//
struct ORDER_DATA
{
  int                     error_code;
  datetime                time_setup;
  ENUM_ORDER_TYPE         type;
  ENUM_ORDER_STATE        state;
  ENUM_ORD_REAL_STATE     real_state;
  datetime                expiration;
  datetime                time_done;
  long                    t_set_msc;
  long                    t_done_msc; 
  ENUM_ORDER_TYPE_FILLING type_filling;
  ENUM_ORDER_TYPE_TIME    type_time;
  long                    magic;
  long                    pos_id;
  double                  vol_init;
  double                  vol_cur;
  double                  price_open;
  double                  sl;
  double                  tp;
  double                  price_cur;
  double                  price_stlim;
  string                  symbol;
  string                  comment;      
};
//
//
ulong order_ticket;
//
//+------------------------------------------------------------------+
// Expert Order Real Select function                                 |
//+------------------------------------------------------------------+
ENUM_ORD_SELECT OrderRealSelect( const ulong ticket, ORDER_DATA &ord_data, const bool get_data )
{
  double init_vol = 0;
  double cur_vol = 0;
  ZeroMemory( ord_data );
  ord_data.real_state = ORD_NOT_SPECIFIED;
  ord_data.error_code = ERR_SUCCESS;
  ResetLastError();
//---  
  if ( ticket > 0 )
  {
    if ( HistoryOrderSelect( ticket ) )
    {
      if ( get_data )
      {
        ord_data.comment = HistoryOrderGetString( ticket, ORDER_COMMENT );
        ord_data.expiration = datetime( HistoryOrderGetInteger( ticket, ORDER_TIME_EXPIRATION ) ); 
        ord_data.magic = HistoryOrderGetInteger( ticket, ORDER_MAGIC );
        ord_data.pos_id = HistoryOrderGetInteger( ticket, ORDER_POSITION_ID );
        ord_data.price_cur = HistoryOrderGetDouble( ticket, ORDER_PRICE_CURRENT );
        ord_data.price_open = HistoryOrderGetDouble( ticket, ORDER_PRICE_OPEN );
        ord_data.price_stlim = HistoryOrderGetDouble( ticket, ORDER_PRICE_STOPLIMIT );
        ord_data.sl = HistoryOrderGetDouble( ticket, ORDER_SL );
        ord_data.state = ENUM_ORDER_STATE( HistoryOrderGetInteger( ticket, ORDER_STATE ) );
        ord_data.symbol = HistoryOrderGetString( ticket, ORDER_SYMBOL );
        ord_data.t_done_msc = datetime( HistoryOrderGetInteger( ticket, ORDER_TIME_DONE_MSC ) );
        ord_data.t_set_msc = datetime( HistoryOrderGetInteger( ticket, ORDER_TIME_SETUP_MSC ) );
        ord_data.time_done = datetime( HistoryOrderGetInteger( ticket, ORDER_TIME_DONE ) );
        ord_data.time_setup = datetime( HistoryOrderGetInteger( ticket, ORDER_TIME_SETUP ) );
        ord_data.tp = HistoryOrderGetDouble( ticket, ORDER_TP );
        ord_data.type = ENUM_ORDER_TYPE( HistoryOrderGetInteger( ticket, ORDER_TYPE ) );
        ord_data.type_filling = ENUM_ORDER_TYPE_FILLING( HistoryOrderGetInteger( ticket, ORDER_TYPE_FILLING ) );
        ord_data.type_time = ENUM_ORDER_TYPE_TIME( HistoryOrderGetInteger( ticket, ORDER_TYPE_TIME ) );
        ord_data.vol_cur = HistoryOrderGetDouble( ticket, ORDER_VOLUME_CURRENT );
        ord_data.vol_init = HistoryOrderGetDouble( ticket, ORDER_VOLUME_INITIAL );
      }
      else
      {
        ord_data.state = ENUM_ORDER_STATE( HistoryOrderGetInteger( ticket, ORDER_STATE ) );
        cur_vol = HistoryOrderGetDouble( ticket, ORDER_VOLUME_CURRENT );
        init_vol = HistoryOrderGetDouble( ticket, ORDER_VOLUME_INITIAL );
      }   
//---
      switch( ord_data.state )
      { 
        case ORDER_STATE_CANCELED: if ( get_data )
                                   {
                                     if ( ord_data.vol_init == ord_data.vol_cur )
                                     {
                                       ord_data.real_state = ORD_NONE_CANCELED;
                                     }
                                     else
                                     {
                                       ord_data.real_state = ORD_NONE_PARTIAL_CANCELED;
                                     }
                                   }
                                   else
                                   {
                                     if ( init_vol == cur_vol )
                                     {
                                       ord_data.real_state = ORD_NONE_CANCELED;
                                     }
                                     else
                                     {
                                       ord_data.real_state = ORD_NONE_PARTIAL_CANCELED;
                                     }
                                   }    
                                   break;
                                        
        case ORDER_STATE_PARTIAL:  ord_data.real_state = ORD_NONE_PARTIAL;
                                   break;
                                         
        case ORDER_STATE_EXPIRED:  ord_data.real_state = ORD_NONE_EXPIRED;
                                   break;
                                                                              
        case ORDER_STATE_FILLED:   ord_data.real_state = ORD_NONE_FILLED;
                                   break;
                                         
        case ORDER_STATE_REJECTED: ord_data.real_state = ORD_NONE_REJECTED;
                                   break;  
      }
    }
    else
    if ( OrderSelect( ticket ) )
    {
      if ( get_data )
      {
        ord_data.comment = OrderGetString( ORDER_COMMENT );
        ord_data.expiration = datetime( OrderGetInteger( ORDER_TIME_EXPIRATION ) ); 
        ord_data.magic = OrderGetInteger( ORDER_MAGIC );
        ord_data.pos_id = OrderGetInteger( ORDER_POSITION_ID );
        ord_data.price_cur = OrderGetDouble( ORDER_PRICE_CURRENT );
        ord_data.price_open = OrderGetDouble( ORDER_PRICE_OPEN );
        ord_data.price_stlim = OrderGetDouble( ORDER_PRICE_STOPLIMIT );
        ord_data.sl = OrderGetDouble( ORDER_SL );
        ord_data.state = ENUM_ORDER_STATE( OrderGetInteger( ORDER_STATE ) );
        ord_data.symbol = OrderGetString( ORDER_SYMBOL );
        ord_data.t_done_msc = datetime( OrderGetInteger( ORDER_TIME_DONE_MSC ) );
        ord_data.t_set_msc = datetime( OrderGetInteger( ORDER_TIME_SETUP_MSC ) );
        ord_data.time_done = datetime( OrderGetInteger( ORDER_TIME_DONE ) );
        ord_data.time_setup = datetime( OrderGetInteger( ORDER_TIME_SETUP ) );
        ord_data.tp = OrderGetDouble( ORDER_TP );
        ord_data.type = ENUM_ORDER_TYPE( OrderGetInteger( ORDER_TYPE ) );
        ord_data.type_filling = ENUM_ORDER_TYPE_FILLING( OrderGetInteger( ORDER_TYPE_FILLING ) );
        ord_data.type_time = ENUM_ORDER_TYPE_TIME( OrderGetInteger( ORDER_TYPE_TIME ) );
        ord_data.vol_cur = OrderGetDouble( ORDER_VOLUME_CURRENT );
        ord_data.vol_init = OrderGetDouble( ORDER_VOLUME_INITIAL );
      }
      else
      {
        ord_data.state = ENUM_ORDER_STATE( OrderGetInteger( ORDER_STATE ) );
      }
//--- 
      switch( ord_data.state )
      { 
        case ORDER_STATE_STARTED:
        case ORDER_STATE_REQUEST_ADD:
        case ORDER_STATE_REQUEST_MODIFY:
        case ORDER_STATE_REQUEST_CANCEL: ord_data.real_state = ORD_BUSY;
                                         break; 
 
        case ORDER_STATE_PARTIAL:        ord_data.real_state = ORD_EXIST_PARTIAL;
                                         break;
                                          
        case ORDER_STATE_PLACED:         ord_data.real_state = ORD_EXIST;
                                         break;
      }
    }
    else
    {
      ord_data.error_code = GetLastError();
    }  
//---   
    if ( ( ord_data.error_code != ERR_SUCCESS ) ||
       ( ord_data.real_state == ORD_NOT_SPECIFIED ) )
    {
      return( SELECT_ERROR );
    }
    else
    {
      switch( ord_data.real_state )
      {
        case ORD_BUSY:          return( SELECT_BUSY );
                                break;
                        
        case ORD_EXIST:   
        case ORD_EXIST_PARTIAL: return( SELECT_TRUE );
                                break;
                              
        default:                return( SELECT_FALSE );
                                break;                                             
      }
    }
  } 
  else
  {
    ord_data.error_code = ERR_ZERO_TICKET; 
    return( SELECT_ERROR );
  }
}
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   return( INIT_SUCCEEDED );
}
//
void OnTick()
{
  if ( PositionSelect( _Symbol ) )
  {
    //Позиция открыта, ордер исполнился
  }
  else
  {
    if ( order_ticket > 0 )
    {
      //Проверяем что с ордером
      ORDER_DATA order_data;
      ENUM_ORD_SELECT ord_select = OrderRealSelect( order_ticket, order_data, true );
      switch( ord_select )
      {
        case SELECT_BUSY:  //Ничего не делаем, ордер в переходном состоянии
                           break;
        
        case SELECT_FALSE: //Ордера нет .... Проверяем, что с ним произошло
                           break;
                           
        case SELECT_TRUE: //Ордер есть.... Проверяем почему есть, а не исполнился
                           break; 
                           
        case SELECT_ERROR: //Проверяем что за ошибка
                           break;                                                             
      }
    }
    else
    {
      //Позиции нет, ордера нет. Устанавливаем ордер
    }
  }
}
 
 
Михаил:

Questo è più o meno quello che dovreste fare:

Mikhail, grazie! Questa è una caratteristica molto utile.
 
È passato un anno dall'inizio di questo thread.... :(
 
<br / translate="no">

Aitugan, forse ci saranno dei commenti dopo tutto? :((

Capisco naturalmente, molto non voglio distrarti dalla tua vacanza a Cipro, ma in qualche modo il silenzio è andato avanti per un tempo oscenamente lungo. :((

Motivazione: