Особенности языка mql5, тонкости и приёмы работы - страница 45

 
Alexey Viktorov:

Может это подойдёт? Хотя на форексе не всегда показывает верно.

она показывает не верное значение, к примеру для SBRF-9.17 время окончания торговой сессии в пятницу == 23:45:00 по данным минутного графика, а эта функция показывает 00:00:00, согласно информации с биржи время окончания вечерней торговой сессии в 23:50

но суть не в этом, можно создать проверки где мы находимся и подставить константами, но может кто уже реализовывал этот функционал, что бы не писать свой собственный велосипед
 
Alexey Viktorov:

никакой зависимости нет и быть не может. Следовательно и специального кода быть не может.

Разработчики не используют ГСЧ в таких делах. Алгоритмы четкие - воспроизводимы.

 
Konstantin:

Как на срочном рынке определить время закрытия рынка прошлого дня в разных вариантах нахождения текущего временного интервала:

1. находимся в интервале субботы - воскресенье, нам нужно время закрытия вечерней торговой сессии пятницы
2. находимся в интервале закрытого рынка понедельник - пятница, нам нужно время закрытия вечерней сессии понедельник - четверг
3. находимся в торговом интервале понедельника, нам нужно время закрытия вечерней торговой сессии пятницы
4. находимся в торговом интервале вторник - пятница, нам нужно время закрытия вечерней сессии понедельник - четверг

Может кто писал подобный функционал, а то не хочется изобретать велосипед ))

наверное кроме констант гибче не придумать:

/*!
   \brief   Расчет конечной даты запроса
*/
datetime CVolumeCluster::CalcStopDate(void) {
   MqlDateTime _date;
   datetime _time_t = TimeTradeServer(_date);

   if(_date.hour == 23 && _date.min >= 44) {          // определяем время окончания торговой сессии
      _date.hour = 23;
      _date.min  = 44;
      _date.sec  = 59;
      _time_t    = StructToTime(_date);
   } else {
      TimeToStruct(_time_t - 86400, _date);
      _date.hour = 23;
      _date.min  = 44;
      _date.sec  = 59;
      if(_date.day_of_week == 0 || _date.day_of_week == 6)
         _date.day_of_week = 5;
      _time_t = StructToTime(_date);
   }
//---
   return _time_t;
}
 

подскажите кто работает с классом CCanvas, как сделать обновление графической метки менее ресурсоемкое, к примеру имеем несколько сот тысяч линий в графической метке, при изменении размеров приходится по новой прорисовывать каждую линию в графической метке, т.к. без прорисовки простым изменением размеров, линии на чарте не отображаются, хотя сам объект графической метки размеры меняет

 
Konstantin:

наверное кроме констант гибче не придумать:

А так не проще?

/********************Script program start function*******************/
void OnStart()
{
 datetime timeArray[1], barArray[1];
 CopyTime(_Symbol, PERIOD_D1, 0, 1, timeArray);
 CopyTime(_Symbol, PERIOD_M1, timeArray[0]-1, 1, barArray);
 Print(barArray[0];
}/*******************************************************************/
 
Alexey Viktorov:

А так не проще?

 CopyTime(_Symbol, PERIOD_D1, 0, 1, timeArray);              // время текущего дня 00:00:00
 CopyTime(_Symbol, PERIOD_M1, timeArray[0]-1, 1, barArray);  // время открытия - 1 секунду

результат в принципе верный )) спс

 
Теперь (1626) не пашет

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

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2017.05.05 23:48

// Возвращает текущее количество объектов классов
int GetAmountObjects( void )
{
  const class CLASS_TMP {} Tmp;
  
  return((int)::StringFormat("%d", &Tmp) - 1);
}
Пример применения
int OnInit()
{
  if (GetAmountObjects() > 0)
    Print("До " + __FUNCSIG__ + " были вызваны конструкторы!");

  return(INIT_SUCCEEDED);
}
 
// Советник возвращает полностью сформированные торговые запросы (включая ручные)
#define TOSTRING(A)  #A + " = " + (string)(A) + "\n"
#define TOSTRING2(A) #A + " = " + EnumToString(A) + " (" + (string)(A) + ")\n"

string ToString( const MqlTradeRequest &Request )
{
  return(TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) +
         TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) + 
         TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) +  TOSTRING(Request.tp) + 
         TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) +
         TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) +
         TOSTRING(Request.position) + TOSTRING(Request.position_by));
}

void OnTradeTransaction(   const MqlTradeTransaction&, const MqlTradeRequest& Request, const MqlTradeResult& )
{
  if (Request.action)
    Print(ToString(Request));
}

Если возникает проблема с тем же Filling, запустите этот советник и создайте нужный вам ордер вручную (F9 в терминале). Сформированный торговый запрос будет распечатан советником.

К сожалению, на реальных счетах это сделать проблематично. Предложение разработчики отклонили.

 
fxsaber:

Если возникает проблема с тем же Filling, запустите этот советник и создайте нужный вам ордер вручную (F9 в терминале). Сформированный торговый запрос будет распечатан советником.

Не хватает только примера работы

 
Rashid Umarov:

Не хватает только примера работы

Вручную выставляем


Получаем в логе сформированный торговый запрос

Request.action = TRADE_ACTION_PENDING (5)
Request.magic = 0
Request.order = 157092716
Request.symbol = EURUSD
Request.volume = 0.01
Request.price = 1.13941
Request.stoplimit = 0.0
Request.sl = 1.13926
Request.tp = 1.13955
Request.deviation = 0
Request.type = ORDER_TYPE_BUY_LIMIT (2)
Request.type_filling = ORDER_FILLING_RETURN (2)
Request.type_time = ORDER_TIME_SPECIFIED (2)
Request.expiration = 2017.07.11 12:08:00
Request.comment = 
Request.position = 0
Request.position_by = 0
Для реала это, к сожалению, очень накладно. Поэтому и выходил с предложением.
Причина обращения: