Обсуждение статьи "Практическое применение баз данных для анализа рынков"

 

Опубликована статья Практическое применение баз данных для анализа рынков:

Работа с данными стала главной задачей современного программного обеспечения, как автономных, так и сетевых прикладных программ. Для ее решения было создано специализированное программное обеспечение - системы управления базами данных (СУБД), которые позволяют структурировать, систематизировать и организовывать данные для их компьютерного хранения и обработки. Что касается трейдинга, то основная масса аналитиков не прибегает к использованию баз данных (БД) в своей работе. Но бывают задачи, где такое решение пришлось бы кстати. В данной статье приводится пример индикатора, который может сохранять и загружать данные из баз как с клиент-серверной, так и с файл-серверной архитектурами.

 BuySellVolume c привязкой к SQLite

Автор: Alexander

 

статья очень полезная и буду к ней не раз обращаться для создания собственных баз данных.

правда рановато для неё ещё но в целом уже чувствуется вся мощь пятой версии.

 
Alexander, подскажите пож-ста вот в такой ситуации...

Мне нужно, например, сохранить некоторый массив в базу данных. Написал скрипт.

Выглядит примерно так:

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

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

// подключаем OleDb компоненты
#include <Ado\Providers\OleDb.mqh>
#include <Ado\Data.mqh>

double PriceBuffer[];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
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;
     
// формируем таблицу для передачи в SaveDataToDb
   CAdoTable *table=new CAdoTable();
   table.Columns().AddColumn("Price",ADOTYPE_DOUBLE);
   ArrayResize(PriceBuffer,n1);
// заполняем даблицу данными из буферов
   for(int i=1; i<n1; i++)
     {
      CAdoRecord *row=table.CreateRecord();
      row.Values().GetValue(0).SetValue(PriceBuffer[i]);
      table.Records().Add(row);
     }
  }

Но вылетает при компиляции ошибка такая: "'Values' - cannot call protected member function".

Ошибка связана со строкой:

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

Хотя в функции CBsvEngine::SaveData(void)

такие строки работали нормально:

// заполняем даблицу данными из буферов
      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);
        }
 
Есть ли классы для работы с MySQL(через libmySQL.dll) и SQLite(через sqlite3.dll) без ADO из МТ5?
Причина обращения: