Contents:
На первый взгляд может показаться, что функция OrderSend() слишком сложна для понимания. В действительности, все рассматриваемые параметры достаточно просты, необходимы и полезно используются в торговле. Для того чтобы в этом убедиться, рассмотрим наиболее простой вариант использования торговой функции OrderSend() для открытия рыночного ордера. В связи с использованием торговых функций необходимо обратить внимание на ограничения более общего характера.
- В ней нам не нужно вводить никаких дополнительных параметров.
- Далее, при помощи команды Comment(), выведем данную переменную на график.
- Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах.
- Последняя часть комментария может быть изменена торговым сервером.
- Однако после присоединения скрипта в окно Eur/Usd ожидаемого открытия ордера в окне Gbp/Usd не происходит.
Используется при проверке https://broker-obzor.com/ клиента при входе в рынок. Рассмотрим и некоторые другие наиболее распространённые ошибки. Для этого вернёмся к идее открытия ордера с помощью скрипта в том окне, в которое присоединён скрипт. В MQL4 есть одна очень важная возможность – программно определить в окне финансового инструмента координаты места, на которое был установлен эксперт или скрипт, если они присоединены с помощью мыши. Например, используя функцию WindowPriceOnDropped() можно получить значение прикрепления скрипта по оси ординат. Исполнение оператора return приводит к выходу из функции start() и, как следствие, к окончанию исполнения программы (напомним, что скрипты после исполнения заканчивают работу) – управление возвращается клиентскому терминалу.
Идентификаторы функции MarketInfo()
В дальнейшем все возникающие ошибки мы будем идентифицировать по этому коду. Запустим скрипт в том же окне финансового инструмента Eur/Usd. По замыслу, скрипт должен открыть ордер в окне Gbp/Usd. Однако после присоединения скрипта в окно Eur/Usd ожидаемого открытия ордера в окне Gbp/Usd не происходит. Для рыночных ордеров всегда проверяется достаточность свободных средств на счёте.
- Мы в команду Comment() вставляем MarketInfo(), и в скобочках этой функции прописываем тот инструмент, по которому хотим видеть информацию.
- Предположим, что при первом исполнении (на быстром рынке) это значение установлено на сервере равным 20 пунктов.
- Предположим, что обычно минимальная дистанция составляет 5 пунктов.
- В этом случае при попытке задать ненулевое значение параметра торговый приказ будет отклонён.
- Но, на прямую прописывать этот валютный инструмент мы не будем, а сделаем возможность вводить наименование валютной пары во входящих значениях советника.
Значение будет верным только в случае, если эксперт или скрипт перемещены с помощью мыши (технология “drag and drop”). Для пользовательских индикаторов это значение не определено. При изменении текущего курса изменилось суммарное значение прибыли по открытым ордерам (разница составляет 8.00). Для того чтобы предоставить в распоряжение пользователя (и, что не менее важно, в распоряжение программы) информацию о событиях, связанных с исполнением торгового приказа, необходимо выполнить обработку ошибок. Клиентский терминал произвёл проверку полученного торгового приказа, не обнаружил некорректных параметров и отправил торговый приказ на сервер.
Функция GetLastError()
В качестве второго параметра этих функций допустимо передавать один из идентификаторов из перечислений ENUM_SYMBOL_INFO_INTEGER, ENUM_SYMBOL_INFO_DOUBLE и ENUM_SYMBOL_INFO_STRING соответственно. Но, на прямую прописывать этот валютный инструмент мы не будем, а сделаем возможность вводить наименование валютной пары во входящих значениях советника. Функция MarketInfo() будет искать максимальную дневную цену на паре Евро/Доллар, которую мы прописали сами. Но, мы может не прописывать валютную пару, а вместо нее поставить Symbol(). Тогда Symbol() проанализирует наш график и ту валютную пару, которая отображается на данном графике, после чего сама подставит наименование этого валютного инструмента. Она просто возвращает наименование того валютного инструмента, на котором у нас стоит график.
Устанавливается в соответствии с ограничениями, принятыми для проведения торговых операций (см.Характеристики ордеров, Требования и ограничения торговых операций). Stoploss – заявленная цена закрытия, определяющая предельный уровень убыточности. Slippage – максимально допустимое отклонение заявленной цены открытия ордера от рыночной цены для рыночных ордеров (пунктов).
Переменной Error присваивается код последней ошибки, в данном случае той ошибки, которая была возвращена сервером или клиентским терминалом при исполнении торговой функции OrderSend(). Существуют и другие ограничения, связанные с определением значений параметров функции открытия ордера OrderSend(). Это – максимальный и минимальный шаг изменения стоимости ордера, максимальный и минимальный размер стоимости ордера и пр. Использование функции MarketInfo() позволяет получить различную информацию по финансовым инструментам, которые отражены в окне “Обзор рынка” клиентского терминала.
Если же возникла ошибка “нет цен” (ошибка 136), то нет смысла сразу снова отправлять торговый приказ на сервер. В этом случае необходимо дождаться нового тика (на сервере в этот период тоже нет цен) и только после этого произвести ещё одну попытку открытия ордера. Поэтому в блоке обработки ошибки 136 имеется цикл задержки, который будет прерван в результате поступления нового тика. Выход из оператора switch() осуществляется с помощью оператора continue, который прекращает текущую итерацию цикла while () и начинает новую.
Таким образом, значения некоторых параметров могут быть изменены в любой момент. В некоторых дилинговых центрах при соблюдении того же общего порядка стоимостные показатели для некоторых финансовых инструментов могут отличаться. Например, стоимость лота и стоимость 1 пункта может быть пропорционально увеличена или уменьшена. Например, для GBP/USD этот коэффициент составляет 0.75, а для AUD/USD составляет 2.0. Такое представление стоимостных показателей не приводит ни к каким экономическим последствиям; в таких случаях нужно просто учитывать эту особенность при расчёте стоимости ордера. Обратите внимание также на особенность стоимости лотов для покупки и продажи активов кросс-курсов – они совпадают.
Функция MQL4 — MarketInfo();
Разумеется, прежде чем пhttps://ctfd-forex.broker-obzor.com/тупить к реальной торговле, необходимо определить метод расчёта, используемый в конкретном дилинговом центре, и при составлении программ его обязательно учитывать. Может использоваться как определяемый пользователем идентификатор ордера. В некоторых случаях это – единственная информация, по которой можно судить о принадлежности ордера к той или иной открывшей его программе. Параметр устанавливается пользователем, может совпадать или не совпадать со значением этого же параметра других ордеров. Если такая ошибка возникла, то программа просто сообщит о ней пользователю и прекратит работу.
К внутренним причинам относятся любые нарушения требований языка MQL4 или правил торговли, например, использование неправильных цен, а к внешним – причины, не связанные с прикладной программой, например, проблемы со связью. На некоторых торговых серверах может быть установлен лимит на общее количество открытых и отложенных ордеров. При превышении этого лимита любой торговый приказ, предполагающий открытие рыночного или установку отложенного ордера, будет отклонён торговым сервером.
При наступлении этого срока отложенный ордер будет автоматически закрыт на торговом сервере. На некоторых торговых серверах может быть установлен запрет на применение срока истечения отложенных ордеров. В этом случае при попытке задать ненулевое значение параметра торговый приказ будет отклонён.
Migrating from MQL4 to MQL5
В первом операторе switch блока 8-9 рассматриваются преодолимые ошибки. Каждая из ошибок этой группы обрабатывается по-своему. Например, если изменилась цена (ошибка 135), то достаточно просто обновить параметры окружения с помощью RefreshRates() и повторить попытку открытия ордера.
Каждое новое значение будет выводится с новой строки, для этого применим специальный символ переноса на новую строку — «\n». В представленном примере имеется также небольшая алгоритмическая ошибка, которая не может быть обнаружена ни на этапе компиляции, ни в клиентском терминале, ни на сервере. Type – идентификатор запроса, определяющий тип возвращаемой информации. Может быть любым из значений идентификаторов запроса (см. Идентификаторы функции MarketInfo). Сервер исполнил торговый приказ, произведя транзакцию в своей базе данных, и отправил сведения об исполненном приказе торговому терминалу.
Константа Значение ОписаниеMODE_LOW 1 Минимальная дневная ценаMODE_HIGH 2 Максимальная дневная ценаMODE_TIME 5 Время поступления последней котировкиMODE_BID 9 Последняя поступившая цена предложения. Для текущего инструмента хранится в предопределенной переменной BidMODE_ASK 10 Последняя поступившая цена продажи. Для текущего инструмента хранится в предопределенной переменной AskMODE_POINT 11 Размер пункта в валюте котировки. Для текущего инструмента хранится в предопределенной переменной PointMODE_DIGITS 12 Количество цифр после десятичного точки в цене инструмента.
Открытие и установка ордеров
Легко заметить, что формирование торгового приказа осуществляется в блоке 6-7. В предшествующем блоке 3-4 вычисляется количество лотов. Учитывается вариант, при котором выделенных свободных средств не хватит для открытия ордера даже на минимальное количество лотов.