Thursday 23 November 2017

Base De Datos De Forex Sql


El mejor esquema de SQL para los datos de la señal Fecha de alta: enero de 2010 Posición: 1 Descripción: Estoy planeando para volcar los datos de tick desde dukascopy en la base de datos mssql para el análisis estadístico sin conexión. He escuchado a la gente diciendo que la base de datos relacional no es la más adecuada para los datos de series de tiempo, pero es fácil de hacer diferentes consultas con algún script sql, lo que le ahorra tiempo para escribir código para analizar datos binarios o csv. Así que decido ir a la base de datos. Los datos de dukascopy son: time bid bid volume ask ask volumen así que estoy asumiendo que naturalmente la estructura de la tabla sql es: time (datetime) double bid (decimal) bid volume (int) ask (decimal) ask volume (int) Ha hecho esto, por favor avise. En primer lugar soy muy nuevo en este tipo de cosas, pero mencionar mal algunas cosas aquí que pueden ayudarle en el camino. Este es un editor. csv realmente útil si necesita realizar cualquier edición en sus datos antes de importarlos. Lo que es bastante bueno en esto es que puede agregar caracteres a los datos ya existentes. Por ejemplo, los datos de los probadores forex no tienen separadores entre Horas Míns Segundos, y casi ningún programa lo reconoce así, pero con csv puede agregar los separadores. En segundo lugar y todavía estoy trabajando en esto, pero puede utilizar un minero de datos para extraer el tiempo de datos pertinentes. Estos 2 son realmente fáciles de usar basta con mirar tutoriales en el tubo. También creo (todavía no lo probé), pero creo que puede exportar a proyecto R. Que es una herramienta de análisis estadístico real de gran alcance. Lo mejor con los últimos tres nombres de software mencionados es que hay código abierto y libre de usar. ) El hilo de arriba fue iniciado por Mikkon whos también utilizando SQL para interrogar una base de datos. Buena suerte, espero que esto sirva. Gracias James por la información sobre el editor de csv, voy a experimentar y descomponer a la columna de fecha y hora en el día, hora, columna de minutos. Algunos de éstos serán llaves extranjeras así que usted puede consultar el patrón contra horas, minutos, etc de cada día. Mirará más lejos en el knime y el R. Se parece como la herramienta muy buena para analizar datos. En primer lugar soy muy nuevo en este tipo de cosas, pero mencionar mal algunas cosas aquí que pueden ayudarle en el camino. Este es un editor. csv realmente útil si necesita realizar cualquier edición en sus datos antes de importarlos. Lo que es bastante bueno en esto es que puede agregar caracteres a los datos ya existentes. Por ejemplo, los datos de los probadores forex no tienen separadores entre las horas Mins Segundos, y casi ningún programa lo reconoce así, pero con csved puede agregar los separadores. En segundo lugar y Im still. MetaTrader 5 - Integración Cómo acceder a la base de datos MySQL desde MQL5 (MQL4) Introducción El problema de la interacción de MQL con las bases de datos no es nuevo, sin embargo sigue siendo pertinente. El uso de bases de datos puede mejorar en gran medida las posibilidades de MetaTrader: almacenamiento y análisis del historial de precios, copia de transacciones de una plataforma de negociación a otra, proporcionando cotizaciones / operaciones en tiempo real, cálculos analíticos pesados ​​en el lado del servidor y / Monitoreo y control remoto de cuentas utilizando tecnologías web. De todos modos, hubo muchos intentos de beneficiarse de la combinación de MQL y MySQL, algunas soluciones están disponibles en la CodeBase. Por ejemplo MySQL wrapper - biblioteca para MetaTrader 4 es el proyecto, desde el cual muchos programadores comienzan sus propios desarrollos con más adiciones. En mi opinión, una de las desventajas de esta solución es la asignación de arrays especiales para leer datos de la base de datos. Otro proyecto MySQL logger 1 - EA para MetaTrader 4 es altamente especializado, no utiliza wrapper para acceder a la biblioteca estándar libmysql. dll. Por lo tanto, no funciona en MetaTrader4 Build 600, ya que los tipos de caracteres char han sido reemplazados por wchart. Y el uso del tipo int en lugar del puntero de estructura TMYSQL provoca fugas de memoria en el proyecto (la memoria asignada no se puede controlar / liberar). Otro proyecto interesante es EAXMysql - biblioteca de MySQL - biblioteca para MetaTrader 5. Su bastante una buena implementación. La lista de desventajas indicadas por el autor impone algunas restricciones sobre su uso. Cualquier persona que necesite usar bases de datos en sus proyectos MQL tiene dos opciones: desarrollar su propia solución y conocer cada parte de ella, o usar / adaptar cualquier solución de terceros, aprender a usarla y detectar todos sus defectos que Pueden obstaculizar su proyecto. Me enfrenté a una necesidad y las dos opciones, mientras que el desarrollo de un robot bastante complejo de comercio. Después de haber buscado a través de proyectos existentes y estudiado un gran número de soluciones, me di cuenta de que no de las implementaciones encontradas podría ayudar a llevar mi robot de comercio al nivel profesional. Además, también existían soluciones absurdas, por ejemplo: las operaciones DML / DDL (insertar / actualizar / borrar datos, crear / soltar objetos en la base de datos) se realizaron utilizando el estándar libmysql. dll, y la selección de datos (SELECT) Solicitud HTTP (usando inet. dll) a un script PHP ubicado en el servidor web en el servidor de MySQL. Las consultas SQL se escribieron en el script PHP. En otras palabras, para ejecutar el proyecto, se necesita mantener los siguientes componentes disponibles, configurados y ejecutándose: servidor MySQL, servidor web Apache / IIS, scripts PHP / ASP en el lado del servidor. Una combinación de un gran número de tecnologías. Por supuesto, en algunas circunstancias esto puede ser aceptable, pero cuando la única tarea es seleccionar datos de la base de datos - esto es un disparate. Además, el soporte de una solución tan engorrosa consume mucho tiempo. La mayoría de las soluciones no tuvieron problemas para insertar datos, crear objetos y similares. El problema fue la selección de datos, ya que los datos deben devolverse al entorno llamante. Pensé que utilizar arrays para este propósito era poco práctico e inconveniente, simplemente porque en el curso de desarrollo / depuración / soporte del proyecto principal, se pueden cambiar las consultas de selección a la base de datos, mientras que también debe controlar la asignación de memoria correcta para las matrices. Bueno, esto puede y debe ser evitado. La interfaz MQL lt-gt MySQL que se describe a continuación se basa en un enfoque típico utilizado en Oracle PL / SQL, SQL SQL T-SQL, AdoDB - uso de cursores. Esta interfaz fue desarrollada orientada a la facilidad de programación y mantenimiento, además de un mínimo de componentes. Se implementa como un contenedor de DLL a la biblioteca estándar libmysql. dll y un conjunto de funciones de interfaz como un archivo. mqh. 1. MQL lt-gt Interfaz MySQL La interacción entre el terminal MetaTrader (a través de los programas MQL) se puede implementar con la ayuda de los siguientes componentes: 1. La biblioteca de interfaces MQLMySQL. mqh. Se agrega al proyecto utilizando el directorio include y se puede modificar a su gusto. Contiene las directivas para importar funciones de la biblioteca dinámica MQLMySQL. dll, así como funciones para llamarlas y manejar errores. 2. La biblioteca dinámica MQLMySQL. dll. Es un contenedor para acceder a la funcionalidad de la biblioteca estándar libmysql. dll. Además, la biblioteca MQLMySQL. dll procesa los resultados de operaciones y el acceso compartido a las conexiones de base de datos y cursores. Esto significa que puede crear y usar varias conexiones a la vez (de uno o más programas MQL), mantener algunos cursores abiertos, con consultas a una o más bases de datos. Mutexes se utilizan para separar el acceso a los recursos compartidos. 3. La biblioteca dinámica estándar libmysql. dll es un controlador de acceso nativo. Puede copiarlo desde cualquier distribución de base de datos MySql en C: WindowsSytem32 o ltTerminalgtMQL5Libraries (para MetaTrader 4 en ltTerminalgtMQL4Libraries). De hecho, es responsable de enviar consultas a la base de datos y recuperar los resultados. Vamos a detenernos en los puntos principales, tales como: apertura / cierre de la conexión, realización de consultas DML / DDL y selección de datos. 1.1. Apertura y cierre de la conexión La función MySqlConnect se ha implementado para abrir la conexión con la base de datos MySQL: Esta función implementa la conexión con la base de datos y devuelve un identificador de conexión. Este ID será requerido para consultar la base de datos. En caso de un fallo de conexión, el valor devuelto es -1. Para ver los detalles del error, compruebe las variables MySQLErrorNumber y MySqlErrorDescription. Normalmente, esta función se llama al manejar el evento OnInit () en el programa MQL. El nombre DNS o la dirección IP del servidor MySQL Usuario de la base de datos (por ejemplo, root) La contraseña del usuario de la base de datos El nombre de la base de datos El puerto TCP / IP de la base de datos (usualmente 3306) El socket Unix ) La combinación de banderas especiales (normalmente 0) La función de interfaz MySqlDisconnect se ha implementado para cerrar la conexión: Esta función cierra la conexión con la base de datos MySQL. Normalmente, esta función se llama al manejar el evento OnDeinit () en el programa MQL. Cabe señalar que la base de datos MySQL puede cerrar la conexión por sí sola en caso de un fallo de hardware, congestión de red o tiempo de espera (cuando no se envían consultas a la base de datos durante mucho tiempo). A menudo, los desarrolladores usan el evento OnTick () para escribir datos en la base de datos. Sin embargo, cuando llega el fin de semana y el mercado está cerrado, la conexión sigue pendiente. En este caso, MySQL cerrará su tiempo de espera (el valor predeterminado es 8 horas). Y el lunes, cuando el mercado está abierto, se encuentran errores en el proyecto. Por lo tanto, se recomienda encarecidamente comprobar la conexión y / o volver a conectarse a la base de datos después de un intervalo de tiempo menor que el tiempo de espera especificado en la configuración del servidor MySQL. 1.2. Ejecución de las consultas DML / DDL Las operaciones DML se usan para manipular datos (Anagrama D anatómico D ata). Las manipulaciones de datos incluyen el siguiente conjunto de sentencias: INSERT, UPDATE y DELETE. Las operaciones de DDL se usan para la definición de los datos (D afín de definición). Esto incluye la creación (CREATE) de objetos de base de datos (tablas, vistas, procedimientos almacenados, disparadores, etc.) y su modificación (ALTER) y supresión (DROP). Su no todas las declaraciones de DML / DDL, además, DCL (D ata Control L anguage) se utiliza para separar el acceso a los datos, pero no vamos a profundizar en las características de SQL. Cualquiera de estos comandos se puede ejecutar utilizando la función de interfaz MySqlExecute: Como una consulta SQL, también puede utilizar el comando USE para seleccionar la base de datos. Me gustaría mencionar el uso de consultas de varias instrucciones. Es un conjunto de comandos SQL separados por el carácter. Para habilitar el modo multiinscripciones, debe abrirse la conexión con la base de datos con el indicador CLIENTMULTISTATEMENTS: En este fragmento, se insertarán 3 entradas en la tabla EURUSD con una sola llamada a la base de datos. Cada una de las consultas almacenadas en la variable SQL está separada por. Este enfoque se puede utilizar para la inserción frecuente / actualización / supresión de un conjunto de comandos necesarios se combina en un solo paquete, aliviando así el tráfico de red y mejorar el rendimiento de la base de datos. La sintaxis de INSERT en MySQL está bastante desarrollada en términos de manejo de excepciones. Por ejemplo, si la tarea consiste en mover el historial de precios, debe crearse una tabla para los pares de divisas con la clave principal del tipo de fecha y hora, ya que la fecha y la hora de una barra son únicas. Además, debe comprobarse si los datos de cualquier barra en particular existen en la base de datos (para mejorar la estabilidad de la migración de datos). Con MySQL esta comprobación no es necesaria, ya que la sentencia INSERT soporta ON DUPLICATE KEY. En palabras más simples, si se intenta insertar datos y la tabla ya tiene una entrada con la misma fecha y hora, la instrucción INSERT puede ser ignorada o reemplazada por UPDATE para esta fila (ver. Dev. mysql / doc / Refman / 5.0 / es / insert-on-duplicate. html). 1.3. Selección de datos La instrucción SQL SELECT se utiliza para recuperar datos de la base de datos. La siguiente secuencia de acciones se utiliza para seleccionar datos y recuperar el resultado de la selección: Preparación de la sentencia SELECT. Apertura del cursor. Obtener el número de filas devueltas por la consulta. Bucle y recuperación de cada fila de la consulta. Recopilación de datos a las variables MQL dentro del bucle. Cierre del cursor. Por supuesto, este es un esquema general, por lo que no todas las operaciones son necesarias para cada caso. Por ejemplo, si desea asegurarse de que existe una fila en la tabla (por cualquier criterio), será suficiente para preparar una consulta, abrir un cursor, obtener el número de filas y cerrar el cursor. De hecho, las partes obligatorias son: preparar la instrucción SELECT, abrir y cerrar el cursor. Qué es un cursor Esta es una referencia al área de memoria de contexto, de hecho - el conjunto resultante de valores. Cuando envía la consulta SELECT, la base de datos asigna memoria para el resultado y crea un puntero a una fila que se puede mover de una fila a otra. Por lo tanto, es posible acceder a todas las filas en el orden de una cola definida por la consulta (cláusula ORDER BY de la sentencia SELECT). Las siguientes funciones de interfaz se utilizan para la selección de datos: Apertura del cursor: El identificador de cursor devuelto por MySqlCursorOpen El cierre de un cursor es una operación crítica. No olvide cerrar los cursores. Imagine que abra el cursor y olvide cerrarlo. Supongamos que los datos se recuperan en el cursor cada vez que se maneja el evento OnTick (), y cada vez que se abre un nuevo cursor, se asigna memoria (tanto en el lado del cliente como en el servidor). En algún momento, el servidor rechazará el servicio porque se alcanza el límite de los cursores abiertos y esto podría causar el desbordamiento del búfer. Por supuesto, su exagerado, tal resultado es posible cuando se trabaja con libmysql. dll directamente. Sin embargo, la biblioteca dinámica MQLMySQL. DLL distribuye memoria para cursores y se negará a abrir un cursor que va más allá del límite permitido. Al implementar tareas reales, basta con mantener abiertos los cursores 2-3. Cada cursor puede manejar una medición cartesiana de datos usando dos-tres cursores simultáneamente (anidados, por ejemplo, cuando uno depende paramétricamente de otro cursor) cubre dos o tres dimensiones. Esto es perfectamente bien para la mayoría de las tareas. Además, para la implementación de la selección de datos complejos, siempre puede utilizar estos objetos para representar la base de datos (VIEW), crearlos en el lado del servidor y enviar consultas desde el código MQL como tablas. 1.4. Información adicional Se pueden mencionar como características adicionales: 1.4.1. Leer datos de un archivo. INI A menudo, el almacenamiento de información sobre las conexiones a la base de datos (dirección IP del servidor, puerto, nombre de usuario, contraseña, etc.) directamente en el código MQL (o parámetros del Asesor experto, indicador de script) no es Racional, porque el servidor puede ser movido, su dirección puede cambiar dinámicamente, etc. Usted necesitará modificar el código de MQL en este caso. Por lo tanto, todos estos datos deberían almacenarse mejor en el archivo. INI estándar, mientras que sólo debería escribirse su nombre en el programa MQL. A continuación, utilice la función ReadINI para leer los parámetros de conexión y utilizarlos. Por ejemplo, el archivo INI contiene la siguiente información: Para obtener la dirección IP del servidor, ejecute lo siguiente: El archivo INI se encuentra en C: MetaTrader5MQL5Experts y se denomina MyConnection. ini, se accede a la clave Server de la sección MYSQL. En un archivo INI puede almacenar la configuración en varios servidores utilizados en su proyecto. 1.4.2. Seguimiento de las áreas problemáticas En la biblioteca de interfaces se proporciona el modo de rastreo, que puede habilitarse para depurar consultas SQL en cualquier parte de un programa MQL. Especifique lo siguiente en el área de problema: Si habilita el rastreo al principio del programa MQL y no lo deshabilita, se registrarán todas las llamadas a la base de datos. El registro se mantiene en la consola de terminal (mediante el comando Imprimir). 2. Ejemplos Esta sección proporciona algunos ejemplos de conexión y uso de las bibliotecas desarrolladas. Verlos y estimar la utilidad de la solución de software. El ejemplo de MySQL-003.mq5 muestra lo siguiente: conexión a una base de datos (los parámetros de conexión se almacenan en el archivo. ini), creación de una tabla, inserción de datos (también con múltiples instrucciones) y desconexión de la base de datos. Ejemplo MySQL-004.mq5 muestra la selección de datos de una tabla creada por el script MySQL-003.mq5. Los ejemplos anteriores contienen el manejo típico de errores utilizado en proyectos reales. De hecho, cada consulta utilizada en un programa MQL debe depurarse en cualquier cliente MySQL (PHPMyAdmin, DB Ninja, consola MySQL). Yo personalmente uso y recomiendo el software profesional para el desarrollo de bases de datos Quest TOAD for MySQL. Conclusión Este artículo no describe los detalles de la implementación de MQLMySQL. DLL desarrollado en el entorno Microsoft Visual Studio 2010 (C / C). Esta solución de software está diseñada para uso práctico y cuenta con más de 100 implementaciones exitosas en diversas áreas del desarrollo de software MQL (desde la creación de complejos sistemas de comercio hasta la publicación en la web). Las versiones de las bibliotecas para MQL4 y MQL5 se adjuntan a continuación. Los archivos adjuntos también incluyen un archivo zip con el código fuente de MQLMySQL. DLL La documentación se incluye en los archivos Para utilizar los ejemplos, no olvide especificar los parámetros de conexión a su base de datos en el archivo ScriptsMyConnection. ini. Cómo crear Forex tick Base de datos histórica en MYSQL libre para Windows, Linux o Apple Mac OSX Cómo crear Forex tick base de datos histórica en MYSQL libre para Windows, Linux o Apple Mac OSX He construido con éxito una base de datos históricos tick para forex. Contiene casi 300 millones de registros de garrapatas de milisegundos. He hecho todo esto es utilizando MYSQL ya que puede ser fácilmente portado a Linux de Windows si es necesario. Oracle es demasiado caro como MYSQL es gratis. Además, Microsoft SQL Server es bastante rápido, pero se basa sólo en Windows. Sin embargo veo un cierto retraso usando Windows así que tengo que recordar este problema para la puesta en práctica futura posiblemente. Esta base de datos también incluye 14 pares de divisas principales, así como para la historia de la marca también. El período de la señal de la divisa de la divisa es de la primavera de 2009 a la caída de 2011. También he cargado mis datos de la divisa de los archivos del valor separado por coma (CSV). He creado un programa de C para cargar la base de datos en MYSQL. Por último, he creado un archivo SQL de MYSQLDUMP que le permite crear su base de datos y la tabla, y luego rellenar la tabla con los datos de tiquete forex. Voy a publicar todos estos recursos pronto en un área de descarga de miembros que se le pedirá que se unan si desea tener acceso a estos recursos. Únete aquí cuando anuncie que los recursos están listos para descargar. NOTA Ahora publico mis ALERTAS de TRADING en mi cuenta personal de FACEBOOK y TWITTER. No te preocupes porque no publico videos estúpidos de gato o lo que como

No comments:

Post a Comment