Сервисы. Уже работают? - страница 21

 

Renat, будет ли возможность в сервисе реализовывать кастомный стакан?
В документации говориться, что обработчик OnBookEvent вызывается в индикаторах и экспертах.
А как же сервисы? Как запустить стаканы в сервисе? 
Хотелось бы иметь возможность запускать свои кастомные стаканы, в сервисе.
По вашим словам сервисы не поддерживают других обработчиков кроме OnStart, и это становиться проблемой.
Дело в том, что сервисы обрабатываются гораздо быстрее системного OnTimer в индикаторах и экспертах.
И для построения кастомных стаканов лучше использовать сервисы.

p.s.
Почитал ветку, удивлен что маститые програмеры не могут найти применение сервисам.
Сервисы это крутая штука, в которых можно реализовать многое чего, вплоть до асинхронного выполнения всего проекта, раскидав логику задач по сервисам.  
Но более логичнее было бы лучше, добавить в язык функцию Thread(params), которая бы реализовывала распараллеливание потоков, для переданных аргументов в функции.
Ну а если будут потоки, то с ними рядом идут и процессы, в виде функции Process(params). 

Одно из важных преимуществ, сервис обрабатывается быстрее системного времени, т.е. обрабатывается всего за 1мс, а возможно и меньше.
Так как я принудительно в цикле While() поставил ограничение Sleep(1).
А системный OnTimer() с событием EventSetMillisecondTimer(1), в экспертах и индикаторах обрабатывается за ~ 20мс.
Не хилый такой себе прирост в сервисах, по производительности обработки.
Печально, что в сервисе не поддерживаются обработчики экспертов, что сильно ограничивает в возможных решениях.
Как то давно пользователи просили реализовать запуск экспертов без графиков, сервисы как раз бы решали эту задачу.
Судя по кнопке "Автоматическая торговля" в меню сервиса, возможность торговли есть.
Но с одним обработчиком OnStart не построишь полноценное торговое решение.

 
fxsaber:

Действительно, очень удобно.

Перезагрузил комп и забыл про RAMDrive. Запускаю MT5, а он сразу сообщает о проблеме.

А не проще исользовать RamDisk с функциями automount + junction + dynamic allocation?
При старте ПК автоматом все монтирует и линкует, а если на диске не достаточно места то и его самостоятельно добавит из оперативки.

 
Sergey Dzyublik:

А не проще исользовать RamDisk с функциями automount + junction + dynamic allocation?
При старте ПК автоматом все монтирует и линкует, а если на диске не достаточно места то и его самостоятельно добавит из оперативки.

Не всегда нужен, поэтому создание пи старте не делал.

 

При перезагрузке Терминал любит менять свойства кастомных символов. Например, его валюты.

Здесь могут прийти на выручку Сервисы. При запуске исправляют самовольное поведение Тестера.

 
Подскажите, как из программы сервис, можно вывести коммент на активный график?
Да и вообще, можно ли любую другую графику выводить?

//+------------------------------------------------------------------+
//| Service program start function                                   |
//+------------------------------------------------------------------+

int OnStart()
{
   Comment("text");

   return(0);
}
 

Отвечаю сам себе ))

int OnStart()
{
   ChartCommentSet("Hello Service", ChartFirst());
   
   
   return(0);
}

//+------------------------------------------------------------------+ 
//| Функция устанавливает текст комментария в левом верхнем углу     | 
//| графика.                                                         | 
//+------------------------------------------------------------------+ 
bool ChartCommentSet(const string str, const long chart_ID=0) 
{ 
   //сбросим значение ошибки 
   ResetLastError(); 
   
   //установим значение свойства 
   if(!ChartSetString(chart_ID, CHART_COMMENT, str)) 
   { 
      //выведем сообщение об ошибке в журнал "Эксперты" 
      Print(__FUNCTION__+", Error Code = ", GetLastError()); 
      return(false); 
   } 
   
   //успешное выполнение 
   return(true); 
}
 
 Как запустить сервис из советника ?
 
Roman:

Отвечаю сам себе ))

да- всё пишет в левом верхнем углу

//+------------------------------------------------------------------+
//| Service program start function                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   ChartCommentSet("Hello Service", ChartFirst());


   return;
  }
//+------------------------------------------------------------------+
//| Функция устанавливает текст комментария в левом верхнем углу     |
//| графика.                                                         |
//+------------------------------------------------------------------+
bool ChartCommentSet(const string str, const long chart_ID=0)
  {
//сбросим значение ошибки
   ResetLastError();

//установим значение свойства
   if(!ChartSetString(chart_ID, CHART_COMMENT, str))
     {
      //выведем сообщение об ошибке в журнал "Эксперты"
      Print(__FUNCTION__+", Error Code = ", GetLastError());
      return(false);
     }

//успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+

Снимок

 
fxsaber:

При перезагрузке Терминал любит менять свойства кастомных символов. Например, его валюты.

Здесь могут прийти на выручку Сервисы. При запуске исправляют самовольное поведение Тестера.

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

Пользовательские символы. Ошибки, баги, вопросы, предложения.

fxsaber, 2019.09.15 22:30

Решение проблемы автоматического изменения валют кастомного символа после перезагрузки Терминала.

// Сервис корректирует валюты всех кастомных символов.
#property service

bool CorrectCurrency( const string Symb, const string Currency )
{  
  return(SymbolInfoInteger(Symb, SYMBOL_CUSTOM) && 
         CustomSymbolSetString(Symb, SYMBOL_CURRENCY_BASE, Currency) &&
         CustomSymbolSetString(Symb, SYMBOL_CURRENCY_MARGIN, Currency) &&
         CustomSymbolSetString(Symb, SYMBOL_CURRENCY_PROFIT, Currency));
}

void CorrectSymbols( void )
{
  const string Currency = AccountInfoString(ACCOUNT_CURRENCY);
  
  for (int i = SymbolsTotal(false) - 1; i >= 0; i--)
    CorrectCurrency(SymbolName(i, false), Currency);
    
  return;
}

void OnStart()
{
  CorrectSymbols();
}
 

Добавьте в сервисы возможность запуска автооптимизации советников.

Ну и функционал различный например чтобы можно было узнать что оптимизация\прогон завершен