Discussion de l'article "Comment accéder à la base de données MySQL à partir de MQL5 (MQL4)" - page 19

 
Merci à l'auteur, j'ai modifié ce projet localement, afin de pouvoir utiliser les mots non-anglais stockés dans la page de code UTF8 de la base de données MySQL.
 
Amy Liu:
Merci à l'auteur, j'ai modifié ce projet localement, afin de pouvoir utiliser les mots non-anglais stockés dans la page de code UTF8 de la base de données MySQL.

Bonjour Amy. C'est génial, je n'ai pas eu le temps de le faire moi-même. Donc, si vous êtes d'accord, pouvez-vous partager les sources avec la communauté ?

 

Bonjour à tous !

Malheureusement, je n'ai pas le temps de soutenir ce projet et de passer du temps dans la communauté, donc tous mes amis pardonnent mes questions sans réponse et mon silence.

Mais je vois ici des personnes expérimentées qui peuvent aider les autres et c'est vraiment génial.

Merci à tous d'utiliser ma bibliothèque, d'étendre ses fonctionnalités et d'apporter votre propre expérience.

Bonne chance à tous pour vos projets !


Je vous prie d'agréer, Madame, Monsieur, mes salutations distinguées,

Eugène

 
dragossh:

Bonjour Eugeniy Lugovoy,

Tout d'abord, merci d'avoir pris le temps de réaliser ce projet.

Cela fait des semaines que je cherche comment importer/mettre à jour toutes les transactions ouvertes/fermées d'un compte de trading dans une table MySQL, si possible en temps réel. Y a-t-il un moyen de le faire en utilisant votre bibliothèque ?

Merci d'avance.

Dragos

Bonjour Dragos !

Bien sûr, vous pouvez construire un EA en utilisant cette bibliothèque pour insérer des données dans votre base de données Mysql et les maintenir à jour (proche de la mise à jour en temps réel).

Attention, les ordres fermés dans MT4/5 ne sont disponibles de manière programmatique que lorsqu'ils sont listés dans l'onglet Historique. Ainsi, si vous définissez le filtre dans l'historique 3 jours récents - vous ne pouvez accéder qu'aux transactions traitées au cours de cette période.

Cela ne dépend pas de cette bibliothèque, mais simplement de l'infrastructure MQL-MT4.

Je vous prie d'agréer, Monsieur, l'expression de mes salutations distinguées,

Eugène

 

Violation d'accès en lecture à 0x000003B0 dans '\MQL4\libraries\MQLMySQL.dll'

pouvez-vous me dire où creuser ?

OS win 10, mariadb 5.5.59
 

Eugène,

Un travail formidable encore une fois car c'était très simple à faire fonctionner.

Curieux, est-ce que vous ou quelqu'un d'autre ici a essayé de faire fonctionner ceci sur le testeur de stratégie? J'ai fait évoluer le script sur un indie dans l'environnement live et tout est OK, mais pas de chance d'intégration dans un environnement de backtesting.


br George

 
Eugeniy Lugovoy:

Bonjour Amy. C'est génial, je n'ai pas eu le temps de le faire moi-même. Donc, si vous êtes d'accord, pouvez-vous partager les sources avec la communauté ?

Bonjour Eugeniy,

Désolé pour la réponse tardive. Voici ce que j'ai fait avec votre code. J'ai juste modifié une fonction cMySqlGetRowField pour utiliser MultiByteToWideChar. Le code original est commenté pour la comparaison.

// renvoie une représentation sous forme de chaîne de caractères de la valeur du champ
// doit être appelé après MySqlCursorFetchRow()
// pCursorID - CURSOR IDENTIFIER
// pField - numéro du champ de la liste SELECT (à partir de 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]) ;
                        //return (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);
}
 

Bonjour chers collègues, j'ai une question :

Lorsque l'Expert Advisor fonctionne sur un terminal, il n'y a aucun problème, lorsque je lance le même Expert Advisor sur un autre terminal, il écrit constamment l'erreur suivante :

Cursor #0 closing error:-5 : Wrong CURSOR identifier.

Quel peut être le problème ?

 
Dmitry Melnichenko:

Bonjour chers collègues, voici une question :

Lorsque l'Expert Advisor fonctionne sur un terminal, il n'y a aucun problème, lorsque j'exécute le même Expert Advisor sur un autre terminal écrit constamment cette erreur :

Cursor #0 closing error:-5 : Wrong CURSOR identifier.

Quel peut être le problème ?

Essayez de vous connecter avec d'autres informations d'identification. C'est-à-dire avec un autre login/pass pour MySQL. En d'autres termes, créez un autre login avec les autorisations appropriées pour la base de données.

et travaillez en mode transactionnel.


 
Maxim Kuznetsov:

essayez de vous connecter avec d'autres informations d'identification. C'est-à-dire avec un autre login/pass pour MySQL. En d'autres termes, créez un autre login avec les droits appropriés sur la base de données.

et travaillez en mode transactionnel.


J'ai créé un nouvel utilisateur, j'ai essayé de me connecter avec ses identifiants, mais rien n'y fait !