Servicios. ¿Ya están en marcha? - página 21

 

Renat, ¿será posible implementar cristales personalizados en el servicio?
La documentación dice que el manejador OnBookEventes llamado en indicadores y expertos.
¿Y los servicios? ¿Cómo ejecutar las pilas en el servicio?
Me gustaría poder ejecutar mis pilas personalizadas, en el servicio.
Según tus palabras, los servicios no admiten más manejadores que OnStart, y se convierte en un problema.
El asunto es que los servicios son mucho más rápidos que el sistema OnTimer enindicadores yAsesores Expertos.
Y es mejor utilizar servicios para construir pilas personalizadas.

p.d.
He leído este artículo y me sorprende que algunos programadores expertos no puedan utilizar los servicios.
Los servicios son geniales, pueden implementar un montón de cosas, hasta la ejecución asíncrona de todo el proyecto, compartiendo la lógica de las tareas entre servicios.
Pero sería más lógico añadir al lenguaje la función Thread(params), que realizaría el paralelismo de hilos para los argumentos pasados a la función.
Bueno, si habrá hilos, entonces los procesos van junto con ellos, en la forma de la función Process(params).

Una de las ventajas importantes, el servicio se procesa más rápido que el tiempo del sistema, es decir, se procesa en sólo 1ms, o incluso menos.
Porque he forzado un límite de Sleep(1) en el bucle While().
El evento OnTimer() del sistema con EventSetMillisecondTimer(1) se procesa en los Asesores Expertos e indicadores durante ~ 20ms.
Esto no es una mala ganancia en términos de rendimiento de procesamiento.
Desgraciadamente, los manejadores del Asesor Experto no están soportados en el servicio, esto limita severamente las posibles soluciones.
Hace mucho tiempo los usuarios pidieron implementar el inicio de los Asesores Expertos sin horarios, los servicios sólo resolverían este problema.
A juzgar por el botón "Automated Trading" en el menú del servicio, la posibilidad de operar está disponible.
Pero no se puede construir una solución comercial completa sólo con el manejador OnStart.

 
fxsaber:

Muy útil, sin duda.

Reinicié el ordenador y me olvidé de RAMDrive. Ejecutar MT5 e inmediatamente informa de un problema.

¿No es más fácil usar RamDisk con automount + junction + dynamic allocation?
Al arrancar el PC, monta y enlaza todo automáticamente, y si no hay suficiente espacio en la unidad, lo añade automáticamente desde la RAM.

 
Sergey Dzyublik:

¿No es más fácil usar RamDisk con automount + junction + dynamic allocation?
Al arrancar, el PC monta y enlaza todo automáticamente, y si no hay suficiente espacio en el disco, lo añade automáticamente desde la RAM.

No siempre es necesario, por eso no lo he creado al inicio.

 

Al Terminal le gusta cambiar las propiedades de los símbolos personalizados cuando se reinicia. Por ejemplo, sus monedas.

Aquí es donde los Servicios pueden venir al rescate. Cuando se lanzan, corrigen el comportamiento no autorizado del Probador.

 
¿Pueden decirme cómo se puede mostrar un comentario en un gráfico activo desde el programa de servicio?
De hecho, ¿puede salir cualquier otro gráfico?

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

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

   return(0);
}
 

Respondiendo a mí mismo ))

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); 
}
 
¿Cómo ejecutar un servicio desde un EA?
 
Roman:

Respondiendo a mí mismo ))

sí - todo se escribe en la esquina superior izquierda

//+------------------------------------------------------------------+
//| 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 de

 
fxsaber:

Al Terminal le gusta cambiar las propiedades de los símbolos personalizados cuando se reinicia. Por ejemplo, sus monedas.

Aquí es donde los Servicios pueden venir al rescate. Corrigen el comportamiento no autorizado del Comprobador al arrancar.

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias de comercio

Símbolos personalizados. Errores, fallos, preguntas, sugerencias.

fxsaber, 2019.09.15 22:30

Resolver el problema del cambio automático de las monedas de los símbolos personalizados tras la recarga del 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();
}
 

Añadir a los servicios la posibilidad de lanzar la auto-optimización de los Asesores Expertos.

Y varias funcionalidades, por ejemplo, para poder saber que la optimización/ejecución se ha completado.