Формализация расчета уровней СЛ и ТП в коде

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

Формализация расчета уровней СЛ и ТП в коде

Сообщение Haos » 03 окт 2017, 07:30

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

Рассмотрим функцию для выставления СЛ:
Код: выделить все
double f_SL(string sy, int sl, int ty, double pr)
{
/*
   Описание:
   Функция осуществляет расчет уровня СЛ
   Параметры:
   sy - наименование инструмента   ("0" - текущий символ)
   sl - величина СЛ
   ty - тип ордера
   pr - цена входа или уровень входа (установки ордера)
*/
   if(sy == "0") sy = Symbol();
   int      int_Dig  = (int) MarketInfo(sy, MODE_DIGITS);
   double   dbl_Poi  = MarketInfo(sy, MODE_POINT);
     
   if(sl == 0) return(0);
   if(ty == OP_BUY || ty == OP_BUYLIMIT || ty == OP_BUYSTOP)
   {
      return(NormalizeDouble(pr - sl * dbl_Poi, int_Dig));
   }
   else if(ty == OP_SELL || ty == OP_SELLLIMIT || ty == OP_SELLSTOP)
   {
      return(NormalizeDouble(pr + sl * dbl_Poi, int_Dig));   
   }

return(-1);
}

В качестве параметров в функцию f_SL() передается наименование торгового инструмента ("0" - значит текущий инструмент), величина СЛ в пунктах, тип ордера (все 6 типов ордеров) и цена от которой производится расчет СЛ.
Если в качестве величины СЛ передается ноль, то СЛ отсутствует.

Пример применения в коде:
Код: выделить все
input int      intSL          = 30;    // SL (пнт.);
...
void OnTick()
{
double dblSL;
...
// для покупки:
dblSL = f_SL("0", intSL, OP_BUY, Bid);

}

В качестве внешней переменной задается intSL. В стандартной функции OnTick() вводится переменная типа double и переменной dblSL происходит присвоение значения уровня СЛ, полученного при помощи вызова рассмотренной функции f_SL().

Рассмотрим функцию для выставления ТП:
Код: выделить все
double f_TP(string sy, int tp, int ty, double pr)
{
/*
   Описание:
   Функция осуществляет расчет уровня ТП
   Параметры:
   sy - наименование инструмента   ("0" - текущий символ)
   tp - величина ТП
   ty - тип ордера
   pr - цена входа или уровень входа (установки ордера)
*/
   if(sy == "0") sy = Symbol();
   int      int_Dig  = (int) MarketInfo(sy, MODE_DIGITS);
   double   dbl_Poi  = MarketInfo(sy, MODE_POINT);
     
   if(tp == 0) return(0);
   if(ty == OP_BUY || ty == OP_BUYLIMIT || ty == OP_BUYSTOP)
   {
      return(NormalizeDouble(pr + tp * dbl_Poi, int_Dig));
   }
   else if(ty == OP_SELL || ty == OP_SELLLIMIT || ty == OP_SELLSTOP)
   {
      return(NormalizeDouble(pr - tp * dbl_Poi, int_Dig));   
   }

return(-1);
}

В качестве параметров в функцию f_TP() передается наименование торгового инструмента ("0" - значит текущий инструмент), величина ТП в пунктах, тип ордера (все 6 типов ордеров) и цена от которой производится расчет ТП.
Если в качестве величины ТП передается ноль, то ТП отсутствует.

Пример применения в коде:
Код: выделить все
input int      intTP          = 30;    // ТП (пнт.)
...
void OnTick()
{
double dblTP;
...
// для покупки:
dblTP = f_TP("0", intTP, OP_BUY, Ask);

}

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

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

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

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

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

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

cron