Как использовать Параболик (SAR) в советнике?

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

Как использовать Параболик (SAR) в советнике?

Сообщение Haos » 11 авг 2016, 09:13

Обычно Параболик используется в двух целях в коде советников:
1. Для определения сигнала (на вход в рынок);
2. Для определения тренда;
Рассмотрим сначала применение Параболика для определения сигнала на вход в рынок. Речь идет о смене местоположения точки на графике. Например, точка была ниже цены, а становится выше или наоборот - была выше, а стала ниже (см. рис. ниже).
01.png

Для этого я использую заранее написанный мною код, оформленный в отдельную функцию (чтобы легко можно было использовать в новых советниках):
Код: выделить все
string f_SARSyg(double ste, double max, int shi)
{
/* Первая точка SAR (Параболика) выше (ниже) цены на основе двух баров (shi и shi + 1)
   Параметры:
   ste   - шаг увеличения скорости - ускорение
   max   - максимальный коэффициент следования за ценой
   shi     - кол-во баров назад
   Возвращаемые значения:
   сигнал на покупку - "UP"
   сигнал на продажу - "DN"
   нет сигнала - "NO"                                                 
*/
   double   dblSAR_1 = iSAR("0", 0, ste, max, shi + 1),
            dblSAR_0 = iSAR("0", 0, ste, max, shi);

   if(dblSAR_1 > Low[shi + 1] && dblSAR_0 < High[shi]) return("UP");
   if(dblSAR_1 < High[shi +1] && dblSAR_0 > Low[shi]) return("DN");
     
return("NO");
}

Это функция f_SARSyg типа string, которая возвращает три значения ("UP", "DN", "NO"). Таким образом, если точка Параболика сменила свое положение сверху-вниз, то это сигнал "UP"; снизу-вверх - "DN". Если смены положения точки не было, то - "NO".
В качестве параметров, которые передаются в функцию f_SARSyg используются три параметра, два из которых определены самим Параболиком (шаг увеличения скорости и максимальный коэффициент следования за ценой), а третий - количество баров назад для поиска сигнала. Т.е. код дает возможность анализировать появление сигнала от смены местоположения точки индикатора Параболик не только на последнем баре, но и на любое допустимое кол-во баров назад. Функция рассчитывает значение индикатора Параболик на указанном номере бара и предыдущим. Сравнение происходит с максимальным и минимальным значением для рассчитываемых двух баров.
Итак, мы рассмотрели применение индикатора Параболик в коде эксперта для получения сигнала на вход в рынок. Использование индикатора Параболик для определения тренда будет рассмотрено далее.
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Re: Как использовать Параболик (SAR) в советнике?

Сообщение Haos » 15 авг 2016, 17:29

Теперь рассмотрим применение Параболика в коде эксперта для определения тренда. Определить тренд по Параболику не сложно. Для этого нужно проанализировать положение одной точки на указанном баре - находится ли она ниже (бычий тренд) или выше (медвежий тренд) графика цены. В функции, приведенной ниже, определяется тренд на указанном баре (параметр shi). По-прежнему возвращаемым значением будет символьный код в виде:
"UP" - тренд на покупку
"DN" - тренд на продажу
"NO" - нет сигнала
Код: выделить все
string f_SARTrend(double ste, double max, int shi)
{
/*
   Тренд по SAR (Параболик) на основе указанного (shi) бара - точка выше (ниже) цены.
   Параметры:
   ste   - шаг увеличения скорости - ускорение
   max   - максимальный коэффициент следования за ценой
   shi     - кол-во баров назад
   Возвращаемые значения:
   тренд на покупку - "UP"
   тренд на продажу - "DN"
   нет сигнала - "NO"                                                 
*/
   double   dblSAR = iSAR("0", 0, ste, max, shi);

   if(dblSAR > Low[shi + 1]) return("DN");
   if(dblSAR < High[shi + 1]) return("UP");
     
return("NO");
}

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

Как использовать Параболик (SAR) в советнике?

Сообщение Haos » 28 окт 2017, 12:14

Трал по Параболику (SAR)

Прежде всего, нужно определиться каковы условия удачного выставления трала по Параболику.

00.png

1. Есть уже открытая позиция (позиции). У позиции может быть как СЛ равный нулю, так и не равный нулю.

2.1 Рассмотрим позицию на покупку и Параболик ниже цены. Обозначим значение уже имеющегося у позиции СЛ как СЛ1, а значение СЛ, который должен быть инициирован на текущем баре как СЛ0. Сначала получим значение Параболика на текущем баре, обозначим его SAR0. Для модификации СЛ по Параболику для сделки на покупку необходимо выполнение следующих условий:
- СЛ1 < СЛ0 (какой смысл делать СЛ больше чем уже есть?);
- Bid - StopLevel > SAR0 (разница между ценой Bid и уровнем минимального расстояние до СЛ (StopLevel) должна быть больше чем значение Параболика на текущем баре, т.е. если точка Параболика получилась ближе к цене чем минимально допустимое расстояние до СЛ, то мы не можем поставить там СЛ. Если не можем - то и не ставим (ждем, например, когда сможем на текущем баре или на следующем).
Вот после соблюдения этих условий можно модифицировать СЛ сделки на покупку.

2.2 Рассмотрим позицию на продажу и Параболик выше цены. Обозначим значение уже имеющегося у позиции СЛ как СЛ1, а значение СЛ, который должен быть инициирован на текущем баре как СЛ0. Сначала получим значение Параболика на текущем баре, обозначим его SAR0. Для модификации СЛ по Параболику для сделки на покупку необходимо выполнение следующих условий:
- СЛ1 > СЛ0 (какой смысл делать СЛ больше чем уже есть?);
- Ask + StopLevel < SAR0 (величина минимального отступа (StopLevel) от Ask не должна быть больше чем значение Параболика на текущем баре, т.е. если точка Параболика получилась ближе к цене чем минимально допустимое расстояние до СЛ, то мы не можем поставить там СЛ. Если не можем - то и не ставим (ждем, например, когда сможем на текущем баре или на следующем).
Вот после соблюдения этих условий можно модифицировать СЛ сделки на продажу.

Далее приведен код функции, осуществляющей трал по Параболику.

Код: выделить все
void f_SARTrall(int op, int mn, double pste, double pmax, int offs)
{
/*
   Описание: изменение СЛ позиции на очередном баре по значению Параболика
   Используются функции: f__ModifyOrder()
   pste - шаг изменения цены - коэффициент ускорения (Параболик)
   pmax - максимальный шаг (Параболик)
   offs - отступ от точки Пабалика при установке СЛ (пнт.)
*/
   double dbl_SL1, dbl_SAR0;
   double dbl_SL0;
   double dbl_StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL) * Point;

   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if((OrderSymbol() == _Symbol) && (op < 0 || OrderType() == op))
         {
            if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {       
               if(mn < 0 || OrderMagicNumber() == mn)   
               {           
                  dbl_SL1 = OrderStopLoss(); // уже установленный у сделки СЛ (может и 0 быть)
                  dbl_SAR0 = iSAR(NULL, 0, pste, pmax, 0);
         
                  if(OrderType() == OP_BUY)
                  {
                     dbl_SL0 = dbl_SAR0 - offs * _Point;
                     if((dbl_SL1 < dbl_SL0) && (Bid - dbl_StopLevel > dbl_SAR0)) 
                     {                   
                        if(f__ModifyOrder(OrderTicket(), dbl_SL0, -1))
                        {
                           Print(Symbol(), " Modify Trailing ok");         
                        }
                        else Print(Symbol(), " Modify Trailing fail");
                     }
                   }
                   if(OrderType() == OP_SELL)
                   {
                      dbl_SL0 = dbl_SAR0 + offs * _Point;
                      if(((dbl_SL1 > dbl_SL0) || dbl_SL1 == 0) && (Ask + dbl_StopLevel < dbl_SAR0))
                      {
                         if(f__ModifyOrder(OrderTicket(), dbl_SL0, -1))
                         {
                            Print(Symbol(), " Modify Trailing ok");         
                         }
                         else Print(Symbol(), " Modify Trailing fail");
                      }
                   }
               }
            }
         }
      }
   }
}

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

Как использовать Параболик (SAR) в советнике?

Сообщение Haos » 28 окт 2017, 12:20

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


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

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

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

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

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

cron