Смотри, как бесплатно скачать роботов
Ищи нас в Twitter!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Просмотров:
148
Рейтинг:
(4)
Опубликован:
\MQL5\Include\Tools\Custom\ \MQL5\Expert\Test\DateTimeMsc\
MQL5 Фриланс Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Когда я недавно начал интенсивно тестировать функциональность CopyTicksRange(), я столкнулся с несколькими неприятными проблемами при работе с миллисекундным временем:

  1. На самом деле я хотел использовать CDateTime, поскольку он является производным от MqlTimeStruct и вы можете легко редактировать различные единицы времени с помощью включенных методов инкремента и декремента.
  2. В то же время мне нужен был способ плавно переводить миллисекундное время (секунды с 1 января 1970 года, умноженные на 1000 в формате ulong) туда и обратно.

Здесь я столкнулся с тем, что, например, количество миллисекунд - это очень расплывчатое число, которое мало что говорит о точной дате. Однако если вы используете CDateTime или TimeStruct, то все единицы времени легко изменить, но формат разрывает их на части, и результат тоже получается очень неясным. Этот класс CDateTimeMsc был создан для решения этой проблемы.

#include <Tools\DateTime.mqh>

struct CDateTimeMsc: public CDateTime
  {
public:
   int               msc;               // additional variable for msc storage
   datetime          check_datetime;    // для удобного наблюдения необходимо немного накладных расходов.

   //--- Методы CDateTimeMsc

   ulong             MscTime(void) {return(ulong(double(CDateTime::DateTime()) * 1000) + msc);}
   void              MscTime(ulong a_msc_time);  // ввод (datetime*1000)
   void              Msc(int value);
   //bool IsNumInt(const int num);
   void              MscDec(int delta = 1);
   void              MscInc(int delta = 1);
   void              SecTime(int a_int_time);
   ulong             SecTime(void);
   void              UpdateDateTime();   // обновляет переменную наблюдения check_datetime
   void              DateTime(datetime a_datetime) {CDateTime::DateTime(a_datetime); UpdateDateTime();}
   datetime          DateTime(void) {return(CDateTime::DateTime());}

  };

Новые методы были вставлены в наследование старой структуры.

Теперь класс, который на самом деле является структурой (см. Структуры/Классы), может работать и с миллисекундами, при условии, что такое точное время доступно.

Кроме того, методы инкремента и декремента были распространены на свойство msc.

Теперь можно поспорить, действительно ли необходима дополнительная переменная "check_datetime", поскольку она создает определенные накладные расходы (для некоторых людей это очень важно). Однако я предполагал, что обычно используется не так много объектов CDateTime, а только несколько в важных местах, где необходимо изменять единицы времени, такие как часы, минуты, секунды или дни. У меня также были некоторые сомнения по поводу метода UpDateTime(), который вызывается без необходимости при каждом увеличении/уменьшении.

В целом, однако, во главу угла был поставлен фактор обработки.


Тест
Больше не нужно запрашивать время с помощью дополнительной переменной datetime, если вы хотите узнать точную дату, а можно просто поместить переменную "check_datetime" под наблюдение: (TestEA см. выше).


обс2

Миллисекундное время было автоматически переведено в формат datetime.


Перевод с немецкого произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/de/code/48156

Внутридневная тройная производительность Внутридневная тройная производительность

Установите три креста и отслеживайте ежедневные процентные показатели, начиная с определенного времени (которое также можно задать).

Strong Historical Levels Strong Historical Levels

Исторические сильные уровни S/Rs

Caculater Margin Caculater Margin

EA Tools tính toán Margin theo lotize, có thể tùy chỉnh đòn bẩy

Open Range BreakOut Indicator for MetaTrader 5 Open Range BreakOut Indicator for MetaTrader 5

Индикатор Open Range Breakout (ORB) - это мощный инструмент технического анализа, который идентифицирует и отслеживает прорывы цен из диапазона открытия торговых сессий. Индикатор основан на концепции, согласно которой высокие и низкие цены, установленные в первые минуты торговой сессии, часто служат значительными уровнями поддержки и сопротивления в течение всего оставшегося дня. Индикатор автоматически рассчитывает диапазон открытия на основе заданных пользователем временных периодов, строит несколько ценовых целей, а также предоставляет визуальные и звуковые оповещения о потенциальных торговых возможностях. Он призван помочь трейдерам выявить высоковероятные сделки на прорыв и сценарии ретеста.