Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 787

 

J'ai trouvé un problème étrange lors du dessin sur le graphique MT5 : les flèches au lieu des bougies basses sont placées à des endroits arbitraires, comme si elles étaient décalées sur le graphique.




#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window

#property strict

#property indicator_buffers 1 
#property indicator_plots   1
 
#property indicator_label1  "Arrows" 
#property indicator_type1   DRAW_ARROW 
#property indicator_color1  clrGreen 
#property indicator_width1  1

double Buf_0[];

int OnInit()
  {

   SetIndexBuffer(0,Buf_0,INDICATOR_DATA);
   PlotIndexSetInteger(0,PLOT_ARROW,233);
   
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
   
   for (int i=0; i<rates_total; i++)
      {
   
      Buf_0[i]=iLow(_Symbol, _Period,i);
      }
   return(rates_total);
  }

 
psyman:

J'ai trouvé un problème étrange lors du dessin sur le graphique MT5 : les flèches au lieu des bougies basses sont placées à des endroits arbitraires, comme si elles étaient décalées sur le graphique.




1. L'indicateur a DÉJÀ un tableau bas. Elle doit être appliquée.

2. Il n'est pas nécessaire de faire fonctionner la visualisation à la vitesse maximale.

3. Le code est terriblement défectueux, car à chaque tic, il y a un passage par TOUTES les barres.

 
Vladimir Karputov:

1. L'indicateur a DÉJÀ un tableau bas. Appliquez-le.

2. Il n'est pas nécessaire de faire tourner la visualisation à la vitesse maximale.

3. Le code est terriblement défectueux, car à chaque tic, il y a un passage par TOUTES les barres.

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[])
  {
   ArrayInitialize(Buf_0,EMPTY_VALUE);

   for (int i=0; i<rates_total; i++)
      {
   
      Buf_0[i]=iLow(_Symbol, _Period,i);
      }
   return(rates_total);
  }
 
Vladimir Karputov:

1. L'indicateur a DÉJÀ un tableau bas. Appliquez-le.

2. Il n'est pas nécessaire de faire tourner la visualisation à la vitesse maximale.

3. Le code est terriblement défaillant - parce qu'à chaque tick, il y a un passage par TOUTES les barres.

Je n'ai pas posté le code ici, mais j'ai écrit le plus simple pour simplifier l'analyse.

Dites-moi ce qui ne va pas, la vitesse maximale n'est pas claire.

 
Vitaly Muzichenko:

Vitaly, l'initialisation ne fonctionne pas pour une raison quelconque. J'ai essayé d'écrirePlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0) ; cela ne fonctionne pas non plus :(

 
psyman:

Je n'ai pas posté le code ici, mais j'ai écrit le plus simple pour simplifier l'analyse.

Dites-moi ce qui ne va pas, la vitesse maximale n'est pas claire.

Commencez à le corriger une étape à la fois. Par exemple, réparez-le d'abord :

L'indicateur a déjà un tableau faible. Vous devez l'appliquer.

 
Buf_0[i]=iLow(_Symbol, _Period,i);

iLow fonctionne comme la série true, Buf_0 est false, low[] est aussi false. C'est-à-dire que le 0e élément dans votre cas obtient rates_total-1 (en miroir).

Vous devez en retourner un, par exemple :

Buf_0[i]=iLow(_Symbol, _Period,rates_total-1-i);
 
psyman:

J'ai trouvé un étrange problème lors du dessin sur le graphique MT5 : les flèches au lieu des bougies basses sont placées à des endroits arbitraires, comme si elles étaient décalées sur le graphique.



Connaître l'énigme des pommes chez Pinocchio aidera certainement à résoudre ce problème. Je ne m'en souviens pas en détail, nous attendrons que quelqu'un le raconte sans erreur.

 
Igor Zakharov:

iLow fonctionne comme la série true, Buf_0 est false, low[] est aussi false. C'est-à-dire que le 0e élément dans votre cas obtient rates_total-1 (en miroir).

Vous devez en retourner un, par exemple :

C'est un indicateur ! Il y a déjà des tableaux dans OnCalculate.

                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[]

Pourquoi faut-il entasser les fonctions iXXXX dans un indicateur ?

 
Vladimir Karputov:

C'est un indicateur ! OnCalculate possède DÉJÀ des tableaux.

Pourquoi mettre des fonctions iXXXXXX dans un indicateur ?

Comment le saurais-je ? Le questionneur a utilisé iLow(), cela signifie qu'il en a besoin. Peut-être que c'est plus facile à percevoir, peut-être qu'il prévoit d'aborder un autre symbole ou une autre période par le biais d'une variable d'entrée (je ne me souviens pas, y a-t-il un copyright à quatre ?).

Ajouté : la question sur les cinq a été posée dans le fil de discussion sur le quaternaire. Je l'ai négligé, je me repens. Mais, la réponse est toujours la même.

Raison: