Dentro de diferentes Asesores Expertos MQL5 lanzados en un terminal, se puede compartir la misma base de datos. .
He probado el trabajo de dos Asesores Expertos con la misma base de datos en un terminal. Funciona sin errores - ambos Asesores Expertos escriben datos en un archivo por un temporizador de 2 segundos.
Los archivos se adjuntan, sólo se diferencian en el nombre del Asesor Experto.
2020.02.1917:56:14.624 SecondExpertDataBase (GBPUSD,H1) 16:56:14: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:16.627 SecondExpertDataBase (GBPUSD,H1) 16:56:16: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:18.616 SecondExpertDataBase (GBPUSD,H1) 16:56:18: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:20.630 SecondExpertDataBase (GBPUSD,H1) 16:56:20: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:22.078 FirstExpertDataBase (USDCHF,H1) 16:56:21: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:22.629 SecondExpertDataBase (GBPUSD,H1) 16:56:22: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:24.071 FirstExpertDataBase (USDCHF,H1) 16:56:24: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:24.619 SecondExpertDataBase (GBPUSD,H1) 16:56:24: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:26.070 FirstExpertDataBase (USDCHF,H1) 16:56:26: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:26.619 SecondExpertDataBase (GBPUSD,H1) 16:56:26: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:28.079 FirstExpertDataBase (USDCHF,H1) 16:56:27: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:28.625 SecondExpertDataBase (GBPUSD,H1) 16:56:28: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:30.079 FirstExpertDataBase (USDCHF,H1) 16:56:30: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:30.617 SecondExpertDataBase (GBPUSD,H1) 16:56:30: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:32.069 FirstExpertDataBase (USDCHF,H1) 16:56:32: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:32.627 SecondExpertDataBase (GBPUSD,H1) 16:56:32: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:34.073 FirstExpertDataBase (USDCHF,H1) 16:56:33: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:34.627 SecondExpertDataBase (GBPUSD,H1) 16:56:34: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:36.616 SecondExpertDataBase (GBPUSD,H1) 16:56:36: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:38.079 FirstExpertDataBase (USDCHF,H1) 16:56:38: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:38.615 SecondExpertDataBase (GBPUSD,H1) 16:56:38: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:40.072 FirstExpertDataBase (USDCHF,H1) 16:56:40: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:40.618 SecondExpertDataBase (GBPUSD,H1) 16:56:40: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:42.630 SecondExpertDataBase (GBPUSD,H1) 16:56:42: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:44.617 SecondExpertDataBase (GBPUSD,H1) 16:56:44: added 1 record on GBPUSD to timer.sqlite
Así es como la base de datos se ve como en MetaEditor
Database file is by default stored to . If you specify a full path as database filename, it's used. Terminal data path TERMINAL_DATA_PATH can be known by the following instruction. Open MT4 Open [File] menu Click "Open Data Folder" Sample Many sample scripts in under . Precautions Argument mess MT4 build 610 has a weird bug when dll function...
Quien lo haya resuelto, por favor que muestre la implementación de dicha tarea.
Hay dos Terminales.
Es necesario transferir las cotizaciones en tiempo real de un símbolo del Terminal1 al símbolo personalizado correspondiente del Terminal2.
Hay otro matiz - guardar en la base de datos datos datos consistentes con valor creciente, que no se dispersan, como las cotizaciones (con fecha creciente) - una operación MUY cara. El árbol no está equilibrado, una rama crece indefinidamente, y el motor reequilibra el árbol regularmente (esto es peor que la recogida de basura). Tal vez esto sólo se aplica a la tabla indexada, ya no me acuerdo. O puede que en los pocos años que no lo he usado ya se haya solucionado. Tendré que probarlo. A lo mejor hasta los desarrolladores lo analizan, les debe interesar.
voidOnStart()
{
string filename="DOMdb.db";
int database=DatabaseOpen(filename, DATABASE_OPEN_READWRITE );
DatabaseImport(database, // manejador de base de datos recibido en DatabaseOpen"DOMtb", // nombre de la tabla para la inserción de datos"AllDOM.csv", // nombre del fichero para importar los datos0, // combinación de banderas";", // separador de datos 0, // cuántas primeras líneas saltar "//"// una cadena de caracteres que definen los comentarios
);
}
2020.02.20 15:09:27.171 MQL5 'DOMcopy.ex5' tiene una nueva versión no soportada, por favor actualice su terminal cliente
version 5 build 2323 el ultimo meta-editor es el mismo y la depuracion no funciona.
El viernes 21 de febrero de 2020 se lanzará una versión actualizada de la plataforma MetaTrader 5. La actualización contiene los siguientes cambios:
MetaEditor: Añadida la posibilidad de trabajar cómodamente con bases de datos SQLite.
En la anterior actualización de la plataforma, añadimos soporte para trabajar con bases de datos SQLite directamente desde MQL5. Ahora las funciones principales están disponibles a través de la interfaz de usuario del MetaEditor:
.
Creación y conexión a bases de datos
Visualización de tablas y consulta rápida de datos
Realización y ejecución de consultas SQL, reversión de cambios
Cómo funciona Para crear bases de datos rápidamente, utiliza el "Asistente MQL5". Aquí podrás crear inmediatamente la primera tabla y definir una lista de sus campos.
Una vez creada la base de datos, pasarás a una nueva sección del "Navegador". Todo el trabajo con los datos se realiza desde esta sección.
En la parte izquierda, se muestran las tablas de la base de datos. Para consultar rápidamente los primeros 1.000 registros, haga doble clic en el nombre de la tabla. Aquí también puede crear y abrir otras bases de datos y trabajar con tablas.
En la parte principal del editor es donde se trabaja con la base de datos: rellenar la tabla con datos, realizar búsquedas y selecciones, introducir consultas SQL, etc. .
MetaEditor: Seguimos añadiendo soporte para proyectos multilingües. En esta versión hemos ampliado las funciones para trabajar con scripts de Python:
.
Ahora puede crearlos cómodamente a través del "Asistente MQL5", incluyendo inmediatamente en el código las dependencias de las bibliotecas necesarias.
Se han añadido iconos especiales para ellos en el navegador y resaltado de sintaxis en el editor.
Al ejecutar el script a través del MetaEditor, los mensajes de la consola de Python (stdout, stderr) se muestran en la sección "Errores".
Para ejecutar el script en el editor, haz clic en "Compilar": .
Para trabajar con Python, no olvide especificar su ruta en la sección "Configuración / Compiladores" en el MetaEditor. Y para trabajar con la librería MetaTrader 5, instálela con el comando: .
pip install MetaTrader 5
Lea más acerca de la integración con Python en la documentación.
.
MQL5: Completamente rediseñada la integración con Python. Se han añadido muchas funciones nuevas y se ha cambiado la nomenclatura de los comandos.
Nuevos comandos Se ha ampliado considerablemente la lista de comandos compatibles. Se han añadido funciones para operar y trabajar con el historial de operaciones, obtener información sobre los instrumentos financieros y la cuenta corriente.
positions_total() - Recibir el número de posiciones abiertas. Un análogo de PositionsTotal.
positions_get(symbol, ticket) - obtener las posiciones abiertas por símbolo o ticket.
orders_total() - obtener el número de órdenes. Un análogo de OrdersTotal.
orders_get(symbol, ticket) - obtener órdenes abiertas por símbolo o ticket.
history_orders_total(from, to) - obtener el número de órdenes en el historial en un intervalo de tiempo especificado.
history_orders_get(from, to, position, ticket) - obtención de órdenes del historial en un intervalo de tiempo especificado por ticket o con filtrado por posición.
history_deals_total() - obtener el número de transacciones en el historial. Un análogo de HistoryDealsTotal.
history_deals_get(from, to, position, ticket) - obtener las ofertas del historial en un intervalo de tiempo especificado por ticket o con filtrado por posición.
symbol_info_tick(symbol) - obtención del último tick por símbolo. Análogo de SymbolInfoTick.
symbol_select(symbol, enable) - activar/desactivar símbolo en la "Observación del Mercado". Análogo de SymbolSelect.
order_check(request) - comprobar el margen de una orden. Análogo de OrderCheck.
order_send(request) - enviar una orden al servidor. Análogo de OrderSend.
order_calc_margin(acción, símbolo, volumen, precio) - cálculo del margen de la orden. Análogo de OrderCalcMargin.
order_calc_profit(acción, símbolo, volumen, precio_apertura, precio_cierre) - cálculo del beneficio. Análogo de OrderCalcProfit. .
Ejecución de scripts Python en los gráficos Ahora los scripts Python pueden ejecutarse directamente en los gráficos de la plataforma, de forma similar a los programas MQL5 normales. Se mostrarán con iconos especiales en el "Navegador". .
Los mensajes de los scripts se mostrarán en la sección "Herramientas / Expertos". Si el script utiliza la librería MetaTrader 5, podrá recibir información sobre el instrumento, la cuenta y la operación.
Los scripts Python pueden ejecutarse en el mismo gráfico en paralelo con otros scripts MQL5 y Asesores Expertos. Para detener la ejecución de un script, basta con eliminarlo del gráfico.
Protección adicional Para proteger aún más sus cuentas cuando utilice librerías Python de terceros, se ha añadido la opción "Desactivar trading automático a través de API Python externa" a los ajustes del terminal. .
Los scripts de Python sólo podrán operar si se desactiva explícitamente esta opción.
.
MQL5: Se ha acelerado significativamente el relanzamiento de programas MQL5 y la recreación de indicadores personalizados a partir de programas MQL5. En algunos casos, la velocidad ha aumentado cientos de veces. .
MQL5: Añadidas funciones para trabajar con bases de datos:
long DatabaseImport(
int database, // manejador de base de datos recibido en DatabaseOpenconststring table, // nombre de la tabla para la inserción de datosconststring filename, // nombre del fichero para importar los datosuint flags, // combinación de banderasconststring separator, // separador de datos ulong skip_rows, // cuántas primeras líneas saltar conststring skip_comments // una cadena de caracteres que definen los comentarios
);
DatabaseExport Exporta una tabla o el resultado de la ejecución de una consulta SQL a un archivo CSV. El archivo se crea con codificación UTF-8.
long DatabaseExport(
int database, // manejador de base de datos recibido en DatabaseOpen conststring table_or_sql, // nombre de la tabla o consulta SQL conststring filename, // Nombre del archivo CSV para la exportación de datos uint flags, // combinación de banderas conststring separator // separador de datos en archivo CSV
);
DatabasePrint Imprime una tabla o el resultado de la ejecución de una consulta SQL en el registro del Asesor Experto.
long DatabasePrint(
int database, // manejador de base de datos recibido en DatabaseOpenconststring table_or_sql, // tabla o consulta SQLuint flags // combinación de banderas
);
MQL5: Añadida la función FileSelectDialog que llama al diálogo del sistema para crear/aperturar un archivo o carpeta.
int FileSelectDialog(
string caption, // título de la ventanastring initial_dir, // carpeta de iniciostring filter, // filtro de extensiónuint flags, // combinación de banderasstring& filenames[], // matriz con nombres de archivosstring default_filename // nombre de archivo por defecto
);
La nueva función permitirá implementar una cómoda interacción del usuario con el programa MQL5.
.
MQL5: DEAL_FEE - pago por realizar una transacción - ha sido añadido a la enumeración ENUM_DEAL_PROPERTY_DOUBLE. De hecho, se trata de un tipo distinto de comisión que puede cobrar un corredor.
.
Probador: Se ha añadido la posibilidad de establecer la configuración de su propia cuenta de operaciones al probar estrategias: límites de operaciones, configuración de márgenes y comisiones. Por lo tanto, usted obtiene aún más posibilidades para simular diferentes condiciones de negociación de los corredores. .
Configuración general En esta sección puede establecer el número máximo de órdenes y posiciones abiertas que puede tener en su cuenta al mismo tiempo. También aquí puedes establecer las sesiones en las que el programa probado no podrá operar.
Margen Aquí puede controlar completamente cómo se reservará el margen y qué sistema de contabilidad de posiciones se utilizará durante las pruebas:
.
Gestión de riesgos - modelo de gestión de riesgos: OTC y bursátil, con compensación y cobertura. Encontrará información detallada al respecto en la Ayuda. .
Nivel de "Margin call" - nivel de fondos en la cuenta, cuando se alcanza, pasa al estado Margin call.
Nivel de "Stop out" - nivel de fondos a partir del cual la cuenta se ve obligada a retirar órdenes y cerrar posiciones de negociación. Ambos niveles pueden especificarse en porcentaje y en dinero. En el primer caso, los niveles se definen como el valor del indicador "Fondos" de la cuenta. Si se selecciona la opción "Porcentaje", los niveles se definen como el valor del indicador "Nivel de margen" de la cuenta (Fondos/Margen*100).
No realizado: este campo especifica cómo se contabilizarán los beneficios/pérdidas no realizados actuales en el margen libre: .
No utilizar beneficios/pérdidas no realizados - no tener en cuenta las posiciones abiertas en el cálculo.
Utilizar beneficios/pérdidas no realizados - utilizar en el cálculo las pérdidas y beneficios de las posiciones abiertas.
Utilizar beneficios no realizados: utilizar sólo los beneficios.
Utilizar pérdidas no realizadas - utilizar sólo las pérdidas.
Fijo diario - este campo especifica cómo se tendrán en cuenta en el margen libre los beneficios/pérdidas fijados por el operador durante el día de negociación: .
Utilizar beneficio/pérdida fijo diario - tener en cuenta el beneficio y la pérdida fijados durante el día de negociación en el margen libre.
Use daily fixed loss - tenga en cuenta sólo la pérdida fijada durante el día de negociación en el margen libre. Durante el día, el beneficio acumulado se fija en un campo de cuenta separado ("Bloqueado"). Al final del día de negociación, el beneficio acumulado se libera (se pone a cero) y se refleja en el saldo de la cuenta (contabilizado en el margen libre).
Liberar el beneficio acumulado al final del día: esta opción sólo está disponible si está activada la opción "Utilizar pérdida fija diaria". Si está activada, entonces al final del día de negociación el beneficio acumulado durante el día será liberado y registrado en el balance (y en consecuencia contabilizado en el margen libre). De lo contrario - no lo será.
Comisión En esta sección usted tiene control total sobre cómo se cobra la comisión en todas las operaciones.
.
Las comisiones pueden ser únicas o multinivel, es decir, pueden cobrarse por el mismo importe independientemente del volumen/volumen de la operación o variar en función de su tamaño. La información pertinente figura en el pliego de condiciones.
Las comisiones pueden cobrarse inmediatamente tras la ejecución de una operación o al final de un día/mes de negociación.
Las comisiones pueden cobrarse en función del sentido de la operación: de entrada, de salida o para ambos tipos de operaciones.
Las comisiones pueden cobrarse por lote o por operación.
Las comisiones pueden cobrarse en diferentes cantidades: en dinero, por céntimo o pips.
Tester: Trabajo optimizado y significativamente acelerado en el modo "Market Scan", cuando se realizan varias pasadas de prueba en todos los símbolos del "Market Watch". .
Probador: Al calcular el beneficio en pips, ahora se tiene en cuenta el tamaño de la operación o posición. Anteriormente, el cálculo se realizaba sin tener en cuenta el volumen - como para un lote. .
Probador: Se ha mejorado la gestión de gráficos de resultados de optimización. Al hacer zoom en un gráfico de optimización regular, ahora es posible desplazarlo. Al hacer doble clic en un punto del gráfico, ahora se resalta el resultado correspondiente en la tabla de pasadas. .
MetaEditor: Añadida la visualización de archivos de bases de datos SQLite (*.db;*.sdb;*.sqlite;*.db3;*.s3db;*.sqlite3) en el "Navegador".
MetaEditor: Corregidos errores al guardar propiedades del proyecto. .
Documentación actualizada.
La actualización estará disponible a través del sistema LiveUpdate.
Renat Fatkhullin:
Dentro de diferentes Asesores Expertos MQL5 lanzados en un terminal, se puede compartir la misma base de datos.
.
He probado el trabajo de dos Asesores Expertos con la misma base de datos en un terminal. Funciona sin errores - ambos Asesores Expertos escriben datos en un archivo por un temporizador de 2 segundos.
Los archivos se adjuntan, sólo se diferencian en el nombre del Asesor Experto.
Así es como la base de datos se ve como en MetaEditor
¿Es posible utilizar en µl4 lo que se describe para µl5?
En MQL4 se puede trabajar con Sqlite3_32.dll nativo a través del wrapper para MQL
Este es un wrapper para MQL, no lo confundas con SQLite3Wrapper.dll
Pero si todavía está en línea, no lo sé, yo solía usarlo antes.
UPD: https: //github.com/Shmuma/sqlite3-mt4-wrapperQuien lo haya resuelto, por favor que muestre la implementación de dicha tarea.
Hay otro matiz - guardar en la base de datos datos datos consistentes con valor creciente, que no se dispersan, como las cotizaciones (con fecha creciente) - una operación MUY cara. El árbol no está equilibrado, una rama crece indefinidamente, y el motor reequilibra el árbol regularmente (esto es peor que la recogida de basura). Tal vez esto sólo se aplica a la tabla indexada, ya no me acuerdo. O puede que en los pocos años que no lo he usado ya se haya solucionado. Tendré que probarlo. A lo mejor hasta los desarrolladores lo analizan, les debe interesar.
Importar base de datos()
script simple
2020.02.20 15:09:27.171 MQL5 'DOMcopy.ex5' tiene una nueva versión no soportada, por favor actualice su terminal cliente
version 5 build 2323 el ultimo meta-editor es el mismo y la depuracion no funciona.
¿es algo inacabado?
Lafunción DatabaseImport aún no se ha hecho pública.
Espere a que se publique.
La función DatabaseImport aún no se ha hecho pública.
Espere a que se publique.
versión 5 build 2326 lo mismo, así que esperar a una versión estable ¿cuándo?
version 5 build 2326 lo mismo que hay que esperar a una version estable y cuando?
Foro sobre el comercio, los sistemas automatizados de comercio y probar estrategias de negociación.
Nueva versión de MetaTrader 5 build 2340: Gestión de la configuración de la cuenta en el probador y la ampliación de la integración con Python
MetaQuotes, 2020.02.20 14:55
El viernes 21 de febrero de 2020 se lanzará una versión actualizada de la plataforma MetaTrader 5. La actualización contiene los siguientes cambios:
En la anterior actualización de la plataforma, añadimos soporte para trabajar con bases de datos SQLite directamente desde MQL5. Ahora las funciones principales están disponibles a través de la interfaz de usuario del MetaEditor:
.
Cómo funciona
Para crear bases de datos rápidamente, utiliza el "Asistente MQL5". Aquí podrás crear inmediatamente la primera tabla y definir una lista de sus campos.
Una vez creada la base de datos, pasarás a una nueva sección del "Navegador". Todo el trabajo con los datos se realiza desde esta sección.
En la parte izquierda, se muestran las tablas de la base de datos. Para consultar rápidamente los primeros 1.000 registros, haga doble clic en el nombre de la tabla. Aquí también puede crear y abrir otras bases de datos y trabajar con tablas.
En la parte principal del editor es donde se trabaja con la base de datos: rellenar la tabla con datos, realizar búsquedas y selecciones, introducir consultas SQL, etc.
.

Para más detalles sobre el trabajo con bases de datos en MetaTrader 5, por favor lea el artículo"SQLite: Trabajo nativo con bases de datos SQL en MQL5"..
.
Para ejecutar el script en el editor, haz clic en "Compilar":
.
Para trabajar con Python, no olvide especificar su ruta en la sección "Configuración / Compiladores" en el MetaEditor. Y para trabajar con la librería MetaTrader 5, instálela con el comando:
.
.
Nueva nomenclatura de comandos
Los comandos existentes han sido renombrados:
MT5Shutdown -> shutdown
MT5TerminalInfo -> terminal_info
MT5Version -> version
MT5CopyRatesFrom -> copy_rates_from
MT5CopyRatesFromPos -> copy_rates_from_pos
MT5CopyRatesRange -> copy_rates_range
MT5CopyTicksFrom -> copy_ticks_from
MT5CopyTicksRange -> copy_tick_range
Nuevos comandos
Se ha ampliado considerablemente la lista de comandos compatibles. Se han añadido funciones para operar y trabajar con el historial de operaciones, obtener información sobre los instrumentos financieros y la cuenta corriente.
.
Ejecución de scripts Python en los gráficos
Ahora los scripts Python pueden ejecutarse directamente en los gráficos de la plataforma, de forma similar a los programas MQL5 normales. Se mostrarán con iconos especiales en el "Navegador".
.
Los mensajes de los scripts se mostrarán en la sección "Herramientas / Expertos". Si el script utiliza la librería MetaTrader 5, podrá recibir información sobre el instrumento, la cuenta y la operación.
Los scripts Python pueden ejecutarse en el mismo gráfico en paralelo con otros scripts MQL5 y Asesores Expertos. Para detener la ejecución de un script, basta con eliminarlo del gráfico.
Protección adicional
Para proteger aún más sus cuentas cuando utilice librerías Python de terceros, se ha añadido la opción "Desactivar trading automático a través de API Python externa" a los ajustes del terminal.
.
Los scripts de Python sólo podrán operar si se desactiva explícitamente esta opción.
.
.
DatabaseImport
Importa datos de un archivo a una tabla.
DatabaseExport
Exporta una tabla o el resultado de la ejecución de una consulta SQL a un archivo CSV. El archivo se crea con codificación UTF-8.
DatabasePrint
Imprime una tabla o el resultado de la ejecución de una consulta SQL en el registro del Asesor Experto.
La nueva función permitirá implementar una cómoda interacción del usuario con el programa MQL5.
.
.
.
Configuración general
En esta sección puede establecer el número máximo de órdenes y posiciones abiertas que puede tener en su cuenta al mismo tiempo. También aquí puedes establecer las sesiones en las que el programa probado no podrá operar.
Margen
Aquí puede controlar completamente cómo se reservará el margen y qué sistema de contabilidad de posiciones se utilizará durante las pruebas:
.
.
.
.
Comisión
En esta sección usted tiene control total sobre cómo se cobra la comisión en todas las operaciones.
.
.
.
.
.
La actualización estará disponible a través del sistema LiveUpdate.
versión estable 5 build 2340 el mismo DatabaseImport muestra el mismo DatabaseImport en ejecución
2020.02.22 14:01:42.338 MQL5 'DOMcopy.ex5' tiene una nueva versión no soportada, por favor actualice su terminal cliente
Hola!
He intentado crear una conexión a una base de datos en el indicador, pero por alguna razón no ha funcionado.
¿Por qué no está escrito en ninguna parte, en qué programas puedo utilizar bases de datos?