Discussão do artigo "Aplicação prática de bancos de dados para análise de mercado"

 

Novo artigo Aplicação prática de bancos de dados para análise de mercado foi publicado:

Trabalhar com dados se tornou a tarefa principal para o software moderno - tanto para aplicativos autônomos quanto para os de rede. Para solucionar esse problema um software especializado foi criado. São sistemas de gerenciamento de banco de dados (DBMS) que podem estruturar, sistematizar e organizar dados para seu armazenamento e processamento. Quanto aos negócios, a maioria dos analistas não utiliza bancos de dados em seu trabalho. Mas existem tarefas para as quais essa solução teria que ser útil. Este artigo fornece um exemplo de indicadores que podem salvar e carregar dados da partir de bancos de dados com ambas arquiteturas cliente-servidor ou arquivo-servidor.

Autor: Alexander

 

O artigo é muito útil e eu o consultarei muitas vezes para criar meus próprios bancos de dados.

Ainda é um pouco cedo para isso, mas, em geral, você já pode sentir o poder da quinta versão.

 
Alexander, por favor, me ajude nesta situação...

Preciso, por exemplo, salvar uma matriz em um banco de dados. Escrevi um script.

Ele tem a seguinte aparência:

#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[];
//+------------------------------------------------------------------+
//| Função de início do 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 a tabela a ser passada para SaveDataToDb
   CAdoTable *table=new CAdoTable();
   table.Columns().AddColumn("Price",ADOTYPE_DOUBLE);
   ArrayResize(PriceBuffer,n1);
// preencher a tabela com dados dos buffers
   for(int i=1; i<n1; i++)
     {
      CAdoRecord *row=table.CreateRecord();
      row.Values().GetValue(0).SetValue(PriceBuffer[i]);
      table.Records().Add(row);
     }
  }

Mas, na compilação, ocorre o seguinte erro: "'Values' - cannot call protected member function".

O erro está relacionado à linha:

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

Embora na função CBsvEngine::SaveData(void)

essas linhas funcionaram normalmente:

// preencher a tabela com dados dos 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);
        }
 
Existem classes para trabalhar com o MySQL (via libmySQL.dll) e o SQLite(via sqlite3.dll) sem o ADO do MT5?
 
Ótimo artigo! Infelizmente, estou tendo o mesmo problema que Denkir comentou na versão russa deste artigo.

Ele não compila, dando o erro:
'Values' - cannot call protected member function.

Associado a essas linhas em 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]);
E também o mesmo erro associado a várias chamadas para 'Values()' em CDbDataAdapter::Fill(CAdoTable *table) no arquivo DbDataAdapter.mqh

Eu realmente adoraria que isso funcionasse. Muito obrigado!
 
Ele pode ser executado no testador de estratégia? Quando uso o adoSuite no testador de estratégia, ele sempre encerra o programa.
 
zephyrrr:

Ele pode ser executado no testador de estratégias? Quando uso o adoSuite no testador de estratégias, ele sempre encerra o programa.
Infelizmente, a compilação 586 tem um erro na chamada de funções de DLLs de 32 bits. Isso será corrigido na próxima compilação.
 
Automated-Trading:
Infelizmente, a compilação 586 tem um erro na chamada de funções de DLLs de 32 bits. Isso será corrigido na próxima versão.
Infelizmente, isso não foi resolvido após a última atualização. Alguma solução ou recomendação? Quanto tempo isso pode levar? Disseram-me para esperar até a próxima compilação e ela veio sem resolver o problema.
 
Alexander
  • 2010.04.20
  • www.mql5.com
交易者的个人资料