Обсуждение статьи "Работаем со временем (Часть 2): Функции"

 

Опубликована статья Работаем со временем (Часть 2): Функции:

Научимся автоматически распознавать смещения времени у брокера и время по Гринвичу. Вместо того, чтобы обращаться к брокеру, который скорее всего даст недостаточно полный ответ (а кто захочет объяснять, куда пропал торговый час?), мы сами посмотрим, по какому времени приходят от них котировки в те недели, когда переводят часы. Но конечно же, это мы будем делать не вручную — пусть за нас работает программа.

В этой статье мы продолжим работать с include-файлом DealingWithTime.mqh, с которым работали в первой части. В этом файле до функций и после макро-подстановок идут необходимые переменные, которые объявлены как глобальные переменные:

//--- глобальные переменные для смены времени
int      DST_USD=0,                             // фактическое смещение времени для США
         DST_EUR=0,                             // фактическое смещение времени для Европы
         DST_AUD=0,                             // фактическое смещение времени для Австралии
         DST_RUS=0;                             // D'2014.10.26 02:00', -10800,


Эти переменные DST_USD, DST_EUR, и т.д. будут принимать фактическое значение смещения времени в соответствующих странах и регионах — США, Европа и т.д. Значения переменных будут заполняться функциями. В нормальное зимнее время значения равны нулю: время в этот период не смещается.

Далее у нас идут переменные с датой предстоящего перевода часов. Они указывают, когда нужно будет рассчитывать новые значения переменных, чтобы не проводить ненужные расчеты до этого и не тратить вычислительные ресурсы:

datetime nxtSwitch_USD,                         // дата следующего перехода
         nxtSwitch_EUR,                         // дата следующего перехода
         nxtSwitch_AUD,                         // дата следующего перехода
         nxtSwitch_RUB = D'2014.10.26 02:00';   // для России по-другому :(


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

Данная структура и ее глобальная переменная являются сердцем всей программы. :)

struct _OffsetBroker
  {
   int   USwinEUwin,                            // US=Winter & EU=Winter
         USsumEUsum,                            // US=Summer & EU=Summer
         USsumEUwin,                            // US=Summer & EU=Winter
         actOffset,                             // фактическое смещение времени брокера
         secFxWiWi,                             // продолжительность работы рынка в сек
         secFxSuSu,                             // продолжительность работы рынка в сек
         secFxSuWi,                             // продолжительность работы рынка в сек
         actSecFX;                              // фактическая продолжительность работы рынка в сек
   bool  set;                                   // вес установили?
  };
_OffsetBroker OffsetBroker;


Автор: Carl Schreiber

 
Мы готовы представить фактические значения всем нашим торговцам лисами для отображения
 
Мы готовы представить фактическое значение для всех наших лис торговли, чтобы показать
 

Здравствуйте,

Как я понял из статьи, функция "setBokerOffset ()" должна работать и в тестере стратегий, но она не работает.

void OnTick()
  {
//---
   bool isTimeSet = setBokerOffset();
   if(!isTimeSet)
     {
      Alert("setBokerOffset failed");
      return;
     }
  }
array out of range in 'DealingWithTime.mqh' (201,21)


Является ли "Альтернативный вариант использования через входные переменные" единственным способом получить правильное время в тестере стратегий?

 
Nauris Zukas тестере стратегий, но она не работает.


Является ли "Альтернативный вариант использования через входные переменные" единственным способом получить правильное время в тестере стратегий?

Я предполагаю, что в тестере стратегий не были получены котировки, и тогда предыдущая функция CopyTime() не сработала. Проверьте, имеются ли запрашиваемые и необходимые данные в локальном доступе.
 
Carl Schreiber #:
Я предполагаю, что тестер стратегий не получил котировки, и тогда предыдущая функция CopyTime() не сработала. Проверьте, есть ли запрашиваемые и необходимые данные уже локально доступны.

Хорошо, буду внимательнее следить за CopyTime() и постараюсь решить эту проблему.

И спасибо, очень полезная статья!

 
Добротная статья. Правда, возникает одна проблема: как определить, что брокер\дилер переходит с зимнего\летнего, не обращаясь в его техподдержку?
 
Nikita Chernyshov # :
Добротная статья. Правда, возникает одна проблема: как определить, что брокер\дилер переходит с зимнего\летнего, не обращаясь в его техподдержку?
  1. Почему бы не спросить?
  2. Программа знает, когда в США и ЕС летнее/зимнее время, и использует это для расчета смещения брокера.
 
Nikita Chernyshov #:
Добротная статья. Правда, возникает одна проблема: как определить, что брокер\дилер переходит с зимнего\летнего, не обращаясь в его техподдержку?


.
Документация по MQL5: Дата и время / TimeDaylightSavings
Документация по MQL5: Дата и время / TimeDaylightSavings
  • www.mql5.com
TimeDaylightSavings - Дата и время - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov #:


.

да, но зависит от настроек времени пользователя, что не очень хорошо получается. Более того, нужно смоделировать в тестере.

 
Carl Schreiber #:
  1. Почему бы не спросить?
  2. Программа знает, когда в США и ЕС летнее/зимнее время, и использует это для расчета смещения брокера.

1. Потому что поддержка не всегда выдает корректную информацию. Вы сами это указали про дилера Альпари. + это накладно: выяснить у каждого дилера переход. Ведь тогда не получается создать хорошего решения, я не знаю, конечный пользователь у кого обсулживается.

2. Ну, вроде как, да, но вот если дилер не переход с зимнего на летнее и обратно, то получается в расчетах какая-то странная штука.

Я попробовал чутка модифицировать вашу библиотеку, но, видимо, что-то не так пошло. Думал код привести к тому, что советник  автоматически определяет время GMT и торгует именно по GMT, а не по серверу брокера. Не уверен, что код оптимальный, но решение, кажется, работает. Правда, у тех дилеров, что время не меняют - там получаются какие-то неверные расчеты.

Файлы: