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

 
Sergey Golubev:

Hace muchos años, había un EA en la parte inglesa del hilo (lo siento, ahora tardo en encontrarlo) que al operar (y analizar el mercado) generaba y actualizaba un archivo de texto, que era leído a ciertos intervalos por otro EA que trabajaba en el mismo Metatrader, pero sobre un par diferente (o el mismo, pero en un gráfico diferente). Y ambos intercambiaron, comunicándose entre sí con este archivo.

Lo he hecho para que scalper-master se comunique con scalper-slave en otros terminales. Pero sólo transfiere los comandos de control de un operador, por lo que no es necesario pulsar manualmente los mismos botones en todos los terminales. Pero nada impide transmitir datos.

Si se puede comunicar a través de la asignación de memoria, entonces adiós mercado

 

Yo trabajo mucho con los personajes personalizados. Casi siempre hay que matar a uno personalizado, pero hay que hacerlo manualmente. He decidido automatizarlo.

Y resultó ser justo el guión de Servicios. Tal vez no sea exactamente un enfoque estándar para los Servicios, pero quería un script que no estuviera ligado a los gráficos. Y aquí está la razón

// Удаляет символ активного графика из Обзора рынка (кастомный - удаляет полностью).

#property service

// Находит чарт в фокусе.
long GetFocusChart()
{
  long Chart = ChartFirst();

  for (; Chart != -1; Chart = ChartNext(Chart))
    if (ChartGetInteger(Chart, CHART_BRING_TO_TOP))
      break;

   return(Chart);
}
   
// Удаляет чарты символа.
int DeleteCharts( const string Symb )
{
  int Res = 0;
  
  for (long Chart = ChartFirst(); Chart != -1; Chart = ChartNext(Chart))
    if (ChartSymbol(Chart) == Symb)
      Res += ChartClose(Chart);
  
  return(Res);
}

// Удаляет символ из Обзора рынка (кастомный - удаляет полностью).
bool DeleteSymbol( const string Symb )
{
  DeleteCharts(Symb);

  return(SymbolSelect(Symb, false) && (!SymbolInfoInteger(Symb, SYMBOL_CUSTOM) || CustomSymbolDelete(Symb)));
}

void OnStart()
{
  const long Chart = GetFocusChart();
  
  if (Chart != -1)
    DeleteSymbol(ChartSymbol(Chart));
}

Estaba pensando en poner una tecla de acceso rápido a ese script/servicio y clavar un símbolo a través de él cuando vea un gráfico de símbolos no deseados. Sería muy útil. Sin embargo, se encontró con dificultades.

  • Es imposible fijar una tecla de acceso directo al servicio.
  • Para reiniciar el Servicio, hay que borrarlo antes. Se supone que esto es necesario para iniciar los Servicios en el primer arranque del Terminal. Pero mi caso es diferente.
  • SymbolSelect no funciona - no puede eliminar el símbolo. Un error, aparentemente.
Como resultado, es un fastidio. ¿Es posible resolver la parte práctica de los Servicios de alguna manera?


ZZY Existe una solución para eliminar el símbolo del gráfico activo.

 
fxsaber:

Yo trabajo mucho con los personajes personalizados. Casi siempre hay que matar a uno personalizado, pero hay que hacerlo manualmente. He decidido automatizarlo.

Y resultó ser justo el guión de Servicios. Probablemente no sea un enfoque estándar para los Servicios, pero quería un script que no estuviera ligado a los gráficos. Y aquí está la razón

Estaba pensando en poner una tecla de acceso rápido a ese script/servicio y clavar un símbolo a través de él cuando vea un gráfico de un símbolo no deseado. Sería muy útil. Sin embargo, se encontró con dificultades.

  • No hay manera de anclar una tecla de acceso rápido al Servicio.
  • Para reiniciar el Servicio, hay que borrarlo antes. Se supone que esto es necesario para iniciar los Servicios en el primer arranque del Terminal. Pero mi caso es diferente.
  • SymbolSelect no funciona - no puede eliminar el símbolo. Un error, aparentemente.
Como resultado, es un fastidio. ¿Es posible resolver la parte práctica de los Servicios de alguna manera?


ZZY Hay una solución para eliminar el símbolo del gráfico activo.

No se puede poner una tecla de acceso rápido en Servicios, porque la función OnChartEvent() no funciona allí; pero supongo que eso ya lo sabes. Así, el Asesor Experto debe trabajar con teclas de acceso rápido y pasar los comandos al Servicio a través de los recursos. Intenta gestionar el servicio con recursos.

SZY. Por supuesto, en este caso, perderemos el significado de Servicio. Puede cerrar los gráficos desde el Asesor Experto pulsando las teclas de acceso rápido...

SZY. El único objetivo es no producir una funcionalidad adicional en los Asesores Expertos. Podemos volcar la funcionalidad general de varios EAs en el Servicio y llamarlo a través de un recurso. Danos una orden de qué hacer.

 
Реter Konow:

No se puede poner una tecla de acceso rápido en el Servicio porque OnChartEvent() no funciona allí


 
fxsaber:


Gracias. Entonces, ¿cuál es el problema?

Quiere que el propio Servicio (que funciona sin parar) responda a las pulsaciones de las teclas.

 
Реter Konow:

Gracias. Entonces, ¿cuál es el problema?

Quiere que el propio Servicio (que funciona sin parar) responda a las pulsaciones de las teclas.

No. Necesita que el Servicio pueda trabajar en modo Script sin estar vinculado a un gráfico.

 
fxsaber:

No. Necesita que el Servicio pueda trabajar en modo Script sin estar vinculado a un gráfico.

¿Funciona de otra manera?

 
Реter Konow:

¿Funciona de otra manera?

Sí.

 
fxsaber:

Sí.

¿Así que puede ejecutar cualquier gráfico? Fácilmente.

 
El servicio opera con datos (comillas) con la posibilidad de corregirlos, pero no permite gestionar nada, en concreto, las ventanas del terminal, que es lo que se necesita. De ahí la conclusión obvia: si es necesario cerrar una u otra ventana, el servicio genera una cita obviamente imposible para esta ventana, y el script adjunto a esta ventana la cierra cuando se recibe esta cita.