Наши рекомендации:

  1. Главная
  2. Уроки MQL4
  3. 1.3 Дата и время, информация о счете

1.3 Дата и время, информация о счете

1.3 Дата и время, информация о счете

Доброго времени суток.

Сегодня мы разберем, как работать со временем в редакторе Meta Editor, изучим вспомогательные функции для типа данных datetime, а также научимся узнавать основные параметры для вашего торгового счета.

Дата и время

По традиции мы разберем только самые используемые функции, чтобы избежать переизбытка информации в одном посте. За время отвечает тип данные datetime, который является целым типом и хранит информацию о времени, начиная с 01 Января 1970 года, что эквивалентно значению 0 в представлении int. Максимальное значение даты в терминале, судя по справке, достигает 31 Декабря 3000 года.

Дату можно задавать вручную через целое значение int, например:

В таком формате значение храниться на многих сайтах в интернете и в других источниках, это время в секундах с момента его начальной точки отсчета.

Соответственно, раз дату можно использовать как целое число, то к ней можно прибавлять и вычитать время. Попробуем прибавил к дате, что мы задали выше, 12 часов. Для этого умножим часы на 60 минут, а затем еще раз умножим полученное значение на 60 секунд, чтобы преобразовать время в секунды, оно будет равняться 43200.

Время в терминале имеет формат YYMMDD, вручную же оно может задаваться как в таком варианте, так и в привычном нам формате DDMMYY. Вручную время прописывается через заглавную букву D между двумя апострофами: D’01.05.2010 00:00′.

Давайте вначале посмотрим на функции, отвечающие за конкретное время.

  • TimeCurrent() — текущей время брокера, которое отображается в окне обзора рынка. Оно равно последнему известному времени сервера, времени последнего тика и обновления котировок. Как известно, рынок не работает по выходным, соответственно данное значение не обновляется в Субботу и в Воскресенье. Хранится в формате datetime.
  • TimeLocal() — текущее время на вашем компьютере, зависит от настроек оперативной системы. В торговле я его не применяю, но с его помощью можно получить значение GMT вашего брокера с помощью простой математики. Но если честно, это не совсем правильный способ, потому что настройки на рабочем компьютере не всегда корректны, и если есть необходимость получить данные GMT, то лучше воспользоваться нашим скриптом Check Broker GMT.
  • Seconds(), Minute(), Hour(), Day(), Month(), Year() — все перечисленные функции выдают отдельные единицы значений времени от последнего известного времени на сервере брокера: секунды, минуты, час, день, месяц и год. Тип данных у функций int, т.е. они являются целым числом: секунды считаются от 0 до 59, часы от 0 до 23, дни от 1 до 31  и т.д. Параметров у них нет, прописываются пустые скобки (). Нужны эти функции для работы с отдельными показателями, а не со всем значением времени. К примеру вам нужно совершать какое-то действие раз в час, либо ваша торговая система должна открывать сделки строго начиная с 22:15 до 00:00, а может вы хотите прекратить торговлю в 23:00, для этого нужно проверять конкретный час.
  • TimeSeconds(), TimeMinute(), TimeHour(), TimeDay(), TimeMonth(), TimeYear() — эти функции схожи с теми, что рассмотрели выше, но имеют единственное отличие — они выдают значение не по текущему времени сервера, а по конкретному времени: торгового ордера, указанному пользователей вручную, либо какого-то события. К примеру вы хотите знать час конкретного закрытого ордера или минуту созданного объекта. Тип данных также int, параметр один — заданное время.
  • DayOfWeek() — периодически бывает необходимость узнать какой сейчас день недели по времени брокера, для этого и нужна данная функция. Время начинает свой отсчет с Воскресенья (как заведено в западных странах) и приравнивается к нулю. Соответственно Понедельник это 1, Вторник — 2… Суббота — 6. С помощью этой функции можно ограничить торговлю или работу части кода эксперта в определенных день недели.
  • DayOfYear() — функция для определения текущего дня в году по времени сервера. Первое Января это единица, 31 Декабря, соответственно 365( или 366). Я ее использую, чтобы выполнять определенные проверки в коде только раз в день для ускорения его работы.
  • TimeDayOfWeek(), TimeDayOfYear() — функции определения дня недели или дня года для определенного, указанного времени.
Для облегчения работы со временем Метаквоты добавили из терминала Meta Trader 5 возможность использовать структуры даты и времени MqlDateTime. Она имеет вид:
Саму структуру объявлять не нужно, указанный формат выше (восемь полей) уже хранится в терминале. Т.е. часы для hour, минуты min и т.д.. Попробуем разбить нашу пользовательскую дату на формат структуры:
В первой строчке мы назначаем дату, в данном случае наобум. Во второй мы объявляем имя вновь созданной структуре MqlDateTime — str1. Функция TimeToStruct() нужна, чтобы произвести конвертацию времени в переменную типы структуры. Сама структура вызывается через операцию точка (.), т.е. если нужно получить значение часа, то прописывается str1.hour, дня — str1.day и т.д. На моей памяти в MQL4 только структуры используют операцию с точкой, поэтому вы безошибочно сможете определить, что перед вами именно структура. Стоит заметить, что такой способ компоновки данных используется не часто, потому что всегда можно обойтись обычными переменными, просто структура смотрится более интересно с эстетической точки зрения.

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

Информация о счете

При работе с терминалом порой требуется отобразить имя брокера, сервер или номер торгового счета, узнать значение текущего баланса, дохода, маржу или плечо. Эти и другие данные можно узнать через функции определения информации о счете.

Функции типа string:

  • AccountCompany() — функция выводит наименование брокерской компании, где у вас открыт торговый счет.
  • AccountName() — имя пользователя торгового счета.
  • AccountServer() — наименование торгового сервера.
  • AccountCurrency() — валютная пара, которую вы выбрали при открытии торгового счета. От валюты счета зависит стоимость пункта. Функция иногда используется для расчетов в торговле, а также для приписки в комментариях после значения дохода или убытка, потому что ставить вручную знак «$» не совсем корректно, у пользователя может быть открыт счет и в рублях и в тугриках.
Функции типа int:

  • AccountNumber() — номер вашего торгового счета, который назначает брокер при регистрации.
  • AccountLeverage() — значение кредитного плеча на текущем торговом счете. Плечо имеет формат 1:20, 1:100, 1:500 и т.д., это означает, что на каждые 500 долларов вы должны вложить только 1 доллар. Функция выводит информацию именно о допустимом плече не счете, т.е. для привычного отображения в журнале вы должны сами дописать «1:»
Стоит заметить, что не у всех брокеров расчет плеча таким способом ведется корректно, я несколько раз сталкивался с неверными данными, особенно когда брокер меняет плечо перед выходом важных новостей, либо понижает его в связи с ростом баланса счета. Поэтому для точного определения его значения рекомендую вам наш индикатор Check Leverage .

Функции типа double:

  • AccountBalance() — функция возвращает значение текущего баланса торгового счета в валюте депозита, т.е. объем средств, не учитывающий текущие открытые сделки.
  • AccountEquity() — значение средств на текущем счете. Т.е. это значение баланса, который учитывает прибыль или убыток по открытым ордерам.
  • AccountProfit() — суммарная прибыль, либо убыток ваших открытых ордеров. Значение плавающее и меняется каждый тик, если в рынке есть ордера. Для вывода информации в журнал не забывайте приводить формат double в string. (Более подробно я рассказывал в этом уроке). В данном случае все операции, связанные с балансом нужно округлять до 2 знаков после запятой:
  • AccountCredit() — значение кредита на торговом счете. Многие брокеры в это определение включают бонусные средства на счете, которые они начисляют по разнообразным внутренним акциям, например бонус за пополнение счета. Данные средства не учитываются в расчете просадки всего счета и могут сыграть против трейдера. Рекомендую очень внимательно читать описание бонусных программ, перед тем, как соглашаться на их использование. В большинстве случаев это просто замануха и чтобы вывести эти деньги, нужно совершить торговлю огромным суммарным лотом за месяц или год, что при нормальных рисках просто не представляется возможным.
  • AccountMargin() — суммарный залог, который внесен на поддержание уже открытых позиций на счете. Зависит от значения кредитного плеча, валютной пары и т.д.
  • AccountFreeMargin() — функция для определения свободных средств, которые доступны для открытия новых позиций. Вычисляется как разница между балансом счета, прибылью/убытком открытых позиций, а также залогом, что вы отдали на поддержание уже открытых позиций.
Эту и другую информацию о торговом счете можно узнать через дополнительные функции:

  • AccountInfoDouble() — функция возвращает double значение по выбранному идентификатору свойства. Данный параметр выбирается из списка перечислений, туда включены как рассмотренные выше свойства, так и те, для которых нет отдельных функций. Допустим значение баланса мы может получить через функцию AccountBalance, а может воспользоваться данной функцией и свойством ACCOUNT_BALANCE:
  • AccountInfoInteger() — функция также выполняет вывод информации о торговом счете, только в типе данных int. Из новых свойств можно рассмотреть вывод информации о типе торгового счета, их существует три: демо счет (0), конкурсный счет(1) и реальный счет(2). Соответственно по цифре, которую выдаст в журнал принт можно понять тип счета.
Стоит заметить, что тип счета можно узнать и через другую bool  функцию IsDemo(), которая возвращает результат true или falseТакже можно узнать, находится ли советник или индикатор в режиме тестирования или нет.
Точно также двумя способами можно узнать, разрешена ли торговля в терминале с помощью советников. Первая функция вернет цифру 0 или 1, вторая текстовое значение false или true;

Заключение 

Думаю на сегодня хватит информации. Я рекомендую попрактиковаться с помощью скрипта на графике с выводом этих данных в журнал, чтобы частично запомнить эти функции. Без практики никуда. Все указанные выше функции внесены в .mql4 скрипт во вложении.

Советую сохранить наш сайт в закладки, в будущем планируется активное его развитие, появятся новые уроки mql, интересные статьи и полезный программный код.

2 комментария. Оставить новый

  • Иннокентий
    10.10.2020 12:39

    Будут ли уроки по созданию индикатора с нуля?

    Ответить
    • Добрый день. Конечно, вот ссылка на 2 этап курса: http://www.davinci-fx.com/mql-first-indicator/
      Но мы крайне рекомендуем вам проходить каждый урок последовательно, даже если вы думаете, что какие то отдельные разделы вам не интересны.

      Ответить

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения

Меню