Как сделать код внешнего бара (Прайс Экшн)?

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

Как сделать код внешнего бара (Прайс Экшн)?

Сообщение Haos » 17 окт 2016, 20:51

Из определения внешнего бара определим условия его формирования. У нас будет два варианта для бычьего внешнего бара (BuOVB) и медвежьего внешнего бара (BeOVB).
Для определенности рассмотрим внешний бар, сформированный на 1-м и 2-м баре, т.е. на прошлых двух барах для рассматриваемого ТФ. Помним, что отсчет идет справа налево, т.е. прошлый бар имеет индекс - 1, а позапрошлый бар - 2.
1. Бычий внешний бар:
C1 > H2
H1 > H2
L1 < L2
Однако, если мы внимательно посмотрим на второе неравенство, то заметим, что первое неравенство включает его, значит 2-е неравенство можно отбросить. Таким образом, мы получим два условия для внешнего бычьего бара:
C1 > H2
L1 < L2
На рисунке приведенном ниже схематически изображен внешний бычий бар:

Бычий внешний бар.png

Обозначим через
Y1 = L2 - L1 - расстояние между Low обоих баров;
Y2 = C1 - H2 - расстояние между закрытием 1-го бара и верхом 2-го.
Эти два параметра будут определять факт существования рассматриваемого паттерна. Запишем основные неравенства в виде:
С1 - H2 >= e
L2 - L1 >= e
Где е - заданный параметр точности. Очевидно его будем измерять в пунктах. Диапазон значений е: 1, ..., n. n - определяется строгостью к условиям формирования паттерна и зависит от ТФ. В принципе, е = 1 можно выбирать в первом приближении.
Итак, окончательно условия формирования бычьего внешнего бара выглядят так:
С(i) - H(i+1) >= e
L(i+1) - L(i) >= e

i: 1, ..., Bars - 1
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Re: Как сделать код внешнего бара (Прайс Экшн)?

Сообщение Haos » 18 окт 2016, 07:20

1. Медвежий внешний бар:
Аналогично для медвежьего внешнего бара:
C1 < L2
H1 > H2
Вводя параметр точности е получим:
L2 - C1 > e
H1 - H2 > e
И для любого месторасположения (сдвиг баров назад):
L(i+1) - C(i) > e
H(i) - H(i+1) > e

i: 1, ..., Bars - 1
Вложения
Медвежий внешний бар.png
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Re: Как сделать код внешнего бара (Прайс Экшн)?

Сообщение Haos » 18 окт 2016, 07:33

Строго говоря, этих условий не достаточно для определения однозначности сигнального бара. Ведь если цена открытия будет недалеко отстоять от цены закрытия, то по внешнему виду это будет пин-бар:
Бычий внешний бар-1.png

Аналогично и для медвежьего внешнего бара. Поэтому нужно ввести дополнительное условие. Выберем условие такое:
O1 <= M1, где М1 - середина бара
Таким образом,
O1 <= (H1 - L1) * 0,5
Не мешало бы еще и закрытие определить как недалеко отходящее от верха сигнального бара:
C1 >= (H1 - L1) * 0,75
Таким образом, получим условия внешнего бычьего бара:

(1) С1 - H2 >= e
(2) L2 - L1 >= e
(3) O1 <= (H1 - L1) * 0,5
(4) C1 >= (H1 - L1) * 0,75


Для медвежьего внешнего бара:

(1) L2 - C1 > e
(2) H1 - H2 > e
(3) O1 >= (H1 - L1) * 0,5
(4) C1 <= (H1 - L1) * 0,75


Условия 1, 2 - обязательные, а 3 и 4 - дополнительные.
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Re: Как сделать код внешнего бара (Прайс Экшн)?

Сообщение Haos » 18 окт 2016, 07:54

Итак, осталось дело техники - по заданным условиям написать функцию для определения паттерна Внешний бар. Чем и займемся далее.
(продолжение следует)
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Re: Как сделать код внешнего бара (Прайс Экшн)?

Сообщение Nord » 18 окт 2016, 08:02

Спасибо. Отличный материал! Актуальный, наглядно изложен и все по делу.
Аватар пользователя
Nord
Администратор
 
Сообщений: 8112
Зарегистрирован: 17 июл 2013, 15:55
Средств на руках: 193.10 Доллар
Откуда: Украина
Группа: Администраторы
Благодарил (а): 3187 раз.
Поблагодарили: 6752 раз.
Правила форума - залог долгой жизни на форуме!

Re: Как сделать код внешнего бара (Прайс Экшн)?

Сообщение Haos » 18 окт 2016, 10:07

Итак, функция написана:

Код: выделить все
string f_OutsideVerticalBar(int dY, int shi)
{
/*
   условия внешнего бычьего бара:
   (1) С1 - H2 >= dY
   (2) L2 - L1 >= dY
   (3) O1 <= L1 + (H1 - L1) * 0,50
   (4) C1 >= L1 + (H1 - L1) * 0,75
   
   Условия внешнего медвежьего бара:
   (1) L2 - C1 >= dY
   (2) H1 - H2 >= dY
   (3) O1 >= L1 + (H1 - L1) * 0,50
   (4) C1 <= L1 + (H1 - L1) * 0,75
   
   Условия 1, 2 - обязательные, а 3 и 4 - дополнительные.
   
   Параметры:
   dY - допустимая точность (несколько пунктов)
   shi - кол-во баров назад
   
   Возвращаемые значения:
   "BuOVB" - бычий внешний бар
   "BeOVB" - медвежий внешний бар
   "NO" - нет паттерна
*/
   bool  bol_Bu1 = false, bol_Bu2 = false,
         bol_Bu3 = false, bol_Bu4 = false; // 4 бычьих условия
   bool  bol_Be1 = false, bol_Be2 = false,
         bol_Be3 = false, bol_Be4 = false; // 4 медвежьих условия

   double dbl_Bu1 = NormalizeDouble(Close[shi] - High[shi + 1], _Digits);
   double dbl_Bu2 = NormalizeDouble(Low[shi + 1] - Low[shi], _Digits);
   
   double dbl_Be1 = NormalizeDouble(Low[shi + 1] - Close[shi], _Digits);
   double dbl_Be2 = NormalizeDouble(High[shi] - High[shi + 1], _Digits);
   
   double dbl_X3  = NormalizeDouble(Low[shi] + (High[shi] - Low[shi]) * 0.50, _Digits);
   double dbl_X4  = NormalizeDouble(Low[shi] + (High[shi] - Low[shi]) * 0.75, _Digits);
   
   if(dbl_Bu1 >= dY * Point) bol_Bu1 = true;
   if(dbl_Bu2 >= dY * Point) bol_Bu2 = true;
   if(Open[shi]  <= dbl_X3)  bol_Bu3 = true;
   if(Close[shi] >= dbl_X4)  bol_Bu4 = true;
   
   if(dbl_Be1 >= dY * Point) bol_Be1 = true;
   if(dbl_Be2 >= dY * Point) bol_Be2 = true;
   if(Open[shi]  >= dbl_X3)  bol_Be3 = true;
   if(Close[shi] <= dbl_X4)  bol_Be4 = true;
   
   if(bol_Bu1 && bol_Bu2 && bol_Bu3 && bol_Bu4)      return("BuOVB");
   else if(bol_Be1 && bol_Be2 && bol_Be3 && bol_Be4) return("BeOVB");
   
return("NO");
}


Проверка работы функции. Найдем на графике визуально Внешний бар и подсчитаем сколько баров назад он был образован. В данном случае это произошло 10 баров назад. Введем параметр 10 в качестве второго передаваемого в функцию, а точность зададим "1". Прототип советника по ТС на основе тоговой системы с использованием внешнего бара выдаст результат:

Работа функции.png

В левом верхнем углу видно, что паттерн определен как BeOVB, т.е. медвежий внешний бар. Данная разработанная функция будет применяться в этом советнике.
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Re: Как сделать код внешнего бара (Прайс Экшн)?

Сообщение Haos » 18 окт 2016, 10:19

Проверка функции на 23 баре также подтвердила правильность работы. Бычий внешний бар правильно идентифицирован.
Вложения
Работа функции-1.png
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Как сделать код внешнего бара (Прайс Экшн)?

Сообщение serg_panther » 13 дек 2016, 15:08

Ребята приветствую, сам торгую сей паттерн и еще внутренний. но нужна помощь-нужно сделать калькулятор такого типа: указывает лот сколько он-у разных брокеров разно, у кого 100 тысяч базовой валюты, у кого -10 тысяч. далее указываем цену открытия и уровень стопа, или же размер стопа и чтобы нам показало какой лот нужно выбрать. А то вручную считать достаточно сложновато, а в сети путевого калькулятора не нашел, а через что то считать-неудобно. может ли такой индикатор создать? кидаем на инструмент и он считает? к примеру я готов на убыток потратить тысячу рублей, а количество пунктов до стопа -200, вот какой лот мне нужно выставить?
Аватар пользователя
serg_panther
 
Сообщений: 1473
Зарегистрирован: 15 авг 2013, 13:50
Средств на руках: 0.60 Доллар
Награды: 1
Ветеран I (1)
Группа: Базовая
Благодарил (а): 257 раз.
Поблагодарили: 191 раз.

Re: Как сделать код внешнего бара (Прайс Экшн)?

Сообщение Haos » 13 дек 2016, 15:45

Заказ торгового ПО в Столе заказов.
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Как сделать код внешнего бара (Прайс Экшн)?

Сообщение wellx » 29 янв 2017, 11:44

Haos писал(а):Проверка функции на 23 баре также подтвердила правильность работы. Бычий внешний бар правильно идентифицирован.


на 28 баре тоже виден медвежий паттерн, ИМХО

плюс, в ТС можете добавить факт проверки того, что контрольный бар является вершиной для предыдущих 3-4 баров как минимум .

Причем , без строго тренда ( т.е. не обязательно каждый следующий бар выше/ниже предыдущего). Достаточно, что хай/лоу является максимумом для предыдущих 3-4 баров
Аватар пользователя
wellx
 
Сообщений: 1
Зарегистрирован: 29 янв 2017, 10:14
Средств на руках: 0.50 Доллар
Группа: Новые пользователи
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.


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

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

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

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

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

cron