Discussione sull’articolo "Comunicare con MetaTrader 5 utilizzando pipe denominate senza utilizzare DLL" - pagina 3
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Credo che la questione della comunicazione tra terminali abbia una piccola percentuale di applicazione.
Ma la comunicazione con i sistemi esterni è più importante e applicabile. È per questo che è stato aperto il canale sicuro.
Nessuno mette in discussione il fatto che sia stato dichiarato il suo scopo. Ma il problema è come è stato implementato. Dopo tutto, i sistemi esterni non sono necessariamente scritti in C, ma possono essere creati in diversi linguaggi di programmazione. E in molti linguaggi di programmazione è possibile connettersi al terminale attraverso un canale denominato solo come client attraverso operazioni su file. Ma la tecnologia scelta è quella client-server, cioè tale per cui due client non si incontrano se c'è una distanza tra loro senza un ponte - gateway. In altre parole, si sarebbe dovuto prevedere una tecnologia client-client o un gateway. E così è andata come nella favola di nonno Krylov "La volpe e l'uva":
Anche se l'occhio vede,Ma l'occhio non vede.
© I. Krylov
È stato necessario osservare come altri hanno realizzato una connessione simile con i sistemi esterni. Ad esempio: VMWare, MS SQL Server, MySQL, modem esterni e così via. La loro parte server è implementata internamente. Ed è molto comodo unirsi senza stampelle, anche attraverso un canale denominato, o tramite TCP/IP e altri canali di comunicazione. È anche possibile scegliere, ad esempio, attraverso un canale denominato, ma in remoto via TCP/IP con l'aiuto dell'utility "Named Pipe TCP Proxy". In altre parole, gli utenti non devono creare stampelle aggiuntive, ma solo scegliere l'applicazione client più adatta e collegarsi e lavorare immediatamente.
Tenete conto che MQL5 è un ambiente applicativo sicuro, e chiaramente un ambiente client, in cui è irragionevole creare funzioni server.
Non sono sicuro che la funzionalità server sia stata dichiarata. La funzionalità client è stata pianificata e implementata.
Credo di aver creato il codice per il gateway. Non l'ho ancora testato. Scaricherò e installerò MinGW e vedrò cosa c'è che non va.
MinGW è stato installato, configurato e collegato a NetBeans.
L'idea di creare un gateway full-duplex da due canali server e di reindirizzare le informazioni ai client da un canale all'altro non ha funzionato. Se un sottoprocesso del server legge un canale e il secondo gli invia qualcosa, il full duplex non funziona (almeno su Windows XP), perché a volte il sottoprocesso che legge dal canale intercetta i messaggi del sottoprocesso che scrive sullo stesso canale e restituisce le informazioni.
Se si rimuove uno dei sottoprocessi, la trasmissione avviene in simplex da client a client senza problemi.
Tuttavia, non tutto è perduto, perché esiste anche una modalità sovrapposta, cioè quando non vengono creati due canali, ma uno solo, e diversi client vi si connettono contemporaneamente. In questo caso il server non ha bisogno di leggere continuamente le informazioni dal canale, perché tutto si basa sugli eventi. Cioè, se un client invia informazioni al canale, il server legge il suo evento e ne estrae il messaggio trasmesso. E reindirizzare le informazioni ricevute al secondo client è già una questione di tecnica. Sono in procinto di creare un'implementazione di questo tipo.
È così. Mi sono arreso. Sono stanco di armeggiare con il codice C++ e persino con le API di Win. Non tanto di codificare, quanto di scavare tra gli sparsi frammenti di informazioni su MSDN per cercare di capire come tutto dovrebbe funzionare. Manca l'esperienza, quindi ho inviato tutto questo materiale a Service Work. Vedere Rifare il codice C++ in un gateway full duplex bidirezionale.
Forse qualcuno più esperto può gestire facilmente questo compito? Non escludo che la ragione del fallimento sia che non sono riuscito a capire le impostazioni dei canali denominati. Cioè è possibile che proprio in queste impostazioni sia necessario scrivere qualcosa di corretto e che tutto funzioni. Finora non sono riuscito a fare nulla se non in modalità simplex e a farlo funzionare.
Ho deciso di provare a fare amicizia tra MQL e AutoIt attraverso le pipeline.
In breve, un solo rastrello, e ovunque :)
Bene, sono riuscito a trasferire il file in AutoIt con un po' di fortuna, solo i primi 4 byte dovevano essere scartati, c'è un po' di "spazzatura". Cos'è questa "spazzatura"?
Poi ho provato a trasferire in MQL, ma qui è ancora più divertente: non arriva nulla. O forse non organizzo correttamente il trasferimento.... Forse il problema sta tutto in quei 4 byte?
Cosa puoi dirmi?
Ho deciso di provare a fare amicizia tra MQL e AutoIt attraverso le pipeline.
In breve, un solo rastrello, e ovunque :)
Bene, sono riuscito a trasferire il file in AutoIt con un po' di fortuna, solo i primi 4 byte dovevano essere scartati, c'è un po' di "spazzatura". Cos'è questa "spazzatura"?
Poi ho provato a trasferire in MQL, ma qui è ancora più divertente: non arriva nulla. O forse non organizzo correttamente il trasferimento.... Forse il problema sta tutto in quei 4 byte?
Cosa puoi dirmi?
Quindi, anche tu sei lì dentro?
No, sono qui). Quindi, era così:
MQL5
AutoIt
Questa parte del trasferimento da MQL ad AutoIt. Funziona con.
Con una stringa da Func ReadMsg($hPipe)
Mangio i primi 4 byte e tutto funziona.
Domanda: cosa contengono questi primi 4 byte?
Ho eliminato i primi 4 byte e tutto funziona.
Domanda: cosa contengono questi primi 4 byte?
Renat, quando è prevista la creazione di pip in MT4?