Полезные функции и др. в помощь разработчику экспертов

Хранилище собственных творений: индикаторы, скрипты, советники, в общем, все, на что муза вдохновила. Так же полезное ПО, взятое из открытых источников в Интернет.
Бонус за сообщение 0.4$
Ответственный Модератор - Рэндом

Полезные функции и др. в помощь разработчику экспертов

Сообщение Haos » 04 июл 2015, 08:11

mfcoder писал(а):как-то запутанно..
я проще считаю стоимость одного пункта при лоте 1 равна TICKVALUE / TICKSIZE * POINT

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

Re: Полезные функции и др. в помощь разработчику экспертов

Сообщение Рэндом » 04 июл 2015, 08:47

С лотом все просто.
Код: выделить все
TICKVALUE / TICKSIZE * POINT*Lot
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Полезные функции и др. в помощь разработчику экспертов

Сообщение mfcoder » 04 июл 2015, 10:08

Haos писал(а):
mfcoder писал(а):как-то запутанно..
я проще считаю стоимость одного пункта при лоте 1 равна TICKVALUE / TICKSIZE * POINT

О, надо проверять и сравнивать... на слух вообще не понятно с этими тиквэльюмы и тикзайсы, но если все совпадет, то это просто прекрасно будет! :hi_hi_hi: Это ты сам разработал или где-то первоисточник можно почитать?
И главное - мы то не знаем сколько нам лотов надо и считаем это! :hi_hi_hi:


сам, конечно..
Аватар пользователя
mfcoder
 
Сообщений: 1531
Зарегистрирован: 29 июл 2013, 11:55
Средств на руках: 26.85 Доллар
Группа: Базовая
Благодарил (а): 78 раз.
Поблагодарили: 423 раз.

Полезные функции и др. в помощь разработчику экспертов

Сообщение Haos » 04 июл 2015, 13:00

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

Полезные функции и др. в помощь разработчику экспертов

Сообщение Haos » 07 июл 2015, 08:28

В итоге функция расчета торгового лота родилась в таком виде: :-):
Код: выделить все
double f_TradeLot(string sy, double ml, int sl)
{
/*
   функция рассчитывает объем сделки в соответствие с ММ
   Параметры:
   sy - имя торгового инструмента ("0" - текущий торговый символ)
   ml - максимальный убыток на сделку (у.е.)
   sl - величина СЛ в пнт.
*/
   int      intSpred;
   double   dblTickValue,
            dblLotMin,
            dblLotMax,
            Y;
           
   if(sy == "0") sy = Symbol();
   intSpred = (int) MarketInfo(sy, MODE_SPREAD);
   dblLotMin      = MarketInfo(sy, MODE_MINLOT);
   dblLotMax      = MarketInfo(sy, MODE_MAXLOT);
   dblTickValue   = MarketInfo(sy, MODE_TICKVALUE);
   
   Y = ml / ((sl + intSpred) * dblTickValue);
   if(Y < dblLotMin) return(0);
   else if(Y > dblLotMax) return(dblLotMax);
   
return(Y);
}

Передаем в неё :
1. Ну с именем актива - понятно, это классика жанра чтобы можно было не только по текущему активу вычислять.
2. Максимальный убыток допустимый в сделке (по конкретному активу) в валюте депозита. Как мы его подсчитали - дело кода в основной части советника (скрипта), взяли процент от маржи, баланса или средств.
Например, при риске в 1% от депозита 500 у.е. это будет 5 у.е. ну и т.п .
3. Размер СЛ в пунктах - тоже очевидно необходимое значение, так как от него зависит результат убытка в том числе.
Функция учитывает и то, что спред также входит в убыток, т.е. суммируем его к СЛ. Если вычисленный объем лота меньше меньшего, то функция вернет 0. В основном коде можно организовать обработку сообщений по этому поводу и т.п.
Если больше максимального лота, то вернет макс. лот. Округление не происходит, так как это отдельная процедура и может быть организована в отдельной функции (хотя я не встречал чтобы было отличное число знаков от 2 после запятой в размере лота). :-):
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Полезные функции и др. в помощь разработчику экспертов

Сообщение mfcoder » 07 июл 2015, 08:54

Haos писал(а):Где учет текущих котировок? Где учет того, что есть разница для покупки и продажи, так как бид и аск котировки отличаются?


в формуле уже все учтено :-):
Аватар пользователя
mfcoder
 
Сообщений: 1531
Зарегистрирован: 29 июл 2013, 11:55
Средств на руках: 26.85 Доллар
Группа: Базовая
Благодарил (а): 78 раз.
Поблагодарили: 423 раз.

Полезные функции и др. в помощь разработчику экспертов

Сообщение Haos » 07 июл 2015, 11:12

mfcoder писал(а):
Haos писал(а):Где учет текущих котировок? Где учет того, что есть разница для покупки и продажи, так как бид и аск котировки отличаются?

в формуле уже все учтено :-):

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

Полезные функции и др. в помощь разработчику экспертов

Сообщение Haos » 16 июл 2015, 18:31

Функция возвращает суммарный профит (убыток) в валюте депозита позиций, закрытых в текущие торговые сутки (МТ4)
В функции сравнивается время закрытие сделок со временем текущих торговых суток и при совпадении происходит суммирование результата торговли.
Функция не использует сторонних процедур и переменных.
Код: выделить все
double f_GetProfitTodayInCurrency(string sy = "", int op = -1, int mn = -1)
{
/*
   Описание : Суммарный профит (убыток) в валюте депозита позиций, закрытых сегодня                           
   Параметры:                                                               
   sy - наименование инструмента             (""   - любой символ,         
                                                              "0" - текущий символ)       
   op - операция                                 (-1   - любая позиция)       
   mn - MagicNumber                          (-1   - любой магик)         
*/
  double    p = 0;
  int       int_DayX, int_MonthX, int_YearX, int_Day0, int_Month0, int_Year0, i;
  int       k = OrdersHistoryTotal();
 
  int_Day0     = TimeDay(TimeCurrent());
  int_Month0   = TimeMonth(TimeCurrent());
  int_Year0    = TimeYear(TimeCurrent());
   
  if(sy == "0") sy = Symbol();
  for(i = 0; i < k; i++)
  {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    {
      if((OrderSymbol() == sy || sy == "") && (op < 0 || OrderType() == op))
      {
        if(OrderType() == OP_BUY || OrderType() == OP_SELL)
        {
          if(mn < 0 || OrderMagicNumber() == mn)
          {
            datetime t = OrderCloseTime();
            int_DayX    = TimeDay(t);
            int_MonthX  = TimeMonth(t);
            int_YearX   = TimeYear(t);
            if(int_DayX == int_Day0 && int_MonthX == int_Month0 && int_YearX == int_Year0)
            {
               p += OrderProfit() + OrderCommission() + OrderSwap();
            }
          }
        }
      }
    }
  }
return(p);
}
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Полезные функции и др. в помощь разработчику экспертов

Сообщение Haos » 16 июл 2015, 18:35

Функция проверяет факт превышения запланированного процента прибыли текущих торговых суток (МТ4).
Функция использует в вычислениях функцию, расположенную постом выше (f_GetProfitTodayInCurrency).
Код: выделить все
bool f_OverProfitToday(string sy = "", int op = -1, int mn = -1, double pd = 1)
{
/*
   Функция определяет не превышен ли сегодняшний запланированный процент прибыли
   pd - процент от депозита для определения достаточной ежедневной прибыли
   возвращает true - если прибыль достигнута (или превышена)
   false - в обратном случае
*/
   bool     Y = false;
   double   dbl_D0 = 0; // Уровень депозита на начало торговых суток
   double   dbl_PM = 0; // достаточная прибыль в деньгах
   double   dbl_P = f_GetProfitTodayInCurrency(sy, op, mn);
   
   if(dbl_P >= 0)
   {
      dbl_D0 = AccountBalance() - dbl_P;
      dbl_PM = dbl_D0 * pd / 100;       
      if(dbl_P >= dbl_PM) Y = true;
   }

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

Полезные функции и др. в помощь разработчику экспертов

Сообщение Haos » 16 июл 2015, 18:40

Функция проверяет факт превышения максимального заданного процента убытков (МТ4).
Функция использует функцию, выложенную двумя постами выше (f_GetProfitTodayInCurrency).
Код: выделить все
bool f_OverLossToday(string sy = "", int op = -1, int mn = -1, double ld = 1)
{
/*
   Функция определяет не превышен ли сегодняшний максимальный процетнт убытков
   ld - процент от депозита для определения максимального ежедневного убытка
   возвращает true - если этот процент убытков достигнут (или превышен)
   false - в обратном случае
*/
   bool     Y = false;
   double   dbl_D0 = 0; // Уровень депозита на начало торговых суток
   double   dbl_LM = 0; // макс. уровень убытков в деньгах
   double   dbl_P = f_GetProfitTodayInCurrency(sy, op, mn);
   
   if(dbl_P < 0)
   {
      dbl_D0 = AccountBalance() + MathAbs(dbl_P); 
      dbl_LM = dbl_D0 * ld / 100;                 
      if(dbl_P <= - dbl_LM) Y = true;
   }

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


Вернуться в Творческая мастерская

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

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

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

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