Discusión sobre el artículo "Aplicación Práctica de Bases de Datos para Análisis de Mercados"

 

Artículo publicado Aplicación Práctica de Bases de Datos para Análisis de Mercados:

Trabajar con datos se ha convertido en la principal tarea para el software moderno, tanto para aplicaciones independientes como para aplicaciones de red. Para resolver este problema se creó un software especializado. Se trata de los Sistemas de Gestión de Bases de Datos (Database Management Systems o DBMS), que pueden estructurar datos para su almacenamiento en el ordenador y su procesamiento. En lo que se refiere a trading, la mayoría de analistas no usan bases de datos en su trabajo. Pero hay tareas donde esta solución resultaría muy práctica. Este artículo facilita un ejemplo de indicadores que puede guardar y cargar datos de bases de datos tanto con arquitecturas de servidor de cliente como de servidor de archivos.

 

El indicador BuySellVolume enlazado a la base de datos SQLite 3.6 en EURUSD M5

Autor: Alexander

 

El artículo es muy útil y lo consultaré muchas veces para crear mis propias bases de datos.

Es un poco pronto para ello, pero en general ya se nota la potencia de la quinta versión.

 
Alexander, por favor ayúdame en esta situación...

Necesito, por ejemplo, guardar algún array en una base de datos. Escribí un script.

Tiene este aspecto:

#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

#include <Object.mqh>
#include <Arrays\List.mqh>

// conectar componentes OleDb
#include <Ado\Providers\OleDb.mqh>
#include <Ado\Data.mqh>

double PriceBuffer[];
//+------------------------------------------------------------------+
//| Función de inicio del programa de script|
//+------------------------------------------------------------------+
void OnStart()
  {
   long n1=100;
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   double nClose[];
   ArrayResize(nClose,n1);
   ArrayResize(t,n1);

   CSymbolInfo m_smbinf;
   m_smbinf.Name(Symbol());
   int dg=m_smbinf.Digits();

   int copied=CopyRates(Symbol(),0,0,n1,rates);
   for(int i=0;i<n1;i++)
     nClose[i]=rates[i].close;
     
// formar la tabla que se pasará a SaveDataToDb
   CAdoTable *table=new CAdoTable();
   table.Columns().AddColumn("Price",ADOTYPE_DOUBLE);
   ArrayResize(PriceBuffer,n1);
// rellenar el dable con datos de los buffers
   for(int i=1; i<n1; i++)
     {
      CAdoRecord *row=table.CreateRecord();
      row.Values().GetValue(0).SetValue(PriceBuffer[i]);
      table.Records().Add(row);
     }
  }

Pero al compilar se produce el siguiente error: "'Values' - cannot call protected member function".

El error está relacionado con la línea:

row.Values().GetValue(0).SetValue(PriceBuffer[i]);

Aunque en la función CBsvEngine::SaveData(void)

estas líneas funcionaban normalmente:

// rellenar el dable con datos de los buffers
      for(int i=1; i<TicksInBuffer; i++)
        {
         CAdoRecord *row=table.CreateRecord();
         row.Values().GetValue(0).SetValue(TickBuffer[i].time);
         row.Values().GetValue(1).SetValue(TickBuffer[i].bid);
         row.Values().GetValue(2).SetValue(VolumeBuffer[i]);
         table.Records().Add(row);
        }
 
¿Existen clases para trabajar con MySQL(vía libmySQL.dll) y SQLite(vía sqlite3.dll) sin ADO desde MT5?
 
Muy buen artículo. Realmente justo la solución que estaba buscando. Desafortunadamente estoy teniendo el mismo problema que Denkir comentó en la versión rusa de este artículo.

No compila dando error:
'Values' - cannot call protected member function.

Asociado con estas líneas en CBsvEngine::SaveData(void)
row.Values().GetValue(0).SetValue(TickBuffer[i].time);
row.Values().GetValue(1).SetValue(TickBuffer[i].bid);
row.Values().GetValue(2).SetValue(VolumeBuffer[i]);
Y también el mismo error asociado con numerosas llamadas a 'Values()' en CDbDataAdapter::Fill(CAdoTable *table) en el archivo DbDataAdapter.mqh

Me encantaría que esto funcionara. Muchas gracias.
 
¿puede ejecutarse en el probador de estrategias? cuando utilizo adoSuite en el probador de estrategias, siempre termina el programa.
 
zephyrrr:

Cuando utilizo adoSuite en el probador de estrategia, siempre termina el programa.
Desafortunadamente la build 586 tiene un error en la llamada de funciones de DLLs de 32 bits. Será corregido en la próxima versión.
 
Automated-Trading:
Desafortunadamente la build 586 tiene un error en la llamada a funciones de DLLs de 32 bits. Será corregido en la próxima versión.
Desafortunadamente esto no se ha solucionado después de la última actualización. ¿Alguna solución o recomendación? ¿Cuánto puede tardar? Me dijeron que esperara hasta la siguiente build y llegó sin solucionar el problema.
 
Alexander
  • 2010.04.20
  • www.mql5.com
交易者的个人资料