Есть сжатый байт-массив, представленный включаемым файлом rates.mgh. Для проведения тестирования нужно их загрузить в массив типа MqlRates. Для этого есть специальная функция int LoadRates(string symbol_name, MqlRates &mql_rates[]), где symbol_name-имя файла в сжатом Zip архиве, mql_rates-массив приемник.
Сама функция LoadRates будет находиться в отдельном включаемом файле MTester.mqh.
//+------------------------------------------------------------------+
//| MTester.mqh |
//+------------------------------------------------------------------+
#include <Zip\Zip.mqh>
#include "rates.mqh"
CZip ZipFrame;
//+------------------------------------------------------------------+
//| Casting MqlRates to uchar[] |
//+------------------------------------------------------------------+
union URateToByte
{
MqlRates bar;
uchar bar_array[sizeof(MqlRates)];
};
//+------------------------------------------------------------------+
//| Преобразует сжатые данные в массив котировок MqlRates |
//| Возвращает количество полученных баров, возвращает -1 в случае |
//| неудачи |
//+------------------------------------------------------------------+
int LoadRates(string symbol_name,MqlRates &mql_rates[])
{
CZip zip;
zip.CreateFromCharArray(rates);
CZipFile *file=dynamic_cast<CZipFile*>(zip.ElementByName(symbol_name));
if(file==NULL)
return -1;
uchar array_rates[];
file.GetUnpackFile(array_rates);
URateToByte RateToBar;
ArrayResize(mql_rates,ArraySize(array_rates)/sizeof(MqlRates));
for(int start=0,i=0; start<ArraySize(array_rates); start+=sizeof(MqlRates),i++)
{
ArrayCopy(RateToBar.bar_array,array_rates,0,start,sizeof(MqlRates));
mql_rates[i]=RateToBar.bar;
}
return ArraySize(mql_rates);
}
//+------------------------------------------------------------------+
Проверочный скрипт Sample.mq4 загружает котировки из сжатого байт-массива и печатает их.
//+------------------------------------------------------------------+
//| Sample.mq4 |
//+------------------------------------------------------------------+
#include "Mtester.mqh"
//+------------------------------------------------------------------+
//| Котировки, на которых будет происходить тестирование |
//+------------------------------------------------------------------+
MqlRates Rates[];
//+------------------------------------------------------------------+
//| Tester function |
//+------------------------------------------------------------------+
void OnStart()
{ //-- Загружаем котировки для указанного символа.
if(LoadRates(Symbol(),Rates)==-1)
{
printf("Котировки для символа "+Symbol()+" не найдены. Создайте соответствующий ресурс котировок.");
return;
}
printf("Загружено "+(string)ArraySize(Rates)+" баров по символу "+Symbol());
string format="open = %G, high = %G, low = %G, close = %G, volume = %d";
string out; for(int i=0; i<ArraySize(Rates); i++)
{
out=(string)i+":"+TimeToString(Rates[i].time);
out=out+" "+StringFormat(format,
Rates[i].open,
Rates[i].high,
Rates[i].low,
Rates[i].close,
Rates[i].tick_volume);
Print(out);
}
}
//+------------------------------------------------------------------+
В прикрепленном архиве котировки AUDUSD м1 за последную неделю и проверочный скрипт Sample.
MTester.zip (351 Kb)
Комментарии (0)
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий