tekora
Tekora

 
Уровень 5

  Торгую в компаниях:

  Моя торговля


График торгового счета tekora

Загрузка котировок из сжатого байт-массива.
[*]

Есть сжатый байт-массив, представленный включаемым файлом 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
  • Просмотров: 1316
  • 4 марта 2018, 22:44
  • tekora
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

  Предыдущая запись в моем блоге
Сохранение котировок в сжатый байт-массив.
Следующая запись в моем блоге  
Тестирование советника RegXRayRulim
26 февраля 2018
21 марта 2018

Брокер для ваших роботов, 15 лет на рынке

Комментарии (0)


Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий