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

 

Renat, sera-t-il possible de mettre en place un verre personnalisé dans le service ?
La documentation indique que le gestionnaire OnBookEventest appelé dans les indicateurs et les experts.
Qu'en est-il des services ? Comment exécuter les piles dans le service ?
J'aimerais pouvoir exécuter mes piles personnalisées, dans le service.
D'après vos propos, les services ne supportent pas d'autres handlers que OnStart, et cela devient un problème.
Le fait est que les services sont beaucoup plus rapides que le système OnTimer dans lesindicateurs et lesExpert Advisors.
Et il est préférable d'utiliser des services pour construire des piles personnalisées.

p.s.
J'ai lu cet article et je suis surpris que certains programmeurs qualifiés ne puissent pas utiliser les services.
Les services sont cool, ils peuvent implémenter beaucoup de choses, jusqu'à l'exécution asynchrone de tout le projet, en partageant la logique des tâches entre les services.
Mais il serait plus logique d'ajouter au langage la fonction Thread(params), qui réaliserait le parallélisme des threads pour les arguments passés à la fonction.
Eh bien, s'il y a des fils, les processus les accompagnent, sous la forme de la fonction Process(params).

L'un des principaux avantages est que le service est traité plus rapidement que le temps système, c'est-à-dire en seulement 1 ms, voire moins.
Parce que j'ai forcé une limite Sleep(1) dans la boucle While().
Le système OnTimer() avec l'événement EventSetMillisecondTimer(1) est traité dans les Expert Advisors et les indicateurs pendant ~ 20ms.
Il ne s'agit pas d'une mauvaise augmentation des performances de traitement.
Malheureusement, les gestionnaires de conseillers experts ne sont pas pris en charge par le service, ce qui limite considérablement les solutions possibles.
Il y a longtemps, les utilisateurs ont demandé de mettre en œuvre le démarrage des conseillers experts sans horaires, les services résoudraient ce problème.
A en juger par le bouton "Trading automatisé" dans le menu du service, la possibilité de faire du trading est disponible.
Mais vous ne pouvez pas construire une solution de trading à part entière avec le seul gestionnaire OnStart.

 
fxsaber:

Très pratique en effet.

J'ai redémarré l'ordinateur et j'ai oublié le RAMDrive. Exécutez MT5 et il signale immédiatement un problème.

N'est-il pas plus facile d'utiliser RamDisk avec automount + jonction + allocation dynamique ?
Au démarrage du PC, il monte et lie automatiquement tout, et s'il n'y a pas assez d'espace sur le disque, il l'ajoute automatiquement à partir de la RAM.

 
Sergey Dzyublik:

N'est-il pas plus facile d'utiliser RamDisk avec automount + jonction + allocation dynamique ?
Au démarrage, le PC monte et lie automatiquement tout, et s'il n'y a pas assez d'espace sur le disque, il l'ajoute automatiquement depuis la RAM.

Pas toujours nécessaire, c'est pourquoi je ne l'ai pas créé au démarrage.

 

Le terminal aime modifier les propriétés des symboles personnalisés lorsqu'il est redémarré. Par exemple, ses devises.

C'est là que les services peuvent venir à la rescousse. Lorsqu'ils sont lancés, ils corrigent le comportement non autorisé du Testeur.

 
Pouvez-vous me dire comment afficher un commentaire sur un graphique actif à partir du programme de service ?
En fait, un autre graphique peut-il être produit ?

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

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

   return(0);
}
 

Je réponds à moi-même.)

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); 
}
 
Comment exécuter un service à partir d'une EA ?
 
Roman:

Je réponds à moi-même.)

oui - tout est écrit dans le coin supérieur gauche

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

Photo par

 
fxsaber:

Le terminal aime modifier les propriétés des symboles personnalisés lorsqu'il est redémarré. Par exemple, ses devises.

C'est là que les services peuvent venir à la rescousse. Ils corrigent le comportement non autorisé du Testeur au démarrage.

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Symboles personnalisés. Erreurs, bogues, questions, suggestions.

fxsaber, 2019.09.15 22:30

Résolution du problème du changement automatique des devises des symboles personnalisés après le rechargement du 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();
}
 

Ajouter aux services la possibilité de lancer l'auto-optimisation des Expert Advisors.

Et diverses fonctionnalités, par exemple pour pouvoir savoir que l'optimisation/exécution est terminée.

Raison: