Про язык программирования MQL5 - страница 3

 
eevviill:

Можно это сделать чтобы было его видно на глобальном уровне?

 Чтобы передать один из этих массивов нужно создавать буфер и туда копировать, а потом передавать? 

Вы не имеете права сохранять на глобальном уровне ссылки на эти временные данные, передаваемые в функцию расчета индикатора. Отработает OnCalculate и эти массивы уже не валидны.

Если нужно передать эти массивы глубже по функциям (причем обязательно в рамках вызова OnCalculate), то просто передавайте по ссылке(&) в параметрах в последующие функции точно c такими же описаниями типа const datetime &time[].

 
eevviill:

Я имею ввиду практичность написания кода.

 ArraySetAsSeries

Потому что он без этого считает задом наперёд. 

Ничего не мешает вам, зная, что вот этот массив прямой/обратный, поменять цикл обработки на прямой/обратный. Это же элементарно и не является проблемой.

Нет никакого смысла крутить направление буфера.

 
eevviill:

TimeDayOfWeek

Можно узнать только через структуру?

Неужели эта функция тоже намного тяжелее структурной? 

Да.

Обычно при доступе ко времени используются/опрашиваются множество полей и поэтому лучше сразу выдать структуру для массового доступа (year, month, day, week, hour, etc), а не производить множество вызовов со скрытым дорогим преобразованием datetime -> time_to_struct -> member.

Это очень просто понять, если задуматься "а что же происходит внутри, когда я прошу выделить год из datetime?". Сама функция декодирования time_to_struct достаточно дорогая и наш вариант "сразу выдать структуру" заведомо более эффективен, чем часто многократный вызов "дай год, дай месяц, дай ...". Ибо стоимость взятия любого члена структуры уже равна нулю(1-2 такта CPU) по сравнению с вызовом системной функции и дорогим проходом в CRT функцию _gmtime64_s().

 
Renat:

Ничего не мешает вам, зная, что вот этот массив прямой/обратный, поменять цикл обработки на прямой/обратный. Это же элементарно и не является проблемой.

Нет никакого смысла крутить направление буфера.

Вам не кажется странным когда алерт возвращает Low 5699 бара?

int OnCalculate (const int rates_total,      // размер входных таймсерий
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const datetime &time[],     // Time
                 const double &open[],       // Open
                 const double &high[],       // High
                 const double &low[],        // Low
                 const double &close[],      // Close
                 const long &tick_volume[],  // Tick Volume
                 const long &volume[],       // Real Volume
                 const int &spread[]         // Spread
   )
  {
Alert(low[1]);
 
eevviill:

Вам не кажется странным когда алерт возвращает Low 5699 бара?

Нет, так как вы не потрудились представить достаточный объем информации: полный код и условия вызова для воспроизведения ситуации.

Рекомендую при возникновении вопросов не бросаться обвинениями в ошибках, а вдумчиво разобраться: есть и отладчик и распринтовка любых параметров. Если что-то не так, обложитесь проверкой окружения.

 
Renat:

Нет, так как вы не потрудились представить достаточный объем информации: полный код и условия вызова для воспроизведения ситуации.

Рекомендую при возникновении вопросов не бросаться обвинениями в ошибках, а вдумчиво разобраться: есть и отладчик и распринтовка любых параметров. Если что-то не так, обложитесь проверкой окружения.

Хмм. Ну это весь код.

low[1] возвращает лоу предпоследнего бара в истории графика. 

 

К сожалению, это не весь код и нет условий для независимой проверки.

Я показал, что надо сделать, чтобы вам самостоятельно разобраться.

 
Renat:

К сожалению, это не весь код и нет условий для независимой проверки.

Я показал, что надо сделать, чтобы вам самостоятельно разобраться.

//+------------------------------------------------------------------+
//|                                                      Volumes.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|  Volumes                                                         |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   Alert(low[1]);
     


      
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }
 

Все нормально показывает, вот на EURUSD, H1:

Набрасываете?

Думаю, что да. С учетом кучи клонов и банов за троллинг и нарушения правил. Не нужно из-за обиды или неприязни придумывать проблемы на ровном месте.

 
Renat:

Все нормально показывает, вот на EURUSD, H1:

Набрасываете?

Думаю, что да. С учетом кучи клонов и банов за троллинг и нарушения правил.

Что что делаю? Каких клонов?

 

Файлы:
vol.mq5  2 kb
Причина обращения: