Discusión sobre el artículo "SQLite: trabajo nativo con bases de datos en SQL en MQL5" - página 2

 

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.

2020.02.19 17:56:14.624 SecondExpertDataBase (GBPUSD,H1)        16:56:14: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:16.627 SecondExpertDataBase (GBPUSD,H1)        16:56:16: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:18.616 SecondExpertDataBase (GBPUSD,H1)        16:56:18: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:20.630 SecondExpertDataBase (GBPUSD,H1)        16:56:20: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:22.078 FirstExpertDataBase (USDCHF,H1)         16:56:21: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:22.629 SecondExpertDataBase (GBPUSD,H1)        16:56:22: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:24.071 FirstExpertDataBase (USDCHF,H1)         16:56:24: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:24.619 SecondExpertDataBase (GBPUSD,H1)        16:56:24: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:26.070 FirstExpertDataBase (USDCHF,H1)         16:56:26: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:26.619 SecondExpertDataBase (GBPUSD,H1)        16:56:26: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:28.079 FirstExpertDataBase (USDCHF,H1)         16:56:27: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:28.625 SecondExpertDataBase (GBPUSD,H1)        16:56:28: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:30.079 FirstExpertDataBase (USDCHF,H1)         16:56:30: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:30.617 SecondExpertDataBase (GBPUSD,H1)        16:56:30: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:32.069 FirstExpertDataBase (USDCHF,H1)         16:56:32: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:32.627 SecondExpertDataBase (GBPUSD,H1)        16:56:32: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:34.073 FirstExpertDataBase (USDCHF,H1)         16:56:33: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:34.627 SecondExpertDataBase (GBPUSD,H1)        16:56:34: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:36.616 SecondExpertDataBase (GBPUSD,H1)        16:56:36: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:38.079 FirstExpertDataBase (USDCHF,H1)         16:56:38: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:38.615 SecondExpertDataBase (GBPUSD,H1)        16:56:38: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:40.072 FirstExpertDataBase (USDCHF,H1)         16:56:40: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:40.618 SecondExpertDataBase (GBPUSD,H1)        16:56:40: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:42.630 SecondExpertDataBase (GBPUSD,H1)        16:56:42: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17: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


Archivos adjuntos:
 
Chiripaha:

¿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

/*
 * Interfaz SQLite para MT4
 */

#import "sqlite3_wrapper.dll"
int sqlite_exec (string db_fname, string sql);
int sqlite_table_exists (string db_fname, string table);
int sqlite_query (string db_fname, string sql, int& cols[]);
int sqlite_next_row (int handle);
string sqlite_get_col (int handle, int col);
int sqlite_free_query (int handle);
#import

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-wrapper
Shmuma/sqlite3-mt4-wrapper
Shmuma/sqlite3-mt4-wrapper
  • Shmuma
  • github.com
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...
 
fxsaber:

Quien lo haya resuelto, por favor que muestre la implementación de dicha tarea.

  1. Hay dos Terminales.
  2. 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.

 

Importar base de datos()

script simple

void OnStart()
  {
  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 datos
                       0,             // 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.

¿es algo inacabado?

 

Lafunción DatabaseImport aún no se ha hecho pública.

Espere a que se publique.

 
Tal vez no en el tema, pero: Me pregunto por qué los desarrolladores no han implementado la conexión a MS SQL Server todavía?
 
Rashid Umarov:

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?

 
IuriiPrugov:

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:

  1. 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.
    .



    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".

    .
  2. 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.

    .
  3. 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.

    Nueva nomenclatura de comandos
    Los comandos existentes han sido renombrados:
    MT5Initialize       -> initialize
    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.

    • account_info() - obtención de información sobre la cuenta corriente. Análogo de AccountInfoInteger, AcountInfoDouble y AccountInfoString.
    • 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(symbol) - Obtener información sobre un instrumento financiero. Análogo de SymbolInfoInteger, SymbolInfoDouble, SymbolInfoString.
    • 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.

    .
  4. 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.
    .
  5. MQL5: Añadidas funciones para trabajar con bases de datos:

    DatabaseImport
    Importa datos de un archivo a una tabla.
    long  DatabaseImport(
       int           database,          // manejador de base de datos recibido en DatabaseOpen
       const string  table,             // nombre de la tabla para la inserción de datos
       const string  filename,          // nombre del fichero para importar los datos
       uint          flags,             // combinación de banderas
       const string  separator,         // separador de datos 
       ulong         skip_rows,         // cuántas primeras líneas saltar 
       const string  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 
       const string  table_or_sql,       // nombre de la tabla o consulta SQL 
       const string  filename,           // Nombre del archivo CSV para la exportación de datos 
       uint          flags,              // combinación de banderas 
       const string  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 DatabaseOpen
       const string  table_or_sql,      // tabla o consulta SQL
       uint          flags              // combinación de banderas
       );

  6. 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 ventana
       string   initial_dir,          // carpeta de inicio
       string   filter,               // filtro de extensión
       uint     flags,                // combinación de banderas
       string&  filenames[],          // matriz con nombres de archivos
       string   default_filename      // nombre de archivo por defecto
       );
    La nueva función permitirá implementar una cómoda interacción del usuario con el programa MQL5.

    .
  7. 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.

    .
  8. 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.



  9. 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".
    .
  10. 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.
    .
  11. 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.
    .
  12. MetaEditor: Añadida la visualización de archivos de bases de datos SQLite (*.db;*.sdb;*.sqlite;*.db3;*.s3db;*.sqlite3) en el "Navegador".
  13. MetaEditor: Corregidos errores al guardar propiedades del proyecto.
    .
  14. Documentación actualizada.

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?