Добрый день.
Я объявил массив таким типом структуры:
, где j - номер бара отсчитывается от текущего времени.
Терминал выдает Array out of range в этой строчке.
Что не так ?
Хотя, одновременно с этим:
В этих строчках все работает.
Что я не так делаю ?
Уже спасибо.
А зачем замерять размер массива если он не заполнялся? Да и дальше тоже вряд-ли работает. Просто компилятор находит первое обращение к несуществующему индексу массива и предупреждает о нём.
Но это ещё не всё... В MqlDateTime не массив должен быть.
ps; Извиняюсь, не сразу заметил что в первом случае MqlDateTime а во втором MqlRates где должен быть массив.
А зачем замерять размер массива если он не заполнялся? Да и дальше тоже вряд-ли работает. Просто компилятор находит первое обращение к несуществующему индексу массива и предупреждает о нём.
Но это ещё не всё... В MqlDateTime не массив должен быть.
ps; Извиняюсь, не сразу заметил что в первом случае MqlDateTime а во втором MqlRates где должен быть массив.
И в первом и во втором случае - массивы: массивы структур.
А замерить размер я посоветовал, для того, чтобы натолкнуть вопрошающего на правильный ход мыслей...
N Такое ощущение что новички вообще документацию не читают, а там большинство ответов на их вопросы содержится. Еще и вопросы ставят не правильно и думай сиди что же они делают не так. Если нужно получить день недели по индексу, то примерно так
//+------------------------------------------------------------------+ //| test_03.mq5 | //| Sergey Gritsay | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Sergey Gritsay" #property link "https://www.mql5.com" #property version "1.00" #include <Tools\DateTime.mqh> MqlDateTime data; MqlRates rates[]; CDateTime date; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- int bar=10; int copied=CopyRates(NULL,0,0,bar,rates); if(copied<=0) Print("Ошибка копирования ценовых данных ",GetLastError()); else Print("Скопировано ",ArraySize(rates)," баров"); for(int i=0;i<bar;i++) { TimeToStruct(rates[i].time,data); Print("DayOfWeek = ",data.day_of_week," - ",date.DayName(data.day_of_week)); } } //+------------------------------------------------------------------+
Результат на графике D1
HI 0 00:06:09.116 test_03 (EURUSD,D1) Скопировано 10 баров GM 0 00:06:09.116 test_03 (EURUSD,D1) DayOfWeek = 1 - Monday CI 0 00:06:09.116 test_03 (EURUSD,D1) DayOfWeek = 2 - Tuesday QP 0 00:06:09.116 test_03 (EURUSD,D1) DayOfWeek = 3 - Wednesday LF 0 00:06:09.116 test_03 (EURUSD,D1) DayOfWeek = 4 - Thursday PO 0 00:06:09.116 test_03 (EURUSD,D1) DayOfWeek = 5 - Friday PF 0 00:06:09.117 test_03 (EURUSD,D1) DayOfWeek = 1 - Monday LQ 0 00:06:09.117 test_03 (EURUSD,D1) DayOfWeek = 2 - Tuesday JH 0 00:06:09.117 test_03 (EURUSD,D1) DayOfWeek = 3 - Wednesday CN 0 00:06:09.117 test_03 (EURUSD,D1) DayOfWeek = 4 - Thursday GG 0 00:06:09.117 test_03 (EURUSD,D1) DayOfWeek = 5 - Friday
...
Добрый день.
Я объявил массив таким типом структуры:
, где j - номер бара отсчитывается от текущего времени.
Терминал выдает Array out of range в этой строчке.
Что не так ?
Хотя, одновременно с этим:
В этих строчках все работает.
Что я не так делаю ?
Уже спасибо.
Видимо что-то не договариваете. Во втором случае тоже будет out of range. Наверно выдрали куски кода. Во втором случае работает без ошибок наверно потому-что перед обращением к массиву вызывали CopyRates(), эта функция сама масштабирует массив. В первом случае массив не имеет размера, поэтому и получается ошибка out of range (вне диапазона). Надо при объявлении массива указать ему размер:
MqlDateTime timerate[1];
или потом изменить его:
MqlDateTime timerate[]; ArrayResize(timerate,1);
Только, скорее всего, нет необходимости использования массива для времени, можно просто переменную использовать:
MqlDateTime timerate;
N Такое ощущение что новички вообще документацию не читают, а там большинство ответов на их вопросы содержится. Еще и вопросы ставят не правильно и думай сиди что же они делают не так. Если нужно получить день недели по индексу, то примерно так
Результат на графике D1
...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день.
Я объявил массив таким типом структуры:
, где j - номер бара отсчитывается от текущего времени.
Терминал выдает Array out of range в этой строчке.
Что не так ?
Хотя, одновременно с этим:
MqlRates mrate[]; PrTime = mrate[j].time; Price = mrate[j].close;
В этих строчках все работает.
Что я не так делаю ?
Уже спасибо.