Некорректный расчет ГО (из-за новых изменений в риск-параметрах биржи) - страница 4

 
prostotrader #:

Уже несколько лет как говорилось, что эта функция не правильно работает....

С теплицами закончу и попробую открыть демку в Just2Trade и посмотрю, проверю ещё раз.

 
Alexey Viktorov #:

С теплицами закончу и попробую открыть демку в Just2Trade и посмотрю, проверю ещё раз.

Пока, только так правильно работает

//+------------------------------------------------------------------+
//|                                                 CheckSession.mq5 |
//|                                      Copyright 2022 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
//---
input string TimeStMon = "07:00:00";  //Время начала утренней сессии
input string TimeStDay = "14:05:00";  //Время начала дневной сессии
input string TimeStEvn = "19:05:00";  //Время начала вечерней сессии
//---
ulong time_st_mon;
ulong time_st_day;
ulong time_st_evn;
//+------------------------------------------------------------------+
//| Expert Get string time function                                  |
//+------------------------------------------------------------------+
ulong GetStringTime(const string a_string)
{
  int str_size = StringLen(a_string);
  if(str_size == 8)
  {
    int k = StringFind(a_string, ":", 2);
    if(k == 2)
    {
      string s_hour = StringSubstr(a_string, 0, k);
      k = StringFind(a_string, ":", 5);
      if(k == 5)
      {
        string s_min = StringSubstr(a_string, 3, k-3);
        string s_sec = StringSubstr(a_string, 6, str_size - k - 1);
        ulong t_sec = ulong(StringToInteger(s_sec));
        ulong t_min = ulong(StringToInteger(s_min)) * 60;
        ulong t_hour = ulong(StringToInteger(s_hour)) * 3600;
        return(t_hour + t_min + t_sec);
      }
    }
  }
  return(0);
}
//+------------------------------------------------------------------+
//| Expert Check Market Time function                                |
//+------------------------------------------------------------------+
bool CheckMarketTime()
{
  MqlDateTime cur_time, sv_time;
  cur_time.year = 0;
  TimeTradeServer(cur_time);
  if(cur_time.year > 0)
  {
    sv_time.year = 0;
    TimeCurrent(sv_time);
    if(sv_time.year > 0)
    {
      if((cur_time.day_of_week == int(SATURDAY)) ||
         (cur_time.day_of_week == int(SUNDAY))) return(false); //Проверка на выходные
      if(cur_time.day_of_week == sv_time.day_of_week)
      {
        ulong tr_time = sv_time.hour * 3600 + sv_time.min * 60 + sv_time.sec;
        if(((tr_time >= time_st_mon) && (tr_time < 50370)) ||  //10:00:00 - 13:59:30
           ((tr_time >= time_st_day) && (tr_time < 67470)) ||  //14:05:00 - 19:44:30 
           ((tr_time >= time_st_evn) && (tr_time < 85770)))    //19:05:00 - 23:49:30
        {
          return(true);
        }  
      }  
    } 
  }   
  return(false);
}
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
    time_st_mon = GetStringTime(TimeStMon);
    time_st_day = GetStringTime(TimeStDay);
    time_st_evn = GetStringTime(TimeStEvn);
    return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
    if(CheckMarketTime() == true)
    {
      //You code
    }   
  }
//+------------------------------------------------------------------+

Не тратьте время, там все-равно нет состояния сессий

Лучше здесь https://www.mql5.com/ru/forum/408836#comment_35879418

плюсик поставьте...

Новая версия платформы MetaTrader 5 build 3280: Улучшения и исправления по отзывам трейдеров
Новая версия платформы MetaTrader 5 build 3280: Улучшения и исправления по отзывам трейдеров
  • 2022.04.29
  • www.mql5.com
В пятницу 29 апреля 2022 года будет выпущена обновленная версия платформы MetaTrader 5...
 

Михаил, я не знаю как там биржа транслирует, но вот заполнено и получено

Код

#define print(A) Print(#A+" — "+(string)A);

/********************Script program start function*******************/
void OnStart()
 {
  datetime from, to;
  SymbolInfoSessionTrade(_Symbol, FRIDAY, 0, from, to);
  print(from);
  print(to);
  SymbolInfoSessionTrade(_Symbol, FRIDAY, 1, from, to);
  print(from);
  print(to);
 }/******************************************************************/

и вот результат

Повторяю: я не претендую на звание «Знайка», я только пользуюсь тем что доступно. Ваш код безусловно полезный и рабочий, но это не правильно вводить вручную время сессий.

 
Alexey Viktorov #:

Михаил, я не знаю как там биржа транслирует, но вот заполнено и получено

Код

и вот результат

Повторяю: я не претендую на звание «Знайка», я только пользуюсь тем что доступно. Ваш код безусловно полезный и рабочий, но это не правильно вводить вручную время сессий.

Вот об этом я и говорю 4-ый год MQ

 
prostotrader #:

Вот об этом я и говорю 4-ый год MQ

У меня другой вопрос образовался. А зачем так сложно написали преобразование строки во время? Ведь работа со строками очень медленная…

Достаточно получить остаток от деления даты на количество секунд в дне.

//+------------------------------------------------------------------+
//| Expert Get string time function                                  |
//+------------------------------------------------------------------+
ulong GetStringTime(const string a_string)
 {
  if(StringLen(a_string) == 8)
   {
    datetime dt_time = StringToTime(a_string);
    ulong time = dt_time%PeriodSeconds(PERIOD_D1);
    return(time);
   }
  return(0);
 }
 
Alexey Viktorov #:

У меня другой вопрос образовался. А зачем так сложно написали преобразование строки во время? Ведь работа со строками очень медленная…

Достаточно получить остаток от деления даты на количество секунд в дне.

Преобразование строки происходит один раз, при инициализации (время не критично)
Да и написано это 8 лет назад....

 
prostotrader #:

Преобразование строки происходит один раз, при инициализации (время не критично)
Да и написано это 8 лет назад....

Ну тады «ой», я тоже 8 лет назад был не такой умный как сейчас…))) Зато был такой-же как и сейчас в другом плане…

 

Господа, приглянулась мне биржа и уже пора начать

но кое что не понятно!

растолкуйте плиз

Как посчитать - сколько нужно денег на 1 лот и какой минимальный?

Почему сессия по спецификации инструмента заканчивается позднее чем официально, и где взять правильные временные рамки?


 
Renat Akhtyamov #:

Господа, приглянулась мне биржа и уже пора начать

но кое что не понятно!

растолкуйте плиз

Как посчитать - сколько нужно денег на 1 лот и какой минимальный?

Почему сессия по спецификации инструмента заканчивается позднее чем официально, и где взять правильные временные рамки?


Так вот ведь выложена функция

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Некорректный расчет ГО (из-за новых изменений в риск-параметрах биржи)

prostotrader, 2022.04.29 17:35

Пока, только так правильно работает

//+------------------------------------------------------------------+
//|                                                 CheckSession.mq5 |
//|                                      Copyright 2022 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
//---
input string TimeStMon = "07:00:00";  //Время начала утренней сессии
input string TimeStDay = "14:05:00";  //Время начала дневной сессии
input string TimeStEvn = "19:05:00";  //Время начала вечерней сессии
//---
ulong time_st_mon;
ulong time_st_day;
ulong time_st_evn;
//+------------------------------------------------------------------+
//| Expert Get string time function                                  |
//+------------------------------------------------------------------+
ulong GetStringTime(const string a_string)
{
  int str_size = StringLen(a_string);
  if(str_size == 8)
  {
    int k = StringFind(a_string, ":", 2);
    if(k == 2)
    {
      string s_hour = StringSubstr(a_string, 0, k);
      k = StringFind(a_string, ":", 5);
      if(k == 5)
      {
        string s_min = StringSubstr(a_string, 3, k-3);
        string s_sec = StringSubstr(a_string, 6, str_size - k - 1);
        ulong t_sec = ulong(StringToInteger(s_sec));
        ulong t_min = ulong(StringToInteger(s_min)) * 60;
        ulong t_hour = ulong(StringToInteger(s_hour)) * 3600;
        return(t_hour + t_min + t_sec);
      }
    }
  }
  return(0);
}
//+------------------------------------------------------------------+
//| Expert Check Market Time function                                |
//+------------------------------------------------------------------+
bool CheckMarketTime()
{
  MqlDateTime cur_time, sv_time;
  cur_time.year = 0;
  TimeTradeServer(cur_time);
  if(cur_time.year > 0)
  {
    sv_time.year = 0;
    TimeCurrent(sv_time);
    if(sv_time.year > 0)
    {
      if((cur_time.day_of_week == int(SATURDAY)) ||
         (cur_time.day_of_week == int(SUNDAY))) return(false); //Проверка на выходные
      if(cur_time.day_of_week == sv_time.day_of_week)
      {
        ulong tr_time = sv_time.hour * 3600 + sv_time.min * 60 + sv_time.sec;
        if(((tr_time >= time_st_mon) && (tr_time < 50370)) ||  //10:00:00 - 13:59:30
           ((tr_time >= time_st_day) && (tr_time < 67470)) ||  //14:05:00 - 19:44:30 
           ((tr_time >= time_st_evn) && (tr_time < 85770)))    //19:05:00 - 23:49:30
        {
          return(true);
        }  
      }  
    } 
  }   
  return(false);
}
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
    time_st_mon = GetStringTime(TimeStMon);
    time_st_day = GetStringTime(TimeStDay);
    time_st_evn = GetStringTime(TimeStEvn);
    return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
    if(CheckMarketTime() == true)
    {
      //You code
    }   
  }
//+------------------------------------------------------------------+

Не тратьте время, там все-равно нет состояния сессий

Лучше здесь https://www.mql5.com/ru/forum/408836#comment_35879418

плюсик поставьте...


 
Alexey Viktorov #:

Так вот ведь выложена функция


Спасибо, а вот эта инфа откуда?

Не тратьте время, там все-равно нет состояния сессий

Лучше здесь https://www.mql5.com/ru/forum/408836#comment_35879418

плюсик поставьте.

Или это собственное?

/---

И почему так, почему все таки не показана маржа?


Новая версия платформы MetaTrader 5 build 3280: Улучшения и исправления по отзывам трейдеров
Новая версия платформы MetaTrader 5 build 3280: Улучшения и исправления по отзывам трейдеров
  • 2022.04.29
  • www.mql5.com
В пятницу 29 апреля 2022 года будет выпущена обновленная версия платформы MetaTrader 5...
Причина обращения: