Тихая Гавань
Тихая Гавань личный блог
22 мая 2020, 11:26

Тестирование робота на истории - что то пошло не так ))

Всем привет, добрые люди по моей вчерашней просьбе скинули склеенную 5 минутную историю с 1997 по 2016 гг
одним большим файлом.. 

поскольку тест проводился в МТ4, то я решил, что неплохо былоБЫ )) воткнуть всю эту историю в массивы в МТ4, и прогнать по уже имеющимся алгоритмам в самом терминале… иначе ведь надо будет писать полностью свой собственный тестер как отдельное приложение... 

файл мне скинули вот такого формата: 

ESU97;19970910;001000000;934.00;934.00;934.00;934.00;0
парсим простыми методами: 

int start1() 
{
   int hFile,

   bool read = true;
   
   datetime tm1 = TimeCurrent(), tm2;
   
  string filename = "ES.TXT";   
   
   hFile = FileOpen(filename, FILE_CSV|FILE_READ, ';');  if (hFile<1) {  Alert("Файл "+filename+" не найден!"); return(false); }
   
   while (read)
      {

         int i = ArraySize(HistBar); ArrayResize(HistBar,i+1);
         
         HistBar[i].NameB = FileReadString(hFile);
         string data = FileReadString(hFile);
         string data1 = FileReadString(hFile);
         HistBar[i].TimeB = conkdata(data, data1); 
         HistBar[i].OpenB = FileReadString(hFile);
         HistBar[i].HighB = FileReadString(hFile);
         HistBar[i].LowB = FileReadString(hFile);
         HistBar[i].CloseB = FileReadString(hFile);
         HistBar[i].SizeB = FileReadString(hFile);
         
         if(FileIsEnding(hFile)==true) read = false;
         
       //  Print(TimeToString(HistBar[i].TimeB,  TIME_DATE|TIME_MINUTES  ), "    ", DoubleToStr(HistBar[i].OpenB, 2),"  ",DoubleToStr(HistBar[i].HighB, 2),"  ",DoubleToStr(HistBar[i].LowB, 2),"  ",DoubleToStr(HistBar[i].CloseB, 2),"  " );
      }
tm2 = TimeCurrent();
   FileClose(hFile);
Print(ArraySize(HistBar));
Print(TimeToString(tm1,  TIME_DATE|TIME_SECONDS  ) ,"    ",TimeToString(tm2,  TIME_DATE|TIME_SECONDS  ) );
return (0);
}
/////////////////////////////
datetime conkdata( string data, string data1)
{
   datetime vzv = StrToTime(StringSubstr(data, 0, 4) + "."+ StringSubstr(data, 4, 2)+ "."+ StringSubstr(data, 6, 2)+ " "+ StringSubstr(data1, 0, 2)+ ":"+ StringSubstr(data1, 2, 2));
   return(vzv);
}
и все вроде хорошо… но что то пошло не так )) 
файл ES имеет размер 67 мегабайт... 
и вышеописанный алгоритм считывания работает на меньших данных, но на этом файле он просто умер )) 
вот уже полчаса терминал висит и идет его считывание... 

так дело не пойдет. придется создавать виртуальный инструмент и в режиме АВТОНОМНОЙ работы с графиком — работать с этими данными.. 
скорее всего еще придется разбить по годам, и создавать 10 разных графиков с разными годами… ибо на одном графике 10 летняя история с периодом 5 минут — просто не влезет в МТ4 ... 
15 Комментариев
  • Сергей Андреев
    22 мая 2020, 11:41
    hile (read)
          {
    
             int i = ArraySize(HistBar); ArrayResize(HistBar,i+1);<br />}

    resize в огромном цикле это нонсенс, попробуй сначала узнать количество строк и потом разово вызвать resize.
    • Vad
      22 мая 2020, 12:01
      Тихая Гавань, зависнуть при считывании строк для подсчета их числа может только из-за Вашей ошибки, не из-за размера файла. Например, считываете число строк в переменную недостаточного размера.

      Судя по таким ошибкам в базовых вещах, ни о какой реализации более менее сложного алгоритма речи идти не может
        • Vad
          22 мая 2020, 12:19
          Тихая Гавань, обработчик тестера пишите же Вы.
          Про строки я привел для примера, т.к. в некоторых компиляторах (старых, но все же встречается иногда) int является 16 битовым, т.е. всего 64000. Сталкивался с такой ошибкой у некоторых...

          Но возможных нюансов намного больше, так что удачи в написании кода. В любом случае зависать из-за считывания строк не должно.
        • ves2010
          22 мая 2020, 12:25
          Тихая Гавань, ну как бы int бывает разный… до 2000года нормально было инт иметь в 2 байта...


  • Виталий Зенин
    22 мая 2020, 11:55


  • XoraX
    22 мая 2020, 12:06
    А по нефти есть такой файл?
  • А чего, в MT4 нет возможности сделать CustomSymbol, как в MT5?

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн