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

 
Ivan Butko #:

Ростислав, Вы гений) Спасибо большое. 
Если не секрет, скажите пожалуйста, в чём было дело? Мне как маленькому кодеру интересно

Я не разбирался...просто переписал по своему.
 
Alex8888888888 #:

Большое спасибо!

Исправьте эту строку

last=StringToTime(TimeToStr(OrderCloseTime(),TIME_DATE))+PeriodSeconds(PERIOD_D1);
 
Как взять цены например, 10 авг сего года, прошлого и позапрошлого?
 
Roman Shiredchenko #:
Как взять цены например, 10 авг сего года, прошлого и позапрошлого?
      int index1=iBarShift(_Symbol,PERIOD_D1,time[i],false);
      if(time[i]==StrToTime("10.08.2023")) Print(iOpen(_Symbol,PERIOD_D1,index1));
 
Tretyakov Rostyslav #:
просто переписал по своему.

Хорошо, спасибо

 
Tretyakov Rostyslav #:

О! Спс. Разберу код.

Есть вариант для mql5? (Общий подход)

Нужен цикл для суммирования цены открытия (нахождения средней цены по годам) - одинаковых дней  например по 3-м или 5-ти годам.

По сути нужен оптимальный вариант цикла перебора дней по годам для суммирования их цен открытий (закрытий можно) (по соответствующим дням (одинаковым) по годам) - для нахождения средней цены открытия или закрытия дня по например 3 или 5 годам - для примера.

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[]) 

  {
//----+   
        for(int i=prev_calculated;i<rates_total;i++)     
         //---- Инициализация ячейки индикаторного буфера полученным значением 
          ExtLineBuffer[i]=close[i];    
      
    
      //time=D'2023.08.29'; 
      int index1=iBarShift(_Symbol,PERIOD_D1,time[0],false);
      //if(time==D'2023.08.29')
       Print(iOpen(_Symbol,PERIOD_D1,index1));
//----+     
   return(rates_total);
  }
 
Roman Shiredchenko #:

О! Спс. Разберу код.

Есть вариант для mql5? (Общий подход)

Нужен цикл для суммирования цены открытия (нахождения средней цены по годам) - одинаковых дней  например по 3-м или 5-ти годам.

По сути нужен оптимальный вариант цикла перебора дней по годам для суммирования их цен открытий (закрытий можно) (по соответствующим дням (одинаковым) по годам) - для нахождения средней цены открытия или закрытия дня по например 3 или 5 годам - для примера.

Есть структура даты MqlDateTime
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура даты
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура даты
  • www.mql5.com
Структура даты - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin #:
Есть структура даты MqlDateTime
  спсб. Артем! Буду разбираться  как ее юзать. Пока еще не юзал.
 
Roman Shiredchenko #:
  спсб. Артем! Буду разбираться  как ее юзать. Пока еще не юзал.

Всё просто. Используем функцию TimeToStruct(), передавая в неё время и переменную структуры - там она заполнится, и из неё можно получить все данные о дате.

Для индикатора - в цикле передаём время и разбираем его на составляющие в поисках нужных значений даты (месяц, день):

   MqlDateTime date_struct;
   if(TimeToStruct(time[i],date_struct))
     {
      PrintFormat("Год: %lu, месяц: %02lu, день: %02lu, час: %02lu, минута: %02lu, секунда: %02lu, день недели: %lu, номер дня в году: %03lu",
      date_struct.year,date_struct.mon,date_struct.day,date_struct.hour,date_struct.min,date_struct.sec,date_struct.day_of_week,date_struct.day_of_year);
     } 
Документация по MQL5: Дата и время / TimeToStruct
Документация по MQL5: Дата и время / TimeToStruct
  • www.mql5.com
TimeToStruct - Дата и время - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Artyom Trishkin #:

Для индикатора - в цикле передаём время и разбираем его на составляющие в поисках нужных значений даты (месяц, день):

Добавлю. Для получения текущего локального времени компьютера код будет выглядеть так:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   MqlDateTime date_struct;
   if(TimeToStruct(TimeLocal(),date_struct))
     {
      PrintFormat("Год: %lu, месяц: %02lu, день: %02lu, час: %02lu, минута: %02lu, секунда: %02lu, день недели: %lu, номер дня в году: %03lu",
                  date_struct.year,date_struct.mon,date_struct.day,date_struct.hour,date_struct.min,date_struct.sec,date_struct.day_of_week,date_struct.day_of_year);
     }
  }
//+------------------------------------------------------------------+

Результат будет:

2023.08.29 08:00:43.230 1 (EURUSDrfd,H1) Год: 2023, месяц: 08, день: 29, час: 08, минута: 00, секунда: 43, день недели: 2, номер дня в году: 240


С уважением, Владимир.

Причина обращения: