Séquence d'exécution de Init() et DeInit() - page 18

 
Alexey Kozitsyn:
C'est-à-dire utiliser des béquilles ? Je peux vous donner un exemple ?

Vous ne pouvez pas ajouter un indicateur via ChartIndicatorAdd() à un graphique qui a un symbole ou un TF différent. Une erreur s'affiche.

https://www.mql5.com/ru/docs/chart_operations/chartindicatoradd

ChartIndicatorAdd

Ajoute un indicateur avec la poignée spécifiée à la fenêtre du graphique spécifié. L'indicateur et le graphique doivent être dessinés sur le même symbole et la même fenêtre temporelle.

C'est la restriction actuelle. Il ne sera pas dans les services.
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Un petit coup de chapeau, presque sur le sujet du subj.

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

Bugs, bugs, questions

fxsaber, 2016.09.23 10:48

  1. Nous réglons l'indicateur sur un graphique NONE
    #property indicator_separate_window
    #property indicator_buffers 1
    #property indicator_plots   1
    
    double Buffer[];
    
    int handle = INVALID_HANDLE;
    
    void OnInit()
    {
      ::SetIndexBuffer(0, Buffer, INDICATOR_DATA);
      
      handle = ChartIndicatorGet(0, 1, ChartIndicatorName(0, 1, 0));  
    }
    
    #define  TOSTRING(A) #A + " = " + (string)A + "\n"
    
    int OnCalculate( const int rates_total,
                     const int prev_calculated,
                     const datetime &time[],
                     const double &open[],
                     const double &high[],
                     const double &low[],
                     const double &close[],
                     const long &tick_volume[],
                     const long &volume[],
                     const int &spread[] )
    {
      if (handle != INVALID_HANDLE)
      {
        Buffer[rates_total - 1] = MathRand();
        
        double BufferCopy[];
        
        if (CopyBuffer(handle, 0, 0, 1, BufferCopy) > 0)
          Print(TOSTRING(BufferCopy[0]) + TOSTRING(Buffer[rates_total - 1]));
      }
      
      return(rates_total);
    }
  2. Retirer l'indicateur de la carte à la main.
  3. Dans le journal, nous voyons que l'indicateur continue à fonctionner. Vous pouvez fermer tous les graphiques dans le terminal, mais l'exécution se poursuivra. Et ça n'aidera pas, bien sûr,
    void OnDeinit( const int Reason )
    {
      if (handle != INVALID_HANDLE)  
        IndicatorRelease(handle);
      
      return;
    }
  4. Le redémarrage du terminal arrête l'exécution de l'indicateur.
  5. Combien d'indicateurs peuvent être exécutés de la sorte au ralenti, et nous n'en savons rien ! Il n'y a pas de contrôle du tout.
Sans aucune plainte auprès des développeurs.
 
fxsaber:
C'est une restriction maintenant. Il ne sera pas dans les services.

Ce n'est pas du tout ce dont je parlais. Pas l'ajout d'un indicateur à partir d'un conseiller expert, mais la création d'un indicateur à l'aide d'un conseiller expert.

A propos de ça :

Que les services ou la possibilité d'exécuter plusieurs EA sur un seul graphique ne peuvent pas couvrir complètement les trabs discutés ?

S'il n'y a pas de possibilité de créer des indicateurs en utilisant des services, le problème de la création d'un indicateur avec des données provenant d'un fichier ne disparaîtra pas. Si la séquence OnDeinit() -> OnInit() n'est pas contrôlée. Le changement de TF est une action de l'utilisateur, et la réponse à cette action (OnDeit()) se produira lorsque cela ne sera pas nécessaire (après OnInit() ou peut-être même après OnCalculate() ?

C'est-à-dire que si l'indicateur enregistre des données dans un fichier et trace une série de graphiques basés sur ces données, et que les données ne sont pas écrites "consécutivement", l'affichage correct de toutes les données ne se produira pas.

Mais si le service était un programme global (comme GPT, mais le programme entier) et qu'il pouvait créer des tampons d'indicateurs, et que les calculs n'étaient pas interrompus par les actions des utilisateurs comme le changement de TFs / la fermeture du graphique - alors le problème n'existerait pas. Mais en attendant, les indicateurs sont castrés, comme d'habitude.

 
Alexey Kozitsyn:

Ce n'est pas du tout ce dont je parlais. Pas l'ajout d'un indicateur à partir d'un EA, mais la création d'un indicateur à l'aide d'un EA.

Je ne comprends pas la terminologie.

 
fxsaber:

Je ne comprends pas la terminologie.

Calculer et afficher les données en les écrivant dans les tampons des indicateurs, et non pas seulement en affichant les données.
 
Slawa:

Pas encore de solution pour OnChartEvent

Que voulez-vous dire, il n'y a pas de solution ? Quel genre de service serait-il sans la possibilité d'accéder à la souris ? Et j'aimerais aussi gérer les événements des utilisateurs.
 
Alexey Kozitsyn:
Calcul et affichage des données avec écriture dans les tampons des indicateurs, et non pas seulement affichage des données.

Ils se plaignent que les données calculées par l'indicateur ne peuvent pas être transférées de manière fiable et logique vers une autre copie de cet indicateur lors du changement de TF.

Ceci est facilement réalisable par le biais de services, si le service effectue la partie calcul et que l'indicateur l'affiche.

Dans tous les autres cas, qui ne relèvent pas de ce qui est souligné en gras, vous pouvez continuer à écrire les indicateurs comme les indicateurs classiques.

 
fxsaber:

Ils se plaignent que les données calculées par l'indicateur ne peuvent pas être transférées de manière fiable et logique vers une autre copie de cet indicateur lors du changement de TF.

Ceci est facilement réalisable par le biais de services, si le service effectue la partie calcul et que l'indicateur l'affiche.

Dans tous les autres cas, qui ne relèvent pas de la mise en évidence en gras, vous pouvez continuer à rédiger des indicateurs de manière classique.

Ok, bien, nous verrons ce que nous aurons. Quand la bêta aura-t-elle lieu ?
 
Alexey Kozitsyn:
OK, eh bien, nous verrons ce qui se passe. Quand aura lieu la bêta ?
Si je donne le feu vert, ce sera ce soir.
 
Nikolai Semko:
Comment ça, pas de solution ? Quel genre de service serait-il sans la possibilité d'accéder à la souris ? Et j'aimerais aussi gérer les événements des utilisateurs.

Pas de solution signifie "ne sait pas encore comment résoudre", et non "ne le fera pas".

Et il n'y a aucun problème avec les événements personnalisés.