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

 

Les gars, s'il vous plaît aidez-moi dans le code pour changer le TF d1/semaine à tout autre.

Je sais comment le changer en H1 ou en minutes.

Vous souhaitez savoir comment passer à la m30, m15, m5 ?

//|                                               For__red_r2005.mq4 |
//|                                       Copyright © 2010, PapaYozh |
//|                                                                * |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, PapaYozh"
#property link      "*"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Coral
#property indicator_color2 CornflowerBlue
#property indicator_width1 2
#property indicator_width2 2

// ---- buffers ----
double BuffD[];
double BuffM[];
//+------------------------------------------------------------------+
int init()
{
   SetIndexBuffer(0,BuffD);
   SetIndexEmptyValue(0,EMPTY_VALUE);
   SetIndexStyle(0,DRAW_SECTION,EMPTY,EMPTY);

   SetIndexBuffer(1,BuffM);
   SetIndexEmptyValue(1,EMPTY_VALUE);
   SetIndexStyle(1,DRAW_SECTION,EMPTY,EMPTY);
   
   return(0);
} // init()
//+------------------------------------------------------------------+
int deinit()
{
   return(0);
} // deinit()
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
int start()
{
   int    shift;

   shift = Bars - 1 - IndicatorCounted();
   for ( ; shift>0 ; shift-- )
   {
      if ( TimeDayOfYear(Time[shift]) != TimeDayOfYear(Time[shift-1]) )
      {
         BuffD[shift]   = Close[shift];
         if ( TimeDayOfWeek(Time[shift-1]) == 1 )
            BuffM[shift]   = Close[shift];
         else
            BuffM[shift]   = EMPTY_VALUE;
      }
      else
      {
         BuffD[shift]   = EMPTY_VALUE;
         BuffM[shift]   = EMPTY_VALUE;
      }
   }
   return(0);
} // start()
//+------------------------------------------------------------------+
 
J'ai besoin de mettre l'indicateur en pause pendant un certain temps, mais la fonction Sleep(), comme indiqué dans l'aide, ne peut pas être appelée depuis l'indicateur personnalisé... Y a-t-il un autre moyen ?
 
Yevhenii Levchenko:
J'ai besoin de mettre l'indicateur en pause pendant un certain temps, mais la fonction Sleep(), comme mentionné dans l'aide, ne peut pas être appelée depuis l'indicateur personnalisé.... Y a-t-il d'autres moyens ?

sortie par condition dans OnCalculate() sans calculer les valeurs de l'indicateur - le plus simple est le compteur de ticks, un peu plus compliqué est d'utiliser un timer, cela fonctionne dans les indicateurs

 
Igor Makanu:

sortie par condition dans OnCalculate() sans calculer les valeurs de l'indicateur - le plus simple est le compteur de ticks, un peu plus compliqué est d'utiliser un timer, cela fonctionne dans les indicateurs

Merci !

Je l'ai fait avec le minuteur. Cette option me semblait plus facile...

 
Yevhenii Levchenko:

Merci !

Je l'ai fait avec un minuteur. Cette option me semblait plus facile...

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[])
  {
//---
   static int TickCount = 0;
   TickCount--;
   if(TickCount>0) return(rates_total);
   TickCount=10;
 
Igor Makanu:

J'avais complètement oublié les variables statiques... Merci :)

Et si vous déclarez une variable ordinaire comme variable globale, elle sera en fait la même qu'une variable statique dans un certain sens ? Dans le sens où il sera possible de le modifier à partir de tous les endroits du programme ?

 

Bonjour.

Pouvez-vous me dire s'il est possible de passer un tableau dynamique de type structure par référence à une fonction ?

Par exemple, pour passer le tableau struct_name_array[] à Func() pour le traiter et le remplir là :

struct StructName {int x;
                   int y;} struct_name_array[];

void Func (int &x[],
           int &y[])
        {
        }

Comment s'effectue le transfert, si possible ? Comment les paramètres de la fonction sont-ils formatés ? Je n'arrive pas à utiliser les guides C++.

Merci.

 
Mikhail Sobolev:

Par exemple, passez le tableau struct_name_array[] à Func() pour qu'il soit traité et rempli à cet endroit :

//+------------------------------------------------------------------+
struct StructName
  {
   int               x;
   int               y;
  }
struct_name_array[];
//+------------------------------------------------------------------+
void OnStart()
  {
   ArrayResize(struct_name_array,5);
   for(int i=0;i<5;i++)
     {
      struct_name_array[i].x = i;
      struct_name_array[i].y = i*100;
     }
   Func(struct_name_array);
   for(int i=0;i<5;i++)
     {
      printf("%s : s[%d].x = %d , s[%d].y = %d",__FUNCTION__,i,struct_name_array[i].x,i,struct_name_array[i].y);
     }
  }
//+------------------------------------------------------------------+
void Func(StructName &s[])
  {
   for(int i=0;i<ArraySize(s);i++)
     {
      printf("%s : s[%d].x = %d , s[%d].y = %d",__FUNCTION__,i,s[i].x,i,s[i].y);
      s[i].x*=33;
      s[i].y*=12;
     }
  }
//+------------------------------------------------------------------+
 

Bonjour !

Je réalise que j'ai déjà ennuyé beaucoup de personnes ici avec mes questions stupides, alors s'il vous plaît soyez indulgent avec ce qui suit et expliquez quand même ce qui ne va pas ici :

        if((op1-lo1)>50 && (cl1-lo1)<10)
        {  Alert("VertLine");
        string obj_name="VertLine";
        datetime time=Time[0];
        color col = clrGreen; 
        ObjectCreate(0,obj_name,OBJ_VLINE,0,time,0,0,0);
        ObjectSetInteger(0,obj_name,OBJPROP_COLOR,col);
        }

L'alerte est émise, mais il n'y a pas de ligne verticale. Quelle est la raison ?

 
novichok2018:

Bonjour !

Je réalise que j'ai déjà ennuyé beaucoup de personnes ici avec mes questions stupides, alors s'il vous plaît soyez indulgent avec ce qui suit et expliquez quand même ce qui ne va pas ici :

L'alerte est émise, mais il n'y a pas de ligne verticale. Quelle est la raison ?

J'ai déjà compris la raison, même la référence même au forum. Je pense avoir compris que j'avais déjà tracé une ligne. Pour pouvoir dessiner d'autres lignes, je dois effacer celle-ci.