Errori, bug, domande - pagina 3079
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
Il mercato non carica uno screenshot. Provato da due browser.
Anch'io...
Buon pomeriggio, quale potrebbe essere il problema? Uso la dll per scrivere su SQL Server (esempio dall'articolo https://www.mql5.com/ru/articles/2895 ).
Se uso fino a 5 thread, i dati vengono scritti correttamente. Se uso più thread, ci sarà un errore "Unhandled exception 0xE0434352".
Buon pomeriggio, quale potrebbe essere il problema? Uso la dll per scrivere su SQL Server (esempio dall'articolo https://www.mql5.com/ru/articles/2895 ).
Se uso fino a 5 thread, i dati vengono scritti correttamente. Se uso più threads l'errore "Unhandled exception 0xE0434352" appare subito.
In tutte le funzioni della DLL di interfaccia dovremmo usare try catch, catturare "unhandled exception" e scriverlo nel log...
È una buona idea catturare tutte le eccezioni e provare tutte le chiamate ai plus. Anche nella documentazione MQL è scritto chiaramente - le DLL non dovrebbero lanciare eccezioni, non il C++.
in particolare nell'articolo conn.Close e new SqlConnection non rientrano in "exception catching" e possono potenzialmente lanciare eccezioni
Lo screenshot non si carica nel Marketplace. Ho provato con due browser.
Anch'io...
Hai provato un semplice drag and drop dell'immagine?
Forum sul trading, sistemi di trading automatico e test di strategia
Mercato e matematica
Alexey Viktorov, 2021.08.19 21:01
Provate a inserire un'immagine semplicemente trascinandola sul testo.
Ora ho provato a fare delle modifiche in Expert Advisor nascosto e ho trascinato la prima immagine che ho visto.
Hai provato un semplice drag and drop dell'immagine?
su 5 immagini solo una viene aggiunta
Questo è stato il caso per molto tempo. Le stringhe mql non amano molto i caratteri nulli all'interno di una stringa e nei letterali, anche nelle funzioni.
L'unico modo normale è convertire tre stringhe in un array con uno zero finale.
Cioè questo comportamento come è ora è stato fatto deliberatamente qualche anno fa. Non conosco le ragioni.Ci sono nemici ovunque
In tutte le funzioni DLL di interfaccia, avvolgere tutto in try catch, catturare l'"eccezione non gestita" e registrarla...
È una buona idea catturare tutte le eccezioni e avvolgere tutte le chiamate a plus in try. Anche nella documentazione MQL è scritto chiaramente - le DLL non dovrebbero lanciare eccezioni, non il C++.
in particolare conn.Close e new SqlConnection non lanciano eccezioni e potrebbero potenzialmente lanciarne una
Grazie! Controllato, errore di accesso alla variabile condivisa. Anche l'autore ne ha scritto.
Va notato che il progetto demo ha una limitazione molto significativa: permette di eseguire solo un Expert Advisor che lavora con DB in un terminale MetaTrader. La questione è che tutti gli EA usano un'istanza di una DLL caricata. Poiché la nostra classe è statica, sarà la stessa per tutti gli Expert Advisor in esecuzione. Anche le variabili saranno comuni. Se si eseguono diversi esperti, essi useranno tutti la stessa connessione e un oggetto comando per tutti. Se diversi esperti cercano di accedere a questi oggetti allo stesso tempo, possono verificarsi dei problemi.
D: Come posso implementare l'accesso multi-thread a dll (istanza separata per ogni chiamata di funzione e variabili locali per ogni chiamata)?
Sto riscontrando questo problema nel tester MT5.
Lavorando con più valute, i dati vengono occasionalmente scambiati da un'altra valuta. Controllare il tester. Per favore, correggetelo.
Il primo valore èSymbolInfoDouble(symbol,SYMBOL_BID);
Come se non potesse ricevere i prezziSymbolInfoDouble(EURGBP,SYMBOL_BID); e prende il valore da un'altra coppia che è in funzione. C'è un modo per controllare se la citazione è corretta?
Grazie! Controllato, errore di accesso alla variabile condivisa. L'autore ha anche scritto
Va notato che il progetto demo ha una limitazione molto significativa: permette di eseguire solo un Expert Advisor che lavora con DB in un terminale MetaTrader. La questione è che tutti gli EA usano un'istanza di una DLL caricata. Poiché la nostra classe è statica, sarà la stessa per tutti gli Expert Advisor in esecuzione. Anche le variabili saranno comuni. Se si eseguono diversi esperti, essi useranno tutti la stessa connessione e un oggetto comando per tutti. Se diversi esperti cercano di accedere a questi oggetti allo stesso tempo, possono verificarsi dei problemi.
D: Come posso implementare l'accesso multi-thread a dll (istanza separata per ogni chiamata di funzione e variabili locali per ogni chiamata)?
Non c'è quasi nessun modo di farlo in .NET. La classe è resa statica non perché l'autore dell'articolo sia malvagio, ma perché è così che vengono importate le classi nitide.
Vedo due modi: 1) (lungo da scrivere, funziona velocemente) riscrivere in C++ e non toccare più .NET 2) (piuttosto meccanicamente, ma la velocità scenderà e potrebbero esserci effetti collaterali) avvolgere premurosamente le chiamate in Critical Section per evitare che due thread accedano contemporaneamente
se lo sharping è importante, un'altra opzione - riscrivere i pool di connessioni di controllo a livello di DLL per ricordare la mappatura di EA<->connection_id e ogni EA lavora con la sua connessione;
non posso dire su .net - è possibile ottenere e memorizzare il riferimento all'oggetto sharping in qualche struttura MQL o scalare e passarlo avanti e indietro. Cioè operare come con un normale puntatore C++. Se è possibile, allora tutto si semplifica.