Для хранения котировок в MQL используется специальная структура
struct MqlRates
{
datetime time; // время начала периода
double open; // цена открытия
double high; // наивысшая цена за период
double low; // наименьшая цена за период
double close; // цена закрытия
long tick_volume; // тиковый объем
int spread; // спред
long real_volume; // биржевой объем
};
Ранее было сказано, что для одного бара нужно выделить ровно 60 байтов или одномерный массив типа uchar состоящий из 60 элементов. Алгоритм скрипта будет загружать массив баров MqlRates, конвертировать его в байтовое представление symbol_array[], затем сжимать архиватором Zip, и уже сжатые данные zip_symbol[] сохранять в виде массива uchar, определенного в файле mqh. Для сжатия массива байтов была написана специальная подключаемая библиотека Zip. Для сохранения сжатого массива в файл mgh так же был написан дополнительный класс ResourceCreator.
#property version "1.00"
#include <Zip\Zip.mqh>
#include <ResourceCreator.mqh>
input ENUM_TIMEFRAMES MainPeriod;
union URateToByte
{
MqlRates bar;
uchar bar_array[sizeof(MqlRates)];
}RateToByte;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//-- Загружаем котировки
MqlRates rates[];
int total = CopyRates(Symbol(), Period(), 0, 20000, rates);
uchar symbol_array[];
//-- Конвертируем их в байтовое представление
ArrayResize(symbol_array, sizeof(MqlRates)*total);
for(int i = 0, dst = 0; i < total; i++, dst +=sizeof(MqlRates))
{
RateToByte.bar = rates[i];
ArrayCopy(symbol_array, RateToByte.bar_array, dst, 0, WHOLE_ARRAY);
}
//-- Сжимаем их в zip-архив
CZip Zip;
CZipFile* file = new CZipFile(Symbol(), symbol_array);
Zip.AddFile(file);
uchar zip_symbol[];
//-- Получаем байтовое представление сжатого архива
Zip.ToCharArray(zip_symbol);
//-- Записываем его в виде включаемого mqh-файла
CCreator creator;
creator.ByteArrayToMqhArray(zip_symbol, "rates.mqh", "rates");
}
//+------------------------------------------------------------------+
Результат работы скрипта SaveRates будет создание включаемого файл rates.mqh в котором в сжатом виде будут котировки символа представленные в виде гигантского байт-массива uchar rates[]. Сам файл rates.mqh лучше не открывать в редакторе MetaEditor, т.к. он может повиснуть.
SaveRates.zip (57 Kb)
Комментарии (1)
CopyRates другой формат.
5 tekora Автор Сообщений: 25 - Tekora
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий