Serviços. Eles já estão em funcionamento? - página 21

 

Renat, será possível implementar vidros personalizados no serviço?
A documentação diz que o manipulador do OnBookEventé chamado em indicadores e especialistas.
E quanto aos serviços? Como executar as pilhas no serviço?
Eu gostaria de poder executar minhas pilhas personalizadas, no serviço.
De acordo com suas palavras, os serviços não suportam nenhum outro manipulador além da OnStart, e isso se torna um problema.
A questão é que os serviços são muito mais rápidos do que o sistema OnTimer emindicadores eExpert Advisors.
E é melhor usar os serviços para construir pilhas personalizadas.

p.s.
Eu li este artigo e estou surpreso, que alguns programadores habilidosos não possam usar serviços.
Os serviços são legais, eles podem implementar muitas coisas, até a execução assíncrona de todo o projeto, compartilhando a lógica das tarefas entre os serviços.
Mas seria mais lógico acrescentar à função Thread(params) da linguagem, que realizaria o paralelismo de threads para os argumentos passados para a função.
Bem, se houver fios, então os processos vão junto com eles, na forma da função Processo (params).

Uma das vantagens importantes, o serviço é processado mais rápido que o tempo do sistema, ou seja, é processado em apenas 1ms, ou talvez até menos.
Porque forcei um limite de Sono(1) no laço While().
O sistema OnTimer() com evento EventSetMillisecondTimer(1) é processado em Expert Advisors e indicadores por ~ 20ms.
Isto não é um mau aumento no desempenho do processamento.
Infelizmente, os profissionais que trabalham com o Expert Advisor não são apoiados no serviço, o que limita severamente as soluções possíveis.
Há muito tempo atrás, os usuários pediam para implementar o início de Expert Advisors sem horários, os serviços apenas resolveriam este problema.
A julgar pelo botão "Automated Trading" no menu do serviço, a possibilidade de negociar está disponível.
Mas não se pode construir uma solução comercial completa apenas com o manipulador OnStart.

 
fxsaber:

Muito útil de fato.

Reinicializou o computador e esqueceu o RAMDrive. Execute o MT5 e ele relata imediatamente um problema.

Não é mais fácil usar o RamDisk com montagem automática + junção + alocação dinâmica?
Ao iniciar o PC, ele monta e liga tudo automaticamente, e se não houver espaço suficiente no drive, ele o adicionará da RAM por si só.

 
Sergey Dzyublik:

Não é mais fácil usar o RamDisk com montagem automática + junção + alocação dinâmica?
Na inicialização, o PC monta e liga tudo automaticamente, e se não houver espaço suficiente no disco, ele o adicionará automaticamente a partir da RAM.

Nem sempre foi necessário, por isso não o criei na inicialização.

 

O Terminal gosta de mudar as propriedades dos símbolos personalizados quando é reinicializado. Por exemplo, suas moedas.

É aqui que os Serviços podem vir em socorro. Quando lançados, eles corrigem o comportamento não autorizado do Testador.

 
Você pode me dizer como um comentário pode ser exibido em um gráfico ativo do programa de serviço?
Na verdade, pode ser produzido qualquer outro gráfico?

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

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

   return(0);
}
 

Respondendo a mim mesmo ))

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); 
}
 
Como executar um serviço de um EA ?
 
Roman:

Respondendo a mim mesmo ))

sim - tudo está escrito no canto superior esquerdo

//+------------------------------------------------------------------+
//| 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);
  }
//+------------------------------------------------------------------+

Foto por

 
fxsaber:

O Terminal gosta de mudar as propriedades dos símbolos personalizados quando é reinicializado. Por exemplo, suas moedas.

É aqui que os Serviços podem vir em socorro. Eles corrigem o comportamento não autorizado do Testador no início da operação.

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

Símbolos personalizados. Erros, bugs, perguntas, sugestões.

fxsaber, 2019.09.15 22:30

Resolvendo o problema da troca automática de moedas com símbolos personalizados após o reinício do Terminal.

// Сервис корректирует валюты всех кастомных символов.
#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();
}
 

Acrescentar aos serviços a possibilidade de lançar a auto-optimização dos Expert Advisors.

E várias funcionalidades, por exemplo, poder saber que a otimização/execução está concluída.