Discussão do artigo "Aplicação prática de bancos de dados para análise de mercado"
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.
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); }
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!
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.
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