Questions des débutants MQL5 MT5 MetaTrader 5 - page 874

 

Bonjour, pourriez-vous me conseiller s'il vous plaît, dans le code ci-dessous sans le bloc de boucle (qui vient après le CopyByffer), l'indicateur fonctionne normalement, mais si vous incluez un cycle comparant le prix d'une bougie avec le prix d'une des barres, les barres elles-mêmes après le départ ne sont pas affichées, quel pourrait être le problème ?

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots   3
#property indicator_type1   DRAW_LINE
#property indicator_color1  Olive
#property indicator_type2   DRAW_LINE
#property indicator_color2  Green
#property indicator_type3   DRAW_LINE
#property indicator_color3  Olive

input int peroid = 20;        // период полос 1
input int bands_shift= 0;           // смещение полос 1 
input double deviation = 2.3;   // отклонение полос 1

input ENUM_APPLIED_PRICE   applied_price=PRICE_CLOSE; // тип цены 

double      Base[];     // массив для BASE_LINE индикатора iBands
double      Upper[];    // массив для UPPER_BAND индикатора iBands
double      Lower[];    // массив для LOWER_BAND индикатора iBands

int iBands1_handle; //Указатель на первый индикатор 
int iBands2_handle; //Указатель на первый индикатор 

int g_i_Window;


int OnInit()
  {
   g_i_Window=ChartWindowFind();
   SetIndexBuffer(0,Base,INDICATOR_DATA);
   SetIndexBuffer(1,Upper,INDICATOR_DATA);
   SetIndexBuffer(2,Lower,INDICATOR_DATA);
           
   iBands1_handle=iBands(NULL,PERIOD_CURRENT,peroid,bands_shift,deviation,applied_price);

   if(iBands1_handle==INVALID_HANDLE){
         Alert("Неудалось загрузить индикатор, повторите попытку");
         return(-1);
         }
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,      // размер входных таймсерий 
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const datetime& time[],     // Time 
                 const double& open[],       // Open 
                 const double& high[],       // High 
                 const double& low[],        // Low 
                 const double& close[],      // Close 
                 const long& tick_volume[],  // Tick Volume 
                 const long& volume[],       // Real Volume 
                 const int& spread[])         // Spread 
  {
   int i;
   int shift = 0;
   int shift1;
   int shift2;
   int shift3;
   string alert;
   
   double O, O1, O2, C, C1, C2, L, L1, L2, H, H1, H2;
      shift1 = shift;
      shift2 = shift + 1;
      shift3 = shift + 2;   
      O = open[shift1];
      O1 = open[shift2];
      O2 = open[shift3];
      H = high[shift1];
      H1 = high[shift2];
      H2 = high[shift3];
      L = low[shift1];
      L1 = low[shift2];
      L2 = low[shift3];;
      C = close[shift1];
      C1 = close[shift2];
      C2 = close[shift3]; 
   
   i = (prev_calculated==0)?1: prev_calculated;
   i = (prev_calculated==rates_total)?rates_total-1: i;
   
   CopyBuffer(iBands1_handle,0,0,rates_total-1,Base);
   CopyBuffer(iBands1_handle,1,0,rates_total-1,Upper);
   CopyBuffer(iBands1_handle,2,0,rates_total-1,Lower);

   for (i = i; i < rates_total; i++)
   {
    if(H > L && O > Lower[i])
    {
     int time_waiting = (int)TimeLocal() + 1;
     while(TimeLocal() < time_waiting){}
     Comment("True");
     return(0);
    }
     else Comment("False"); 
   }
   
   
   if (prev_calculated==0) ChartRedraw();   
   return(rates_total);
  }

Résultat :


 
Aleksey Vyazmikin:

Vous ne pouvez pas.

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

Bugs, bugs, questions

Alexey Viktorov, 2018.05.30 15:53

Enfin, pas de manière aussi dynamique, mais une fois la réinitialisation effectuée, c'est possible. Je l'ai fait.


 
Alexey Viktorov:

Si vous pouvez élaborer, veuillez décrire

 
Andrii Djola:

si vous pouvez être plus précis

Combien de détails en plus ?

Dans une situation, j'avais besoin de créer des barres ou des chandeliers de couleur. Ils utilisent 4 tampons de valeur et 1 tampon de couleur. Dans l'autre cas, j'avais besoin d'afficher une ligne colorée, avec 1 tampon de valeur et 1 tampon de couleur.

L'appel et la modification des propriétés de l'indicateur entraînent l'initialisation de l'indicateur. Par conséquent, si les paramètres contiennent des barres ou des chandeliers, alors une option d'initialisation. Si la ligne, l'autre option d'initialisation.

Il est impossible de modifier le nombre de tampons au milieu de l'indicateur, ce qu'a dit Alexey Vyazmikin sans être conscient des autres options.

 
Alexey Viktorov:

Combien de détails en plus ?

Dans une situation, j'avais besoin de créer des barres ou des chandeliers de couleur. Ils utilisent 4 tampons de valeur et 1 tampon de couleur. Dans l'autre cas, j'avais besoin d'afficher une ligne colorée, avec un tampon de valeurs et un tampon de couleurs.

L'appel et la modification des propriétés de l'indicateur entraînent l'initialisation de l'indicateur. Par conséquent, si les paramètres contiennent des barres ou des chandeliers, alors une option d'initialisation. Si une ligne, alors une autre option d'initialisation.

Il est impossible de modifier le nombre de tampons au milieu de l'indicateur, comme l'a dit Alexey Vyazmikin, sans être conscient des autres options.

Si vous décidez d'écrire mon nom de famille en russe, ça sonne comme Vyazmikin.

En ce qui concerne mes soupçons - je pense que la réponse est correcte à la question posée. Sans explication des besoins, il est inutile de dire le contraire. La réinitialisation est un redémarrage du programme, il est clair que vous pouvez changer quoi que ce soit dans les paramètres.

 
Aleksey Vyazmikin:

Si vous choisissez d'écrire mon nom de famille en russe, cela ressemble à Vyazmikin.

En ce qui concerne mes soupçons - je crois que la réponse à la question posée est correcte. Sans explication des besoins, il est inutile de dire le contraire. La réinitialisation est un redémarrage du programme, il est clair que vous pouvez changer quoi que ce soit dans les paramètres.

L'absence d'une enseigne douce choque-t-elle tant que ça ?

J'ai parlé d'incorrection, à mon avis j'ai souligné exactement l'exactitude de la réponse.

 
alph:
Pouvez-vous me dire s'il s'agit d'une figurine de test réaliste ? Et est-ce un bon ou mauvais résultat pour une année avec un dépôt de 3000$ ?
réel.
 
Alexey Viktorov:

L'absence d'une enseigne douce vous choque-t-elle tant que ça ?

Je suis guidé par l'illumination, pas l'offense. Pourquoi je serais offensé, tu sais épeler et tu veux m'offenser ? Je n'ai même pas envisagé cette option, c'était pour rien ?

 
Aleksey Vyazmikin:

Je suis motivé par l'illumination, pas par le ressentiment. Pourquoi devrais-je être offensé ? Vous savez écrire correctement et vous voulez m'offenser ? Je n'ai même pas envisagé cette option, c'était pour rien ?

Paix, amitié, chewing-gum.

 
Alexey Viktorov:

Paix, amitié, chewing-gum.

Et les demi-litres ?