Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 961

 
Yevhenii Levchenko:

Что нужно сказать: такое бывает и это так же из за каких-то косяков с котировками или это я что-то не так написал?

Вы хотите от меня услышать, что тестер МТ4 работает не корректно? - не услышите, Ваш скрин с ошибками генерации тиков или баров - тестер все сгенерирует из любого возможного младшего ТФ

на такие вопросы как Ваш - разработчики отвечали всегда - пишите коды правильно!

как писать я показал пример, как Вы пишете свой код.... да не видно, да и не интересно уже  ))) - занят, читал статьи, займусь своими кодами

 
Igor Makanu:

Вы хотите от меня услышать, что тестер МТ4 работает не корректно? - не услышите, Ваш скрин с ошибками генерации тиков или баров - тестер все сгенерирует из любого возможного младшего ТФ

на такие вопросы как Ваш - разработчики отвечали всегда - пишите коды правильно!

как писать я показал пример, как Вы пишете свой код.... да не видно, да и не интересно уже  ))) - занят, читал статьи, займусь своими кодами

Ок! Спасибо

 
Yevhenii Levchenko:

Ок! Спасибо

Может пригодится: https://www.mql5.com/ru/forum/165405#comment_5602248

Архивные котировки от Metaquotes
Архивные котировки от Metaquotes
  • 2017.01.02
  • www.mql5.com
Ситуация: В терминале MT4 по клавише F2 можно закачать архивные котировки. Они нужны всем, кто разрабатывает свою торговую систему...
 

Добрый день, товарищи. Учусь писать простенькие вещи на mql4, сейчас пытаюсь работать с массивами. не могу понять ошибку в этом куске кода:

   

   double d1 = NormalizeDouble(Low[iLowest(NULL, 0, MODE_LOW, MaxLimit, 0)],4);
   double d2 = NormalizeDouble(High[iHighest(NULL, 0, MODE_HIGH, MaxLimit, 0)],4);
   double CrossBarsNum[][2];
   for (double d = d1; d <= d2; d += 0.0001)
     {
       double a = 0.0;
       for(int i = 0; i < MaxLimit; i++)
           if(d > Low[i] && d < High[i])
               a+=1;
               CrossBarsNum[(d-d1)/0.0001,0] = d;
               CrossBarsNum[(d-d1)/0.0001,1] = a;

ругается на последние две строчки с формулировкой integer expression expected. Насколько я понял, индекс в массиве можно задавать при помощи формулы. Здесь она нужна для перебора строчек массива и последовательной записи в них котировок и количества баров, в которых такая котировка содержалась. Формула выдаёт целочисленное значение (от 0 и выше с шагом в единицу), так в чём же ошибка?

 
Azat0t:

Добрый день, товарищи. Учусь писать простенькие вещи на mql4, сейчас пытаюсь работать с массивами. не могу понять ошибку в этом куске кода:

   

ругается на последние две строчки с формулировкой integer expression expected. Насколько я понял, индекс в массиве можно задавать при помощи формулы. Здесь она нужна для перебора строчек массива и последовательной записи в них котировок и количества баров, в которых такая котировка содержалась. Формула выдаёт целочисленное значение (от 0 и выше с шагом в единицу), так в чём же ошибка?

Индекс массива сделайте типа int, а не double. Индекс массива должен быть целым числом.

 
Sergey Basov:

Может пригодится: https://www.mql5.com/ru/forum/165405#comment_5602248

Спасибо! Я приблизительно всегда так и делал. После загрузки нажимал "Обновить" - котировки отличались. А по поводу того, что сделки не открывались, это я натупил - забыл, что поставил временное ограничение работы для робота... :)
 
Azat0t:

Добрый день, товарищи. Учусь писать простенькие вещи на mql4, сейчас пытаюсь работать с массивами. не могу понять ошибку в этом куске кода:

   

ругается на последние две строчки с формулировкой integer expression expected. Насколько я понял, индекс в массиве можно задавать при помощи формулы. Здесь она нужна для перебора строчек массива и последовательной записи в них котировок и количества баров, в которых такая котировка содержалась. Формула выдаёт целочисленное значение (от 0 и выше с шагом в единицу), так в чём же ошибка?

Пользуйтесь явным преобразованием типов

               CrossBarsNum[int((d-d1)/0.0001),0] = d;
               CrossBarsNum[int((d-d1)/0.0001),1] = a;
 
Спасибо, ошибку исправил, но результата всё равно нет: массив не заполняется. С чем это может быть связано?
   int handle;
   handle = FileOpen("FindLevels.txt", FILE_CSV|FILE_WRITE, '\t');
   double d1 = NormalizeDouble(Low[iLowest(NULL, 0, MODE_LOW, MaxLimit, 0)],4);
   double d2 = NormalizeDouble(High[iHighest(NULL, 0, MODE_HIGH, MaxLimit, 0)],4);
   double CrossBarsNum[][2];
   for (double d = d1; d <= d2; d += 0.0001)
     {
       double a = 0.0;
       for(int i = 0; i < MaxLimit; i++)
           if(d > Low[i] && d < High[i])
               a++;
               CrossBarsNum[int((d-d1)/0.0001),0] = a;
               CrossBarsNum[int((d-d1)/0.0001),1] = d;
     } 
   FileWrite(handle, CrossBarsNum[11,1], d, d1, d2, a, ArraySize(CrossBarsNum));
   //FileWriteArray(handle, CrossBarsNum, 0, WHOLE_ARRAY);
   FileClose(handle);
   return(0);
переменные d, d1, d2 срабатывают точно
 
Azat0t:
Спасибо, ошибку исправил, но результата всё равно нет: массив не заполняется. С чем это может быть связано? переменные d, d1, d2 срабатывают точно
У вас всегда размер массива нулевой в первом измерении. Я не увидел нигде ArrayResize()
 
Azat0t:
Спасибо, ошибку исправил, но результата всё равно нет: массив не заполняется. С чем это может быть связано? переменные d, d1, d2 срабатывают точно

Не забывайте ставить

#property strict
Исправьте все ошибки и может быть всё получится. Научитесь пользоваться отладчиком. С пошаговым выполнением все проблемы выявляются.
Причина обращения: