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

 
lynxntech #:
мне нужно время Терминала. для работы с объектами, как впрочем и любые

https://www.mql5.com/ru/docs/dateandtime

Документация по MQL5: Дата и время
Документация по MQL5: Дата и время
  • www.mql5.com
Группа функций, обеспечивающих работу с данными типа datetime (целое число, представляющее собой количество секунд, прошедших с 0 часов 1 января...
 
Мимо. Вопрос в первом посте. 
 
Alexander Voronkov #:

Нужно по текущему символу.......... Не подстраивать инпутами под разные рынки

 
VVT #:
я не специалист по рисовалкам, но Вы пытаетесь нарисовать линию по времени сервера, первый тик из которого прийдёт не раньше 1, тоесть линия нарисуется не раньше 1
По моему надо применить время винды, где то была такая функция поищите

Я все правильно рисую, проблема получить время начала торгового времни символа, нужно точно указывать рабочее время по графику, иначе терминал не найдя время у символа привязывается его на 1 бар назад, вот если бы вперёд...

 
VVT #:
iTime(NULL,PERIOD_H1,1)

Всю справку ещё скиньте)

Если не понимаете вопрос, то и верного ответа наверное не будет. 

Eurusd в 00 часов начало торгов

Xauusd в 01 час

На moex символы ещё позже

 
lynxntech #:

Всю справку ещё скиньте)

Если не понимаете вопрос, то и верного ответа наверное не будет. 

Eurusd в 00 часов начало торгов

Xauusd в 01 час

На moex символы ещё позже

расписание торгов (если DC удосужился их заполнять) см. SymbolInfoSessionTrade, SymbolInfoSessionQuote 

но там внезапно получается несколько мягко говоря неудобно - нужно сначала вытащить день недели из даты, потом дёргать SymbolInfoSessionXXX пока не надоест (сессий может быть несколько,придётся перебирать пока не получишь false)

Если на коленке по быстрому в истории искать во сколько открылся день, то надо брать таймфрейм меньше чем PERIOD_D1 (он всегда в 0:0), например PERIOD_M30 или M15 и искать момент перемены дат.

 
Maxim Kuznetsov #:

расписание торгов (если DC удосужился их заполнять) см. SymbolInfoSessionTrade, SymbolInfoSessionQuote 

но там внезапно получается несколько мягко говоря неудобно - нужно сначала вытащить день недели из даты, потом дёргать SymbolInfoSessionXXX пока не надоест (сессий может быть несколько,придётся перебирать пока не получишь false)

Если на коленке по быстрому в истории искать во сколько открылся день, то надо брать таймфрейм меньше чем PERIOD_D1 (он всегда в 0:0), например PERIOD_M30 или M15 и искать момент перемены дат.

Да смотрел, ради такой простой функции, может попроще что-то

Вот смену дат надо запоминать смотреть

 
lynxntech #:

Всю справку ещё скиньте)

Если не понимаете вопрос, то и верного ответа наверное не будет. 

Eurusd в 00 часов начало торгов

Xauusd в 01 час

На moex символы ещё позже

Справка большая). а вот часть кода с индикатора периодов, вот пожалуй

// Input parameters
input bool PlaySound = true;     // Играть звуковой сигнал при смене даты
input bool AlertUser = true;     // Сообщать пользователю об изменении даты
input bool VisualMark = true;    // Ставить визуальную отметку на графике

// Global variables
string previous_date = "";       // Хранит предыдущую дату

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   Print("SignalDateChange indicator started");
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   Print("SignalDateChange indicator stopped");
}

//+------------------------------------------------------------------+
//| Expert tick function                                            |
//+------------------------------------------------------------------+
void OnTick()
{
   // Получить текущую дату
   string current_date = TimeToString(TimeCurrent(), TIME_DATE);
   
   // Проверить изменение даты
   if(previous_date != current_date)
   {
      // Дата сменилась, выполняем обработку события
      OnDateChanged(current_date);
      
      // Обновляем сохранённую дату
      previous_date = current_date;
   }
}

//+------------------------------------------------------------------+
//| Обработчик смены даты                                           |
//+------------------------------------------------------------------+
void OnDateChanged(string date)
{
   // Оповещаем пользователя текстом
   if(AlertUser)
      Alert("Новая дата: ", date);
   
   // Воспроизводим звуковой сигнал
   if(PlaySound)
      PlaySound("alert.wav"); // Используйте подходящий звуковой файл (.wav)
   
   // Ставим визуальную отметку на графике
   if(VisualMark)
   {
      string mark_id = "Date_Change_" + date;
      ObjectCreate(0, mark_id, OBJ_VLINE, 0, TimeCurrent(), 0);
      ObjectSetInteger(0, mark_id, OBJPROP_COLOR, clrGreen);
      ObjectSetInteger(0, mark_id, OBJPROP_WIDTH, 2);
   }
}

//+------------------------------------------------------------------+
//| Expert chart event function                                     |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
{
   // Оставьте пустым, если дополнительные события не нужны
}

//+------------------------------------------------------------------+
//| Expert deinit function                                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // Удаляем созданные отметки при закрытии индикатора
   int obj_count = ObjectsTotal(0);
   for(int i=obj_count-1;i>=0;i--)
   {
      string object_name = ObjectName(0,i);
      if(StringFind(object_name,"Date_Change_",0)==0)
         ObjectDelete(0,object_name);
   }
}
 
Igor Nagorniuk #:

Справка большая). а вот часть кода с индикатора периодов, вот пожалуй

Ваш код, во-первых, не с индикатора, а для советника. Во-вторых, он должен компилироваться с ошибкой. В-третьих, этот код не отвечает на поставленный вопрос. Где у вас в коде можно увидеть время начала дня в любое время суток? Поэтому, либо исправляйте и выкладывайте рабочий код, либо не выкладывайте вовсе. 
 
Igor Nagorniuk #:

Справка большая). а вот часть кода с индикатора периодов, вот пожалуй

зачем такое вставляете тут?

из далека выглядит как рабочий код, вставляешь не компилируется, 2 функции OnDeinit, OnChartEvent пустой

все это дело с виду как рабочий код, не компилируется

если делаете вырезку, то зачем вся остальная муть в виде готового кода?


по теме, если делать вырезку из того кода

   // Получить текущую дату
   string current_date = TimeToString(TimeCurrent(), TIME_DATE);
   
   // Проверить изменение даты
   if(previous_date != current_date)
   {
      // Дата сменилась, выполняем обработку события
      OnDateChanged(current_date);
      
      // Обновляем сохранённую дату
      previous_date = current_date;

типа такого что-то надо смотреть