Discusión sobre el artículo "Trabajo con el SGBD MySQL desde MQL5 (MQL4)" - página 19

 
Gracias al autor, he modificado este proyecto a nivel local, de modo que pueda utilizar palabras no-Inglés almacenar en MySQL DB página de código UTF8.
 
Amy Liu:
Gracias al autor, he modificado este proyecto a nivel local, de modo que puedo utilizar palabras no Inglés almacenar en MySQL DB página de código UTF8.

Hola Amy. Es genial, no tenía tiempo para hacerlo por mí mismo. Entonces, si te parece bien, ¿puedes compartir las fuentes con la comunidad?

 

¡Hola a todos!

Por desgracia, no tengo tiempo para apoyar este proyecto y pasar tiempo en la comunidad, por lo que todos mis queridos perdóname preguntas sin respuesta y mi silencio.

Pero veo algunas personas con experiencia aquí que pueden ayudar a los demás y es realmente genial.

Gracias a todos por utilizar mi biblioteca, ampliar su funcionalidad y obtener su propia experiencia.

¡Buena suerte a todos con vuestros proyectos!


Saludos cordiales,

Eugene

 
dragossh:

Hola Eugeniy Lugovoy,

En primer lugar, gracias por dedicar tiempo a este proyecto.

He estado buscando durante semanas sobre cómo importar / actualizar todas las operaciones abiertas / cerradas de una cuenta de operaciones en una tabla MySQL, si es posible en tiempo real. hay una manera de hacer esto usando su biblioteca?

Muchas gracias de antemano.

Dragos

¡Hola Dragos!

Claro, puedes construir EA usando esta librería para insertar datos en tu base de datos Mysql y mantenerlos actualizados (cerca de actualización en tiempo real).

Presta atención, que las órdenes cerradas en MT4/5 están disponibles programáticamente sólo cuando aparecen en la pestaña Historia. Por lo tanto, si se establece el filtro en la Historia 3 días recientes - se puede acceder sólo a las operaciones procesadas en ese período.

No depende de esta biblioteca, es sólo MQL-MT4 infraestructura.

Saludos,

Eugene

 

Violación de acceso leído a 0x000003B0 en '\MQL4\libraries\MQLMySQL.dll'

¿me puedes decir donde indagar?

OS win 10, mariadb 5.5.59
 

Eugene,

Impresionante trabajo de nuevo como esto era muy sencillo de conseguir que funcione.

Curioso, ¿usted o alguien más aquí trató de conseguir este trabajo en el Probador de Estrategias? He evolucionado la secuencia de comandos en un indie en el entorno en vivo y todo está bien, pero no hubo suerte en la integración de un backtesting envionment.


br George

 
Eugeniy Lugovoy:

Hola Amy. Es genial, no tenía tiempo para hacerlo yo sola. Así que, si te parece bien, ¿puedes compartir las fuentes con la comunidad?

Hola Eugeniy,

Lo siento por la respuesta tardía. Esto es lo que he hecho con tu código. Solo modifique una funcion cMySqlGetRowField para usar MultiByteToWideChar. El código original está comentado para comparar.

// devuelve una cadena que representa el valor del campo
// debe ser llamado después de MySqlCursorFetchRow()
// pCursorID - IDENTIFICADOR DE CURSOR
// pField - número de campo de la lista SELECT (empezando por 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(Cursores[pCursorID].Valor, "%s", Cursores[pCursorID].FilaActual[pCampo]);
                        //swprintf(Cursors[pCursorID].Value, 1024, L"%S", Cursors[pCursorID].CurrentRow[pField]);
                        //return (Cursores[pCursorID].Valor);
                }
                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);
}
 

Hola compañeros, tengo una duda:

Cuando el Asesor Experto funciona en un terminal, no hay problemas, cuando ejecuto el mismo Asesor Experto en otro terminal escribe constantemente el siguiente error:

Cursor #0 error de cierre:-5: Identificador de CURSOR incorrecto.

¿cuál puede ser el problema?

 
Dmitry Melnichenko:

Hola colegas, aquí va una pregunta:

Cuando el Asesor Experto funciona en un terminal, no hay problemas, cuando ejecuto el mismo Asesor Experto en otro terminal escribe constantemente este error:

Cursor #0 error de cierre:-5: Identificador de CURSOR incorrecto.

¿cuál puede ser el problema?

Prueba a conectarte con otras credenciales. Es decir, con otro login/pass para MySQL. Es decir, crea otro login con los permisos adecuados para la base de datos.

y trabaje en modo transaccional.


 
Maxim Kuznetsov:

intente conectarse con otras credenciales. Es decir, con otro login/pass para MySQL. Es decir, haga otro login allí con los derechos apropiados para la base de datos.

y trabaje en modo transaccional.


Creé un nuevo usuario, intenté conectarme con sus credenciales, ¡no sirvió de nada!