Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 320

 

Cari programmatori, per favore consigliate chi lo sa!

Ho un Expert Advisor per MT4 che chiude un mucchio di ordini (500-2500) quando raggiunge un profitto totale. Come ho notato chiude gli ordini uno per uno ordinandoli secondo la magia - dal minore al maggiore.

Quindi, ecco la domanda: è possibile aggiungere al vostro Expert Advisor la funzione di lanciare uno script alla chiusura dell'ordine che chiuderebbe gli ordini ma ordinandoli per magia dalla fine - dal più grande al più piccolo?

Questa idea accelererà la velocità di chiusura degli ordini?

Da qualche parte mi è stato detto che fino a 4 richieste possono essere inviate al server simultaneamente.
 
Tapochun:
Allora devi guardare il codice... forse è il codice... c'è una linea del genere nelle stampe?
No. È stato tutto testato prima, senza domande... Cos'altro potrebbe essere?


 
Novikov:

Cari programmatori, per favore consigliate chi lo sa!

Ho un Expert Advisor per MT4 che chiude un mucchio di ordini (500-2500) quando raggiunge un profitto totale. Come ho notato chiude gli ordini uno per uno ordinandoli secondo la magia - dal minore al maggiore.

Quindi, la domanda è se è possibile aggiungere a Expert Advisor una funzione per lanciare uno script alla chiusura degli ordini che chiude gli ordini ma li ordina per magia dalla fine - dal più grande al più piccolo?

E questa idea accelererà la velocità di chiusura degli ordini?

Da qualche parte mi è stato detto che si possono inviare fino a 4 richieste al server simultaneamente.

Non è possibile eseguire lo script da Expert Advisor. Puoi davvero inviare al server diverse richieste da diversi EA allo stesso tempo. Se si sincronizzano diversi EA, si può effettivamente ottenere un certo guadagno di prestazioni.

Ma se fossi in te, non sbatterei la testa contro la porta aperta. Preferirei passare a MetaTrader5. La funzione OrderSendAsync permette di chiudere posizioni in batch ad una velocità incredibile di 100-200 ordini in un paio di secondi:

Forum sul trading, sistemi di trading automatico e test di strategia

Sviluppatori! Errore 10024 (Troppe richieste)

C-4, 2014.11.07 15:55

Comunque, riassumendo la mia piccola ricerca.

Sono riuscito a spingere 50 richieste in 50 millisecondi; 100 richieste in 180msec; 200 in 2100msec; 500 richieste in 9000msec; 1000 richieste in 23000msec. (il tempo è una media). Cioè, più abbiamo bisogno di spingere e più tempo ci vuole. Può essere una questione di codifica analfabeta.

Il tempo effettivo di esecuzione di un gruppo di richieste è ovviamente più lungo. Questo tempo sembra essere uguale al caso peggiore - tempo di invio della richiesta + tempo di esecuzione della richiesta. In ogni caso, al limite tende al tempo medio di esecuzione dell'ordine da parte della borsa + il tempo speso per la comunicazione con il server di trading. Se il numero di richieste è inferiore a 60, non abbiamo bisogno di comunicare con il server di trading, inviare tutte le richieste e attendere il loro adempimento. L'invio stesso richiede 40-60 millisecondi. Se ci sono più richieste, è più difficile. Bisogna aspettare la risposta del server, passare all'invio di nuovi ordini, aspettare il rifiuto, ecc. Quindi c'è questo scambio di messaggi sulla rete. Quando ci sono molte richieste, il pool viene rilasciato gradualmente man mano che le richieste vengono soddisfatte. Gli invii successivi arrivano in piccole porzioni, una o due richieste alla volta, e questa è la rete. Di conseguenza il tempo cresce. Tutto sommato il codice sembra funzionare correttamente, bisogna solo capire il meccanismo di invio/ricezione delle richieste.

Ho allegato il codice che testa tale invio.

p.s. Per riassumere, 60 richieste sono più che sufficienti anche per il trading HFT. In realtà hai bisogno di un'analisi cosciente delle azioni commerciali - invii un ordine, ottieni il risultato, analizzi l'ambiente commerciale, ne invii uno nuovo se necessario. L'intero ciclo supererà chiaramente la scala di 40-60 millisecondi + il tempo medio di esecuzione di 1 ordine.


 
R0MAN:
No. Tutto usato per testare senza fare domande... qualche consiglio su cos'altro potrebbe essere?


Prova a testare con dati freschi. Hai provato ad eseguirlo in un altro terminale?
 
Tapochun:
Prova a testare con dati freschi. Hai provato ad eseguirlo in un altro terminale?
No. Ne ho installato uno nuovo oggi da bx. Ho provato a fare dei test su di esso. Ne proverò un altro... Pubblicherò i risultati qui.
 
C-4:

Non è possibile eseguire uno script da un EA. È infatti possibile inviare diverse richieste da diversi EA al server allo stesso tempo. Se si sincronizzano diversi EA, è effettivamente possibile ottenere un certo guadagno di prestazioni.

Ma se fossi in te, non sbatterei la testa contro la porta aperta. Preferirei passare a MetaTrader5. La funzione OrderSendAsync permette di chiudere posizioni in lotti ad una velocità incredibile di 100-200 ordini in un paio di secondi:



Cosa c'entra MT5 e inoltre 100-200 ordini? E quali 100-200 ordini in MT5? Questi sono 100-200 strumenti di trading in MT5! Dopo tutto, solo 1 ordine può essere aperto su 1 simbolo - se non mi sbaglio!

E ho un accumulo di un gran numero di ordini su 28 strumenti e allo stesso tempo in parte con i lotti!

Se avete qualcosa da suggerire in questo argomento, ve ne sarei grato, e dare consigli che non sono legati alla domanda è inutile e poco costruttivo!

 
C-4:

Non è possibile eseguire uno script da un EA. È infatti possibile inviare diverse richieste da diversi EA al server allo stesso tempo. Se si sincronizzano diversi EA, è effettivamente possibile ottenere un certo guadagno di prestazioni.

Ma se fossi in voi, non sbatterei la testa contro la porta aperta. Preferirei passare a MetaTrader5. La funzione OrderSendAsync permette di chiudere posizioni in lotti ad una velocità incredibile di 100-200 ordini in un paio di secondi:


О! Vasiliy, se sei qui per favore guarda la mia domanda, grazie.

 
R0MAN:
Vasily, se sei qui, per favore guarda la mia domanda, grazie.

Ciao, ho controllato. Sfortunatamente, non ho mai incontrato un errore del genere prima d'ora. L'unica cosa che mi viene in mente è controllare la cartella history nel tester per esempio qui y:\MetaTrader 5\tester\bases\AdmiralMarkets-MT5\history\. Se non ci sono file per il simbolo richiesto, prova a copiare i dati manualmente dalla cartella principale y:\MetaTrader 5\bases\AdmiralMarkets-MT5\ e riavvia il tester. Nessun'altra idea finora.

s.e. Anche se è strano. Il tester dovrebbe copiare automaticamente la storia. Ma non si sa cosa.

 
C-4:
Ciao, ho controllato. Sfortunatamente, non ho mai incontrato un errore del genere prima d'ora. L'unica cosa che mi viene in mente è controllare la cartella history nel tester per esempio qui y:\MetaTrader 5\tester\bases\AdmiralMarkets-MT5\history\. Se non ci sono file per il simbolo richiesto, prova a copiare i dati manualmente dalla cartella principale y:\MetaTrader 5\bases\AdmiralMarkets-MT5\ e riavvia il tester. Per ora non ho altre idee.
Grazie. Tornerò al campus... Sono al cellulare in questo momento.
 
Novikov:

Cosa c'entra MT5 e soprattutto 100-200 ordini? E cosa sono questi 100-200 ordini in MT5? Questi sono 100-200 strumenti di trading in MT5! Dopo tutto, solo 1 ordine può essere aperto per 1 simbolo - se non mi sbaglio!

E ho un accumulo di un gran numero di ordini su 28 strumenti e allo stesso tempo in parte con i lotti!

Se avete qualcosa da suggerire in questo argomento, ve ne sarei grato, e dare consigli che non sono legati alla domanda è inutile e poco costruttivo!

Ancora una volta (leggere attentamente):

In MetaTrader4 è possibile chiudere gli ordini solo in modo sequenziale: inviare un ordine per chiudere un ordine, aspettare la sua esecuzione, passare all'ordine successivo, ecc. Per questo motivo il tempo per chiudere un batch di ordini in MetaTrader4 è sostanziale e non può essere ridotto con mezzi banali. Tuttavia, è possibile caricare diversi Expert Advisors sui propri grafici e farli scambiare informazioni tra loro e chiudere gli ordini con un comando comune. Ogni esperto chiude gli ordini solo al suo simbolo. Dato che ci sono diversi thread di trading in MetaTrader4, non si bloccherebbero a vicenda e non si invierebbero ordini l'un l'altro. Tuttavia, l'organizzazione di un tale pool di esperti è complicata, e a giudicare dal tuo livello di conoscenza, non ti consiglierei niente del genere.

Se pensate ancora che ho scritto troppe parole, ecco un breve riassunto:

1. La risposta alla tua domanda è no, non puoi eseguire uno script da un Expert Advisor.

2. Non è possibile aumentare la velocità di esecuzione degli ordini di trading in MetaTrader4 senza utilizzare metodi complessi.

L'unico modo per risolvere la tua domanda normalmente è usare la funzione OrderSendAsync, che non esiste in MetaTrader4.

Motivazione: