Границы диапазона. Какую цену (Ask / Bid) использовать?

Программирование прибыли: от азов к секретам мастерства. Читайте, спрашивайте, делитесь опытом.
Бонус за сообщение 0.5$
Ответственный Модератор - Haos

Границы диапазона. Какую цену (Ask / Bid) использовать?

Сообщение Haos » 18 янв 2021, 07:28

При разработке советника по ТС "Колобок" (мод. трин), (см. тему Создание советника по ТС "Колобок" (мод. трин)) мы столкнулись с ситуацией, когда нам необходимо было писать условия для достижения ценою границ диапазона. Данная необходимость может возникать при разрабоке кода довольно часто, т.к. многие торговые системы основаны на торговле от границ коробки (диапазона, области и т.п.). Поэтому нужно попыться формализовать подход к реализации программного кода для данной ситуации.

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

Будем обозначать верхнюю границу диапазона как dblYh ("h" на конце от слова High - верхний), а нижнюю границу диапазона как dblYl ("l" на конце от слова Low - нижний (индекс)).
Очевидно, что речь идет о ценовом уровне, т.е. например, для EURUSD на текущий момент это могут быть значения:
dblYh = 1.2139;
dblYl = 1.1936.

Рассмотрим сначала две ситуации при достижении ценою верхней границы диапазона.

1. При достижении ценою верхней границы диапазона нам необходимо сформировать покупку (открыть сделку на покупку).
Другими словами это условие можно высказать так: "если цена стала больше либо равна dblYh, то Buy".
Цена у нас может быть или Ask или Bid, т.к. есть спред и он, вообще говоря, не равен нулю. Если же он равен нулю, то описанная ниже дилемма не возникает. Так вот, какую цену мы должны выбрать: Ask или Bid?

Поскольку речь идет о покупке, то мы должны работать с Ask, т.к. покупка идет по цене Ask.

Таким образом, мы имеем более определенное условие: "если Ask >= dblYh, то Buy". Остается перенести это на MQL.
Код: выделить все
if(Ask >= dblYh) // ... процедура открытия покупки

Данный пример подробно использован при разработке советника по ТС "Колобок" (мод. трин) см. ссылку в начале темы.

2. При достижении ценою верхней границы диапазона нам необходимо сформировать продажу (открыть сделку на продажу).
Продажа осуществляется по цене Bid.

Таким образом, мы имеем условие: "если Bid >= dblYh, то Sell". Остается перенести это на MQL.
Код: выделить все
if(Bid >= dblYh) // ... процедура открытия продажи


Рассмотрим теперь две ситуации при достижении ценою нижней границы диапазона.

1. При достижении ценою нижней границы диапазона нам необходимо сформировать покупку (открыть сделку на покупку).
Покупка осуществляется по цене Ask. Поскольку цена подходит сверху вниз к нижней границе диапазона, то достижение границы будет истиной при равенстве или более меньшем значении Ask чем dblYl.
Код: выделить все
if(Ask <= dblYl) // ... процедура открытия покупки


2. При достижении ценою нижней границы диапазона нам необходимо сформировать продажу (открыть сделку на продажу).
Продажа осуществляется по цене Bid.
Код: выделить все
if(Bid <= dblYl) // ... процедура открытия продажи

Почему мы не используем строгое равенство "=" во всех рассмотренных четырех случаях? Да потому, что

1. Цена может проскочить гэпом (даже небольшим, которые довольно часты) точное значение границы диапазона.

2. Советник может не перехватить событие на тике, когда цена проходит границу диапазона. Это запросто может быть. Всегда лучше исходить из правила более грубого условия, мы же работаем с деньгами и если сделка не откроется, то могут быть проблемы. Поэтому нужно обезопасить себя от этой ситуации по максимуму. Условия ">" или "<" позволят программе открыть сделку на одном из следующих тиков даже если цена проскочит точное значение границы диапазона.

Итак, мы рассмотрели правила открытия сделок при достижении ценою границ диапазона. Данный подход позволяет нам всегда понимать почему мы используем Ask или Bid в программном коде в совокупности с условием больше либо равно ">=" или меньше либо равно "<=".
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 19868
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 963.90 Доллар
Группа: Главные модераторы
Благодарил (а): 2792 раз.
Поблагодарили: 7364 раз.

Вернуться в MQL – теория и практика

Кто сейчас на форуме?

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32

Права доступа к форуму

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения