Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 154

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

Первое что бросается в глаза вы используете советник как обычный скрипт. Почитайте в руководстве чем они отличаются. Под вашу задачу подходит именно скрипт а не советник!

Второе зачем вы применяете данную конструкцию? 

  for (count=1; count<=countstr; count++)
  {
   //----
   //----  
  if (count>=countstr) break;
  }

Ну и то где лежит корень вашей проблемы

void CreatFile()
   {
    string Filepatch="Analyse news\\"+"Symbol"+"_"+IntegerToString(periodMT)+".csv";
    Comment("Creat a new file");
    int file=FileOpen(Filepatch, FILE_WRITE|FILE_CSV);
    FileWrite(file, "Symbol","Period","News","Data Time","Open","High","Low","Close");
    
    int  bar_index=iBarShift(symbolMT,periodMT,DateNews[count-1]); 
//Чему равен в этот момент count? 
//Для чего нужен был массив событий если в обработку попадает только одно событие?
//Функция iBarShift (так как вы используете) возвращает либо номер бара по времени либо ближайший номер бара если в истории есть пропуски 
//Внимательно почитайте описание 
    int  countBar=bar_index;
    
    for(count=1; count<=countstr; count++)
    {
    countBar--;
    
    FileWrite(file,symbolMT,periodMT,NameNews[count-1],DateNews[count-1],
    
    DoubleToStr(iOpen(symbolMT,periodMT,countBar))

    );
    }
    FileClose(file);
    ExpertRemove();
   }

Ну и последнее вы ну очень сильно нагородили в простейшей программе опишите что вы хотите от данной программы и давайте попробуем пошагово написать скрипт красиво!

 
Vitaly Gorbunov:

Первое что бросается в глаза вы используете советник как обычный скрипт. Почитайте в руководстве чем они отличаются. Под вашу задачу подходит именно скрипт а не советник!

Второе зачем вы применяете данную конструкцию? 

Ну и то где лежит корень вашей проблемы

Ну и последнее вы ну очень сильно нагородили в простейшей программе опишите что вы хотите от данной программы и давайте попробуем пошагово написать скрипт красиво!

Виталий, спасибо за Ваш ответ!

1)Насчет скрипта, Вас понял, попробую.

2)Ну все просто, прерываю цикл for.

3)Необходимо создать эксперта или скрипт который выгрузит котировки определенных инструментов+таймфреймов, конкретных новостей, по конкретным даты и времени.

Конечный результат записи в файл должен выглядеть таким образом:

SymbolPeriodNewsDateTimeOpenHighLowClose
GBPUSD5Базовый индекс потребительских цен (ИПЦ) в Канаде (м/м)26.01.2018  16:30:000.000000000.000000000.000000000.00000000
GBPUSD5Базовый индекс потребительских цен (ИПЦ) в Канаде (м/м)21.12.2017  15:30:000.000000000.000000000.000000000.00000000
GBPUSD5Базовый индекс потребительских цен (ИПЦ) в Канаде (м/м)17.11.2017  15:30:000.000000000.000000000.000000000.00000000
GBPUSD5Базовый индекс потребительских цен (ИПЦ) в Канаде (м/м)20.10.2017  15:30:000.000000000.000000000.000000000.00000000

И так по разным инструментам+таймфреймов+новостей и дат.

И еще, есть один нюанс. Если выгрузка происходит по таймфрейму 60 минут, тогда котировки должны соответствовать времени 16:00 и 15:00.

Если время новости 14:45, тогда котировки должный соответствовать времени:

1 минута - 14:45

5 минут - 14:45

15 минут - 14:45

30 минут - 14:30

60 минут - 14:00

Надеюсь понятно выразился. Спасибо 

 

Посмотрите ещё раз на этот цикл! Переменная count изменяется только самим оператором for таким образом if просто лишний в этом цикле.

Давайте теперь определим как мы будем обрабатывать данные. Мне кажется что логичнее всего считать из файла новостей параметры новости, обработать данные и записать их в файл котировок. Набирать массив новостей что бы потом опять бежать по массиву ради одной записи как то не рационально, к тому же очень часто при обработке массивов можно наделать кучу ошибок связанных с индексами.

 
Vitaly Gorbunov:

Посмотрите ещё раз на этот цикл! Переменная count изменяется только самим оператором for таким образом if просто лишний в этом цикле.

Давайте теперь определим как мы будем обрабатывать данные. Мне кажется что логичнее всего считать из файла новостей параметры новости, обработать данные и записать их в файл котировок. Набирать массив новостей что бы потом опять бежать по массиву ради одной записи как то не рационально, к тому же очень часто при обработке массивов можно наделать кучу ошибок связанных с индексами.

Имеется ввиду, заранее создать файлы с котировками и добавить в файл параметры новостей?

 
nidves:

Имеется ввиду, заранее создать файлы с котировками и добавить в файл параметры новостей?

Вы меня не поняли читаем из файла новостей, обрабатываем и сразу записывает в файл котировок и так пока не обработаем весь файл новостей!
 
Vitaly Gorbunov:
Вы меня не поняли читаем из файла новостей, обрабатываем и сразу записывает в файл котировок и так пока не обработаем весь файл новостей!
Так я пытаюсь это сделать, только через массивы. Как бы Вы написали такой код?
 
nidves:
Так я пытаюсь это сделать, только через массивы. Как бы Вы написали такой код?
Зачем применять массив там где он не нужен? Чем проще код тем меньше ошибок можно понаделать!
 
Vitaly Gorbunov:
Зачем применять массив там где он не нужен? Чем проще код тем меньше ошибок можно понаделать!

Через данный код я учусь работать с массивами. Ведь задача в принципе стоит не сложная.

OpenSymbol  [count-1]=iOpen(symbolMT,periodMT,numberBar);

В выше указанном массиве уже записаны котировки "Open". Соответственно необходимо просто вытащить из данного массива котировку нужной мне даты.

 
nidves:

Через данный код я учусь работать с массивами. Ведь задача в принципе стоит не сложная.

В выше указанном массиве уже записаны котировки "Open". Соответственно необходимо просто вытащить из данного массива котировку нужной мне даты.

Я сейчас уезжаю на дачу буду в понедельник. Если интересно разобраться добавьте меня в друзья пообщаемся не засоряя форум.