Discussão do artigo "Como acessar o banco de dados MySQL a partir do MQL5 (MQL4)" - página 19

 
Graças ao autor, modifiquei esse projeto localmente para poder usar palavras que não estejam em inglês armazenadas na página de código UTF8 do banco de dados do MySQL.
 
Amy Liu:
Agradeço ao autor, modifiquei esse projeto localmente para poder usar palavras que não estejam em inglês armazenadas na página de código UTF8 do banco de dados do MySQL.

Oi, Amy. Isso é ótimo, não tive tempo de fazer isso sozinho. Então, se estiver tudo bem para você, pode compartilhar os códigos-fonte com a comunidade?

 

Olá a todos!

Infelizmente, não tenho tempo para apoiar este projeto e passar tempo na comunidade, portanto, todos os meus queridos me perdoem pelas perguntas não respondidas e pelo meu silêncio.

Mas vejo algumas pessoas experientes aqui que podem ajudar os outros e isso é realmente ótimo.

Obrigado a todos por usarem minha biblioteca, ampliarem sua funcionalidade e obterem sua própria experiência.

Boa sorte a todos com seus projetos!


Cordiais cumprimentos,

Eugênio

 
dragossh:

Olá , Eugeniy Lugovoy,

Primeiramente, obrigado por dedicar seu tempo à criação deste projeto.

Estou procurando há semanas como importar/atualizar todas as negociações abertas/fechadas de uma conta de negociação em uma tabela MySQL, se possível em tempo real.

Muito obrigado desde já.

Dragos

Olá, Dragos!

Claro, você pode criar um EA usando essa biblioteca para inserir dados em seu banco de dados Mysql e mantê-los atualizados (quase em tempo real).

Preste atenção ao fato de que as ordens fechadas no MT4/5 ficam disponíveis programaticamente somente quando listadas na guia History (Histórico). Portanto, se você definir o filtro no Histórico como 3 dias recentes, poderá acessar apenas as negociações processadas nesse período.

Isso não depende dessa biblioteca, é apenas a infraestrutura MQL-MT4.

Atenciosamente,

Eugênio

 

Violação de acesso lido a 0x000003B0 em '\MQL4\libraries\MQLMySQL.dll'

Você pode me dizer onde devo procurar?

SO win 10, mariadb 5.5.59
 

Eugênio,

Trabalho incrível novamente, pois foi muito simples fazer isso funcionar.

Uma curiosidade: você ou mais alguém aqui tentou fazer isso funcionar no Strategy Tester? Eu desenvolvi o script em um indie no ambiente ao vivo e tudo está OK, mas não tive sorte na integração em um ambiente de backtesting.


br George

 
Eugeniy Lugovoy:

Oi, Amy. É ótimo, não tive tempo de fazer isso sozinho. Então, se você não se importar, pode compartilhar as fontes com a comunidade?

Olá, Eugeniy,

Desculpe-me pela resposta tardia. Aqui está o que fiz com seu código. Apenas modifiquei uma função cMySqlGetRowField para usar MultiByteToWideChar. O código original está comentado para comparação.

// retorna a representação em string do valor do campo
// deve ser chamado após MySqlCursorFetchRow()
// pCursorID - IDENTIFICADOR DE CURSOR
// pField - número do campo da lista SELECT (iniciado em 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]);
                        //retorno (Cursores[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);
}
 

Olá colegas, tenho uma pergunta:

Quando o Expert Advisor funciona em um terminal, não há problemas, mas quando executo o mesmo Expert Advisor em outro terminal, ele escreve constantemente o seguinte erro:

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

Qual poderia ser o problema?

 
Dmitry Melnichenko:

Olá colegas, tenho uma pergunta:

Quando o Expert Advisor funciona em um terminal, não há problemas, mas quando executo o mesmo Expert Advisor em outro terminal, este erro aparece constantemente:

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

Qual poderia ser o problema?

Tente se conectar com credenciais diferentes. Ou seja, com outro login/pass para o MySQL. Ou seja, crie outro login com as permissões apropriadas para o banco de dados.

e trabalhe no modo transacional.


 
Maxim Kuznetsov:

tente se conectar com credenciais diferentes. Ou seja, com outro login/pass para o MySQL. Ou seja, faça outro login lá com os direitos apropriados para o banco de dados.

e trabalhe no modo transacional.


Criei um novo usuário, tentei me conectar com suas credenciais, mas não adiantou!