Services. Sont-ils déjà opérationnels ? - page 19

 
Sergey Golubev:

Il y a plusieurs années, il y avait un EA dans la partie anglaise du fil de discussion (je suis désolé, cela prend trop de temps pour le trouver maintenant) qui, lorsqu'il négociait (et analysait le marché), générait et mettait à jour un fichier texte, qui était lu à certains intervalles par un autre EA travaillant dans le même Metatrader, mais sur une paire différente (ou la même, mais sur un graphique différent). Et les deux ont échangé, communiquant l'un avec l'autre avec ce fichier.

Je l'ai fait pour que scalper-maître puisse communiquer avec scalper-esclave sur d'autres terminaux. Mais les seules commandes de contrôle sont envoyées par le trader, il n'est donc pas nécessaire de cliquer manuellement sur les mêmes boutons sur tous les terminaux. Mais rien n'empêche de transmettre des données.

Vous pouvez communiquer par le biais d'un mappage de la mémoire, alors adieu le marché.

 

Je travaille beaucoup avec des personnages personnalisés. J'ai presque toujours besoin d'en tuer un personnalisé, mais je dois le faire manuellement. J'ai décidé de l'automatiser.

Et il s'est avéré que c'était exactement le script pour les services. Ce n'est probablement pas une approche standard pour les services, mais je voulais un script qui ne soit pas lié aux graphiques. Et voici pourquoi

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

#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));
}

Je pensais mettre un raccourci sur ce script/service et y faire passer un symbole lorsque je vois un graphique d'un symbole indésirable. Ce serait très pratique. Cependant, j'ai rencontré des difficultés.

  • Il est impossible d'épingler une touche de raccourci au service.
  • Pour redémarrer le service, vous devez le supprimer avant de le faire. Cela est censé être nécessaire pour lancer les services au premier démarrage du terminal. Mais mon cas est différent.
  • SymbolSelect ne fonctionne pas - il ne peut pas enlever le symbole. Bug, apparemment.
Par conséquent, c'est une déception. Est-il possible de résoudre le côté pratique des services d'une manière ou d'une autre ?


ZZY Il existe une solution de contournement pour supprimer le symbole graphique actif.

 
fxsaber:

Je travaille beaucoup avec des personnages personnalisés. J'ai presque toujours besoin d'en tuer un personnalisé, mais je dois le faire manuellement. J'ai décidé de l'automatiser.

Et il s'est avéré que c'était exactement le script pour les services. Ce n'est probablement pas une approche standard pour les services, mais je voulais un script qui ne soit pas lié aux graphiques. Et voici pourquoi

Je pensais mettre un raccourci sur ce script/service et y faire passer un symbole lorsque je vois un graphique d'un symbole indésirable. Ce serait très pratique. Cependant, j'ai rencontré des difficultés.

  • Il est impossible d'épingler une touche de raccourci au service.
  • Pour redémarrer le service, vous devez le supprimer avant de le faire. Cela est censé être nécessaire pour lancer les services au premier démarrage du terminal. Mais mon cas est différent.
  • SymbolSelect ne fonctionne pas - il ne peut pas enlever le symbole. Bug, apparemment.
Par conséquent, c'est une déception. Est-il possible de résoudre le côté pratique des services d'une manière ou d'une autre ?


ZZY Il existe une solution de contournement pour supprimer un symbole du graphique actif.

Vous ne pouvez pas mettre un raccourci clavier sur les services, car la fonction OnChartEvent() ne fonctionne pas à cet endroit ; mais je suppose que vous le savez. Ainsi, Expert Advisor devrait fonctionner avec des touches de raccourci et transmettre les commandes au service par le biais de ressources. Essayez de gérer le service avec des ressources.

SZY. Bien sûr, dans ce cas, nous perdrons le sens de Service. Vous pouvez fermer les graphiques depuis Expert Advisor en appuyant sur les touches de raccourci...

SZY. Le seul but n'est pas de produire des fonctionnalités supplémentaires dans les Expert Advisors. Nous pouvons regrouper la fonctionnalité générale de plusieurs EA dans un service et l'appeler via une ressource. Donnez-nous un ordre sur ce qu'il faut faire.

 
Реter Konow:

Impossible de mettre une touche de raccourci sur le service car la fonction OnChartEvent() ne fonctionne pas à cet endroit.


 
fxsaber:


Merci. Alors quel est le problème ?

Vous voulez que le service lui-même (qui fonctionne sans interruption) réponde aux frappes de touches.

 
Реter Konow:

Merci. Alors quel est le problème ?

Vous voulez que le service lui-même (qui fonctionne sans interruption) réponde aux frappes de touches.

Non. Vous voulez que le service puisse travailler en mode script sans être lié à un graphique.

 
fxsaber:

Non. Il faut que le service puisse travailler en mode script sans être lié à un graphique.

Est-ce que ça marche autrement ?

 
Реter Konow:

Est-ce que ça marche autrement ?

Oui.

 
fxsaber:

Oui.

Donc il peut exécuter n'importe quel graphique ? Facilement.

 
Le service fonctionne avec des données (citations) avec la possibilité de les corriger, mais il ne permet pas de gérer quoi que ce soit, en particulier les fenêtres du terminal, ce qui est pourtant nécessaire. D'où la conclusion évidente : s'il est nécessaire de fermer telle ou telle fenêtre, le service génère un devis manifestement impossible pour cette fenêtre, et le script attaché à cette fenêtre la ferme à la réception de ce devis.
Raison: