服务。他们已经启动并运行了吗? - 页 21

 

雷纳特,是否有可能在服务中实现自定义玻璃?
文档中说,OnBookEvent处理程序在指标和专家中被调用
服务方面呢?如何在服务中运行堆栈?
我希望能够在服务中运行我的自定义堆栈。
根据你的说法,服务不支持OnStart以外的任何处理程序,这就成了一个问题。
问题是,在指标和专家顾问 方面,服务要比系统OnTimer快得多。
而且最好使用服务来构建自定义堆栈。

p.s.
我读过这篇文章,对一些熟练的程序员不能使用服务感到惊讶。
服务很酷,它们可以实现很多东西,最多可以异步执行整个项目,在服务之间共享任务的逻辑。
,但更合理的做法是在语言中加入Thread(params)函数,这将实现对传递给函数的参数的线程并行。
好吧,如果会有线程,那么进程就会以Process(params)函数的形式与它们一起进行。

其中一个重要的优点,服务的处理速度比系统时间快,也就是说,它的处理时间仅为1ms,甚至可能更短。
因为我在While()循环中强制设置了Sleep(1)的限制。
系统的OnTimer()与EventSetMillisecondTimer(1)事件在Expert Advisors和指标中的处理时间是~20ms。
就处理性能而言,这并不是一个糟糕的收获。
不幸的是,服务中不支持专家顾问处理程序,这严重限制了可能的解决方案。
很久以前,用户要求在没有时间表的情况下实现专家顾问的启动,服务正好可以解决这个问题。
从服务菜单中的 "自动交易 "按钮来看,交易的可能性是存在的。
但你不能仅用OnStart处理程序来建立一个完整的交易解决方案。

 
fxsaber:

确实非常方便。

重新启动计算机,忘记了RAMDrive。运行MT5,它立即报告了一个问题。

使用RamDisk的自动安装+结点+动态分配不是更容易吗?
当启动PC时,它会自动挂载并链接所有东西,如果驱动器上没有足够的空间,它会自动从RAM中添加。

 
Sergey Dzyublik:

使用RamDisk的自动安装+结点+动态分配不是更容易吗?
在启动时,PC会自动挂载和链接所有的东西,如果磁盘上没有足够的空间,它会自动从RAM中添加。

并非总是需要,这就是为什么我没有在启动时创建它。

 

终端在重启时喜欢改变自定义符号的 属性。例如,其货币。

这就是服务部门可以发挥作用的地方。当启动时,它们会纠正测试者的未经授权的行为。

 
你能告诉我如何在服务程序中的活动图表上显示评论吗?
事实上,是否可以输出任何其他图表?

//+------------------------------------------------------------------+
//| 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); 
}
 
如何从EA中运行一个服务?
 
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();
}
 

在服务中增加启动专家顾问自动优化 的可能性。

还有各种功能,例如,能够知道优化/运行已经完成。