Diskussion zum Artikel "Wie man auf die MySQL-Datenbank von MQL5 (MQL4) aus zugreift" - Seite 19

 
Vielen Dank an den Autor, ich modifiziert dieses Projekt lokal, so dass ich nicht-englische Wörter in MySQL DB-Code-Seite UTF8 zu speichern.
 
Amy Liu:
Danke an den Autor, ich habe dieses Projekt lokal geändert, so dass ich nicht-englische Wörter in der MySQL DB Code Page UTF8 speichern kann.

Hallo Amy. Das ist großartig, ich hatte keine Zeit, es selbst zu machen. Also, wenn es dir recht ist, kannst du die Quellen mit der Community teilen?

 

Hallo an alle!

Leider habe ich keine Zeit, dieses Projekt zu unterstützen und Zeit in der Gemeinschaft zu verbringen, so dass alle meine Lieben mir unbeantwortete Fragen und mein Schweigen verzeihen.

Aber ich sehe hier einige erfahrene Leute, die anderen helfen können, und das ist wirklich toll.

Ich danke euch allen, dass ihr meine Bibliothek benutzt, ihre Funktionalität erweitert und eure eigenen Erfahrungen sammelt.

Viel Glück für alle mit euren Projekten!


Mit freundlichen Grüßen,

Eugene

 
dragossh:

Hallo Eugeniy Lugovoy,

zunächst einmal vielen Dank, dass Sie sich die Zeit genommen haben, dieses Projekt zu erstellen.

Ich suche schon seit Wochen, wie man alle offenen/geschlossenen Geschäfte eines Handelskontos in eine MySQL-Tabelle importieren/aktualisieren kann, wenn möglich in Echtzeit. gibt es eine Möglichkeit, dies mit Ihrer Bibliothek zu tun?

Vielen Dank im Voraus.

Dragos

Hallo Dragos!

Sicher, Sie können einen EA erstellen, der diese Bibliothek verwendet, um Daten in Ihre Mysql-Datenbank einzufügen und sie auf dem neuesten Stand zu halten (nahezu in Echtzeit).

Beachten Sie, dass geschlossene Orders in MT4/5 nur dann programmatisch verfügbar sind, wenn sie in der Registerkarte History aufgelistet sind. Wenn Sie also den Filter in der Historie auf die letzten 3 Tage setzen, können Sie nur auf Trades zugreifen, die in diesem Zeitraum verarbeitet wurden.

Es ist nicht abhängig von dieser Bibliothek, es ist nur MQL-MT4 Infrastruktur.

Mit freundlichen Grüßen,

Eugene

 

Zugriffsverletzung beim Lesen von 0x000003B0 in '\MQL4\libraries\MQLMySQL.dll'

Können Sie mir sagen, wo ich suchen muss?

OS win 10, mariadb 5.5.59
 

Eugene,

Awesome Arbeit wieder als dies war sehr einfach zu bekommen funktioniert.

Neugierig, haben Sie oder jemand anderes hier versucht, diese Arbeit auf dem Strategy Tester zu bekommen? Ich habe das Skript auf einem Indie in der Live-Umgebung entwickelt und alles ist OK, aber ich hatte kein Glück bei der Integration in eine Backtesting-Umgebung.


br George

 
Eugeniy Lugovoy:

Hallo Amy. Das ist großartig, ich hatte keine Zeit, es selbst zu machen. Wenn es dir recht ist, kannst du die Quellen mit der Community teilen?

Hallo Eugeniy,

Entschuldigung für die späte Antwort. Hier ist, was ich mit deinem Code gemacht habe. Ich habe nur eine Funktion cMySqlGetRowField geändert , um MultiByteToWideChar zu verwenden . Der ursprüngliche Code ist zum Vergleich kommentiert.

// Rückgabe einer Zeichenkette, die den Wert des Feldes darstellt
// sollte nach MySqlCursorFetchRow() aufgerufen werden
// pCursorID - CURSOR IDENTIFIER
// pField - Nummer des Feldes aus der SELECT-Liste (beginnend mit 0) - 0,1,2 usw.
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]);
                        //Rückgabe (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);
}
 

Hallo Kollegen, ich habe eine Frage:

Wenn der Expert Advisor auf einem Terminal läuft, gibt es keine Probleme, wenn ich den gleichen Expert Advisor auf einem anderen Terminal laufen lasse, schreibt er ständig folgenden Fehler:

Cursor #0 closing error:-5: Falscher CURSOR-Bezeichner.

Was könnte das Problem sein?

 
Dmitry Melnichenko:

Hallo Kollegen, ich habe eine Frage:

Wenn der Expert Advisor auf einem Terminal funktioniert, gibt es keine Probleme, wenn ich den gleichen Expert Advisor auf einem anderen Terminal laufen lasse, kommt ständig dieser Fehler:

Cursor #0 closing error:-5: Falscher CURSOR-Bezeichner.

Was könnte das Problem sein?

Versuchen Sie, eine Verbindung mit anderen Anmeldeinformationen herzustellen. Das heißt, mit einem anderen Login/Pass für MySQL. Das heißt, erstellen Sie ein anderes Login mit entsprechenden Berechtigungen für die Datenbank.

und arbeiten Sie im transaktionalen Modus.


 
Maxim Kuznetsov:

Versuchen Sie, eine Verbindung mit anderen Anmeldedaten herzustellen. Das heißt, mit einem anderen Login/Pass für MySQL. Das heißt, erstellen Sie dort ein anderes Login mit entsprechenden Rechten für die Datenbank.

und arbeiten Sie im transaktionalen Modus.


Ich habe einen neuen Benutzer angelegt und versucht, mich mit seinen Anmeldedaten zu verbinden, aber es hat nicht geholfen!