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

 
BONJOUR À TOUS ! Aide S'il vous plaît avoir un informateur, il doit être supprimé ... Puis-je faire en sorte qu'il compte le bénéfice net, sans swaps, ni commissions ? Merci d'avance
Dossiers :
 
ANDREY:

Bonjour à tous !
Question sur l'instruction for() dans mql4. L'en-tête de cet opérateur effectue une diminution et une augmentation séquentielles de la valeur d'une variable.

for(int A=14 ; A>=0;A--) ou for(int A=0 ; A<14;A++) ou for(int A=0 ; A<14;A=+2) On suppose que les tailles de la variable A augmentent ou diminuent toujours de la même manière dans les exemples 1 ou 2.

QUESTION : Si une variable est une valeur de timeframe (1 (minute),5,15,30,60,240,1440), il est évident que les tailles d'augmentation ou de diminution de cette variable ne peuvent pas être égales. Dans ce cas, comment formater l'en-tête for de manière à ce que la variable A commence par 1 et soit ensuite incrémentée à chaque itération du nombre de minutes requis, de manière non uniforme.

L'exemple avec la variable A est un cas particulier. En général, comment puis-je formater une boucle si le changement de la variable dans l'en-tête de la boucle doit se faire de manière non uniforme aux intervalles souhaités.
Ou existe-t-il un autre opérateur à utiliser pour ces cas ? Mais comme il me semble que les autres opérateurs sont très encombrants par rapport à for. S'il vous plaît, aidez-moi à résoudre mon problème exactement avec l'aide de l'instruction for, et exactement avec son en-tête. Parce que pour résoudre mon problème à l'intérieur du corps de l'instruction for, vous pouvez bien sûr utiliser des instructions if, mais ce sera très lourd et l'instructionfor devra faire 1440 itérations pour filtrer 7 valeurs correctes.
Merci.

Il y a une erreur ici. Cela devrait être for(int A=0 ; A<14;A+=2)

La chose la plus simple à laquelle je pense est de mettre les périodes dans le tableau

ENUM_TIMEFRAMES per[] = {PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1};
/********************Script program start function*******************/
void OnStart()
 {
  for(int i = 0; i < ArraySize(per); i++)
   {
    Print(EnumToString(per[i]));
   }
 }/******************************************************************/

/*****************************End program****************************/


 
Alexey Viktorov:

La chose la plus simple qui me vient à l'esprit est de noter les périodes dans un tableau

Merci, je pourrais en avoir besoin aussi)

 
Alexey Viktorov:

Il y a une erreur ici. Cela devrait être for(int A=0 ; A<14;A+=2)

La solution la plus simple à laquelle je pense est de stocker les périodes dans un tableau.


Merci beaucoup pour le conseil. Il s'est avéré que c'était beaucoup plus simple que je ne le pensais.
Je ne comprends pas une seule chose. Le nom du tableau est per. Et ENUM_TIMEFRAMES est un identifiant d'un type de variable ? Je n'ai pas trouvé un tel identifiant dans la référence mql4. Il n'y a que

Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
 
ANDREY:

Merci beaucoup pour le conseil. Il s'est avéré que c'était beaucoup plus facile que je ne le pensais.
Il y a juste une chose que je n'ai pas comprise. Le nom du tableau par. Et ENUM_TIMEFRAMES est un identifiant du type de variable ? Je n'ai pas trouvé un tel identifiant dans la référence mql4. Il n'y a que

ici

Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
  • docs.mql4.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
 
MakarFX:

ici

Ai-je bien compris que vous m'avez envoyé des informations sur mql 5 ? Ou cette information s'applique-t-elle également à mql 4 ?

 
ANDREY:

Ai-je bien compris que vous m'avez envoyé des informations sur mql 5 ? Ou cette information s'applique-t-elle également à mql 4 ?

Je l'ai corrigé.
 
MakarFX:
Je l'ai corrigé.

Merci.

 
ANDREY:

Merci.

Petite recommandation : habituez-vous immédiatement à ENUM_TIMEFRAMES et oubliez la représentation numérique comme nombre de minutes.

Premièrement, PERIOD_W1 est plus informatif que 10080, il est plus clair qu'il s'agit d'une semaine.

Deuxièmement, dans mql5 la période ne correspond pas au nombre de minutes et ce ne sera pas un problème inutile lors de la migration vers mql5, et c'est inévitable.

Eh bien, si vous avez vraiment besoin du nombre de minutes dans une période, alors vous pouvez

int  PeriodSeconds( 
   ENUM_TIMEFRAMES  period=PERIOD_CURRENT      // период графика 
   );
Print(PeriodSeconds(PERIOD_W1)/60); // = 10080
 
Les gars, aidez-moi à attacher une alerte à l'indicateur.
#property copyright "Subu"
#property link      "http://www.google.com"
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2
#property indicator_chart_window

double UpArrow[];
double DownArrow[];
extern int ShiftArrow = -2;
extern bool FilterBullBearCandle = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0, DRAW_ARROW, EMPTY,2);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, UpArrow);
   SetIndexEmptyValue(0,0.0);
   SetIndexShift(0,ShiftArrow);
   SetIndexStyle(1, DRAW_ARROW, EMPTY,2);
   SetIndexArrow(1, 234);
   SetIndexBuffer(1, DownArrow);
   SetIndexEmptyValue(1,0.0);
   SetIndexShift(1,ShiftArrow);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int limit, i, counter;
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;
//----
    for(i = 0; i <= limit; i++) {
      DownArrow[i] = 0;
      UpArrow[i] = 0;
   if(High[i+2]>High[i+1] && Low[i+2]>Low[i+1] && High[i+2]>High[i+3] && Low[i+2]>Low[i+3])
      if( Open[i+1]>Close[i+1] && Close[i+2] > Close[i+1])
         if(FilterBullBearCandle)
            {
               if( Open[i+2]>Close[i+2])
                  DownArrow[i] = High[i+2] +0.0003;//Low[i+2] + (High[i+2]-Low[i+2]);
             }
         else
             DownArrow[i] = High[i+2] +0.0003;//Low[i+2] + (High[i+2]-Low[i+2]);
   if(High[i+2]<High[i+1] && Low[i+2]<Low[i+1] && High[i+2]<High[i+3] && Low[i+2]<Low[i+3])
      if( Open[i+1]<Close[i+1] && Close[i+2] < Close[i+1])
          if(FilterBullBearCandle)
            {
               if( Open[i+2]<Close[i+2] ) 
                  UpArrow[i] = Low[i+2] - 0.0003;//High[i+2] - (High[i+2]-Low[i+2]);
                  
            }
         else
            UpArrow[i] = Low[i+2] - 0.0003;//High[i+2] - (High[i+2]-Low[i+2]);
            
      }
//----
   return(0);
  }