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
Ho completamente abbandonato l'idea di collegare MT5 e Quick, mi sono accontentato di Quick (DEE server + trans2quik.dll).
Sto considerando la realizzazione di questo programma.
Selector1 riceve costantemente i dati dal server DDE e li "immagazzina" in Storage e chiama la funzione OnTick nel Child corrispondente.
Quando si chiama GetStorageData, il server DDE dovrebbe essere in pausa e i dati dovrebbero essere memorizzati in Storage.
Quando Selector2 chiama callback, il server DDE e la registrazione di Storage dovrebbero essere sospesi e la chiamata GetStorageData dovrebbe essere disabilitata
Cioè il selettore2 ha priorità alta, GetStorageData normale e il selettore1 bassa.
Domande:
Come posso sincronizzare Selector1, Selector2 e GetStorageData con grazia?
Forse ci sono esempi concreti di tale sincronizzazione (non ho mai implementato una cosa del genere)?
Abbandonata l'idea di collegare MT5 e Quick, si è deciso di usare solo Quick (server DEE + trans2quik.dll)
Sto considerando la realizzazione di questo programma.
1. la decisione molto giusta di lasciare solo Quick.
2. La connessione via DEE è una soluzione molto controversa. Molti dicono che DDE è instabile, ma io non lo so.
Secondo me, una soluzione migliore e più versatile, è un'applicazione Lua-DLL. Io uso questa opzione. Naturalmente, dipende dal proprietario.
1. la decisione di tenere solo la Quick è stata quella giusta.
2. La comunicazione via DDE è una decisione molto controversa. Molte persone dicono che DDE è instabile, ma non lo so.
Secondo me, una soluzione migliore e più versatile, è un'applicazione Lua-DLL. Io uso questa opzione. Naturalmente, dipende dall'ospite.
Ho scritto molto tempo fa un server DDE per Quick - funziona senza problemi e abbastanza veloce (non più lento di Lua - DLL),
e non è affatto necessario scrivere codice aggiuntivo per il ricevitore di dati Lua e DDL.
Aggiunto
In effetti, ho già scritto il programma mostrato nel diagramma (e funziona), ma ho incontrato un problema di sincronizzazione.
Ho scritto molto tempo fa un server DDE per Quick - funziona senza problemi e abbastanza veloce (non più lento di Lua - DLL),
e non c'è affatto bisogno di scrivere codice aggiuntivo in Lua.
Dato che non ho fatto nessun DDE, la domanda è: come si fa il DDE? Penso che ci sia bisogno di fare una tabella con i dati, e poi eseguirla tramite DDE.
C'è una confusione con gli eventi. Qualcosa è cambiato, e sembra che l'intera tabella sia passata al DDE. O mi sbaglio?
Diciamo che mi sbaglio. Allora come faccio a identificare l'evento sul lato ricevente?
In effetti, ho già scritto il programma mostrato nel diagramma (e funziona), ma ho incontrato un problema di sincronizzazione.
Sincronizzare cosa con cosa?
Con Lua, questo problema è risolto da callback dalla DLL a dati arbitrari.
Dato che non ho avuto a che fare con il DDE, la domanda è come è fatto il DDE? Sembra che si debba fare una tabella con i dati, e poi eseguirla attraverso il DDE.
C'è una confusione con gli eventi. Qualcosa è cambiato, e sembra che l'intera tabella sia passata al DDE. O mi sbaglio?
Diciamo che mi sbaglio. Allora come identificare l'evento sul lato ricevente?
In Quick, la tabella richiesta viene generata per l'output.
Infine, lanciamo la nostra applicazione con il server DDE e facciamo uscire questa tabella via DDE.
Al primo output da Quick, l'intera tabella viene inviata a DEE, poi solo la riga della tabella
in cui si sono verificati i cambiamenti.
Nella tabella stessa (è trasmessa per intero) c'è (per esempio nel mio caso) un nome di strumento - questo è l'identificatore
Il server DDE stesso ha poche righe (io ce l'ho in Pascal, ma ci sono molti esempi su Internet in altri linguaggi)
Una finestra figlia viene creata dal nome dello strumento (come in MT 5)
Con cosa?
Ho descritto il problema nel topic del diagramma
Ho descritto il problema nel topic del diagramma
Scusa, non mi ero reso conto. Se ho capito bene:
Imho, la soluzione è usare un DBMS comeStorage, diciamo MS SQL Server. Questa può essere una soluzione parziale.
La seconda è quella di usare buffer intermedi, come last in, first out. Bene, e separazione dei fili.
Allora non c'è bisogno di fermare nulla, tutto viene semplicemente scritto nei buffer. Bene, e il DBMS ha un accesso multiutente.
Applico tutto questo, ma non sono buona amica di Pascal dal 6.
PS Dicono che si possono usare le librerie NET da Pascal. Per usare comeStorage, potrebbe avere senso usareSystem.Data,System.Data.DataSet eSystem.Data.DataTable. Se ricordo bene, non c'era nessun problema con l'accesso multiutente inDataTable.
ZZY2 Ora sto cercando di usare SQLite come database, ma ancora nessun risultato definitivo. E certamente non è un DBMS, ma in una forma ridotta l'accesso multiutente è possibile, ed è possibile creare un database in memoria.
No, ho solo bisogno di sincronizzare 3 thread (fondamentalmente scrivere un Synchronizer), ma
Non so come.