Discussione sull’articolo "Come accedere al database MySQL da MQL5 (MQL4)" - pagina 19

 
Grazie all'autore, ho modificato questo progetto localmente, in modo da poter utilizzare parole non inglesi memorizzate nella pagina di codice UTF8 del DB MySQL.
 
Amy Liu:
Grazie all'autore, ho modificato questo progetto a livello locale, in modo da poter utilizzare parole non inglesi memorizzate nella pagina di codice UTF8 del DB MySQL.

Ciao Amy. È fantastico, non avevo tempo per farlo da solo. Quindi, se per te va bene, puoi condividere i sorgenti con la comunità?

 

Ciao a tutti!

Purtroppo non ho tempo per sostenere questo progetto e per passare del tempo nella comunità, quindi perdonate le domande senza risposta e il mio silenzio.

Ma vedo qui alcune persone esperte che possono aiutare gli altri ed è davvero fantastico.

Grazie a tutti voi per aver utilizzato la mia libreria, per averne esteso le funzionalità e per aver fatto la vostra esperienza.

Buona fortuna a tutti con i vostri progetti!


Cordiali saluti,

Eugene

 
dragossh:

Ciao Eugeniy Lugovoy,

Innanzitutto, grazie per aver dedicato del tempo a questo progetto.

Ho cercato per settimane come importare/aggiornare tutte le operazioni aperte/chiuse da un conto di trading in una tabella MySQL, se possibile in tempo reale. c'è un modo per farlo usando la tua libreria?

Grazie mille in anticipo.

Dragos

Ciao Dragos!

Certo, puoi costruire un EA utilizzando questa libreria per inserire i dati nel tuo database Mysql e mantenerli aggiornati (quasi in tempo reale).

Attenzione, gli ordini chiusi in MT4/5 sono disponibili programmaticamente solo quando sono elencati nella scheda Cronologia. Quindi, se impostate il filtro in Cronologia 3 giorni recenti, potrete accedere solo alle operazioni elaborate in quel periodo.

Non dipende da questa libreria, ma solo dall'infrastruttura MQL-MT4.

Saluti,

Eugene

 

Violazione dell'accesso in lettura a 0x000003B0 in '\MQL4\libraries\MQLMySQL.dll'.

potete dirmi dove scavare?

OS win 10, mariadb 5.5.59
 

Eugene,

Ancora un lavoro fantastico, è stato molto semplice farlo funzionare.

Una curiosità: tu o qualcun altro qui avete provato a farlo funzionare con lo Strategy Tester? Ho evoluto lo script su un indie nell'ambiente live e tutto va bene, ma non ho avuto fortuna nell'integrazione in un ambiente di backtesting.


br George

 
Eugeniy Lugovoy:

Ciao Amy. È fantastico, non ho avuto tempo di farlo da solo. Quindi, se per te va bene, puoi condividere le fonti con la comunità?

Ciao Eugeniy,

Scusa per la risposta tardiva. Ecco cosa ho fatto con il tuo codice. Ho solo modificato una funzione cMySqlGetRowField per utilizzare MultiByteToWideChar. Il codice originale è commentato per il confronto.

// restituisce la rappresentazione in stringa del valore del campo
// dovrebbe essere chiamato dopo MySqlCursorFetchRow()
// pCursorID - IDENTIFICATORE DEL CURSORE
// pField - numero del campo dell'elenco SELECT (a partire da 0) - 0,1,2 e.t.c.
MT4_EXPFUNC wchar_t* __stdcall cMySqlGetRowField(int pCursorID, unsigned int pField)
{
        SCOPE_LOCK_MUTEX(g_mutex.get());
        ClearCursorErrors(pCursorID);
        if ((pCursorID >= 0) && (pCursorID < MAX_CURSORS) && (Cursors[pCursorID].Id!=-1))
        {
                if ((pField >= 0) && (pField < mysql_num_fields(Cursors[pCursorID].RecordSet)))
                {
                        // 预算-缓冲区中宽字节的长度
                        int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, Cursors[pCursorID].CurrentRow[pField], -1, nullptr, 0);
                        if (unicodeLen<=1024)
                        {
                                // 开始向缓冲区转换字节
                                MultiByteToWideChar(CP_UTF8, 0, Cursors[pCursorID].CurrentRow[pField], -1, Cursors[pCursorID].Value, unicodeLen);
                                return(Cursors[pCursorID].Value);
                        }
                        //sprintf_s(Cursors[pCursorID].Value, "%s", Cursors[pCursorID].CurrentRow[pField]);
                        //swprintf(Cursors[pCursorID].Value, 1024, L"%S", Cursors[pCursorID].CurrentRow[pField]);
                        //restituisce (Cursors[pCursorID].Value);
                }
                else
                {
                        Cursors[pCursorID].CursorErrorNumber = -4;
            swprintf(Cursors[pCursorID].CursorErrorDescription, 32, L"Wrong number of field.\x00");
                }
        }
        else
        {
                CursorErrorNumber = -5;
                swprintf(CursorErrorDescription, 32, L"Wrong CURSOR identifier.\x00");
        }
        return (WideNull);
}
 

Salve colleghi, ho una domanda:

Quando l'Expert Advisor funziona su un terminale, non ci sono problemi, quando eseguo lo stesso Expert Advisor su un altro terminale scrive costantemente il seguente errore:

Errore di chiusura del Cursore #0:-5: Identificatore CURSORE errato.

quale potrebbe essere il problema?

 
Dmitry Melnichenko:

Salve colleghi, ecco una domanda:

Quando l'Expert Advisor funziona su un terminale, non ci sono problemi, quando eseguo lo stesso Expert Advisor su un altro terminale scrive costantemente questo errore:

Errore di chiusura del Cursore #0:-5: Identificatore CURSORE errato.

quale potrebbe essere il problema?

Provare a connettersi con credenziali diverse. Ovvero, con un altro login/pass per MySQL. Ovvero, creare un altro login con i permessi appropriati per il database.

e lavorare in modalità transazionale.


 
Maxim Kuznetsov:

provare a connettersi con credenziali diverse. Ovvero, con un altro login/pass per MySQL. Cioè, fate un altro login con i diritti appropriati per il database.

e lavorare in modalità transazionale.


Ho creato un nuovo utente e ho provato a connettermi con le sue credenziali, ma non è servito!