[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 131

 
win_idx est-il le bon ?
 
alsu:
Est-ce que win_idx a raison ?

win_ind s'avère être correct.

ObjectCreate("max",OBJ_HLINE,win_idx,0,top) ; dessine dans la bonne fenêtre,


ObjectSet("max",OBJPROP_COLOR,Yellow) ; dessine dans la bonne couleur,

ObjectSet("max",OBJPROP_WIDTH,0) ; dessine la ligne correcte,

mais ne définit pas le paramètre supérieur dans

double top=WindowPriceMax(win_idx) ;

et topBuffer[] est vide.


Le code

#propriété indicator_separate_window
#property indicator_buffers 3
#propriété indicator_color1 Lime
#property indicator_color2 Red
//--- tampons
double ExtMapBuffer1[] ;
double ExtMapBuffer2[] ;
double topBuffer[] ;


bool initFinished=false ; // ajouter une variable qui se souviendra de l'état de l'initialisation.
// false - l'initialisation n'a pas encore eu lieu.
// vrai - a été initialisé
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur personnalisé |
//+------------------------------------------------------------------+
int init()
{
//---- indicateurs
SetIndexStyle(0,DRAW_LINE) ;
SetIndexBuffer(0,ExtMapBuffer1) ;
SetIndexStyle(1,DRAW_LINE) ;
SetIndexBuffer(1,ExtMapBuffer2) ;
SetIndexStyle(2,DRAW_NONE) ;
SetIndexBuffer(2,topBuffer) ;

IndicateurDigits(5) ;
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| Fonction personnalisée de désinitialisation de l'indicateur |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| Fonction d'itération de l'indicateur personnalisé |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(),
limite ;

si(barres comptées>0)
barres comptées.. ;

limit=Bars-counted_bars ;
//----
for(int i=0;i<limit;i++)

{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i) ;
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i) ;

si(initFinished==false)
{
IndicatorShortName("MACD_max-min") ;

int win_idx=WindowFind("MACD_max-min") ;
// trouver le numéro de la sous-fenêtre de notre indicateur

si(win_idx<0)
{
// si le numéro de la sous-fenêtre est -1, il y a une erreur
Print("Fenêtre non trouvée") ;
retour(0) ;
}

double top=WindowPriceMax(win_idx) ;
//Trouver la valeur maximale de l'échelle verticale de la sous-fenêtre spécifiée du graphique actuel.


ObjectCreate("max",OBJ_HLINE,win_idx,0,top) ;
// dessiner une ligne horizontale dans une sous-fenêtre de notre indicateur

ObjectSet("max",OBJPROP_COLOR,Yellow) ;
ObjectSet("max",OBJPROP_WIDTH,0) ;

WindowRedraw() ;
// redessinez la fenêtre pour voir la ligne

initFinished=true ;
// le dessin est terminé

}

topBuffer[i]=top ;


}

//----
retour(0) ;
}
//+------------------------------------------------------------------+

 
MK07:

win_ind s'avère être correct.

ObjectCreate("max",OBJ_HLINE,win_idx,0,top) ; dessine dans la bonne fenêtre,


ObjectSet("max",OBJPROP_COLOR,Yellow) ; dessine dans la bonne couleur,

ObjectSet("max",OBJPROP_WIDTH,0) ; dessine la ligne correcte,

mais ne définit pas le paramètre supérieur dans

double top=WindowPriceMax(win_idx) ;

et topBuffer[] est vide.


Code

#propriété indicator_separate_window
#property indicator_buffers 3
#propriété indicator_color1 Lime
#property indicator_color2 Red
//--- tampons
double ExtMapBuffer1[] ;
double ExtMapBuffer2[] ;
double topBuffer[] ;


bool initFinished=false ; // ajouter une variable qui se souviendra de l'état de l'initialisation.
// false - l'initialisation n'a pas encore eu lieu.
// vrai - a été initialisé
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur personnalisé |
//+------------------------------------------------------------------+
int init()
{
//---- indicateurs
SetIndexStyle(0,DRAW_LINE) ;
SetIndexBuffer(0,ExtMapBuffer1) ;
SetIndexStyle(1,DRAW_LINE) ;
SetIndexBuffer(1,ExtMapBuffer2) ;
SetIndexStyle(2,DRAW_NONE) ;
SetIndexBuffer(2,topBuffer) ;

IndicateurDigits(5) ;
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| Fonction personnalisée de désinitialisation de l'indicateur |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| Fonction d'itération de l'indicateur personnalisé |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(),
limite ;

si(barres comptées>0)
barres comptées.. ;

limit=Bars-counted_bars ;
//----
for(int i=0;i<limit;i++)

{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i) ;
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i) ;

si(initFinished==false)
{
IndicatorShortName("MACD_max-min") ;

int win_idx=WindowFind("MACD_max-min") ;
// trouver le numéro de la sous-fenêtre de notre indicateur

si(win_idx<0)
{
// si le numéro de la sous-fenêtre est -1, il y a une erreur
Print("Fenêtre non trouvée") ;
retour(0) ;
}

double top=WindowPriceMax(win_idx) ;
//Trouver la valeur maximale de l'échelle verticale de la sous-fenêtre spécifiée du graphique actuel.


ObjectCreate("max",OBJ_HLINE,win_idx,0,top) ;
// dessiner une ligne horizontale dans une sous-fenêtre de notre indicateur

ObjectSet("max",OBJPROP_COLOR,Yellow) ;
ObjectSet("max",OBJPROP_WIDTH,0) ;

WindowRedraw() ;
// redessinez la fenêtre pour voir la ligne

initFinished=true ;
// le dessin est terminé

}

topBuffer[i]=top ;


}

//----
retour(0) ;
}
//+------------------------------------------------------------------+



Désolé de m'en mêler.

topBuffer[i] derrière la boucle et le dessin, essayez ceci :

int start()
  {
   int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
       
      { 
        ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
        ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);
        
          if(initFinished==false)
           { 
             int win_idx=WindowFind("MACD_max-min");
             // находим номер подокна нашего индикатора
      
             if(win_idx<0)
              {
               // если номер подокна равен -1, то возникла ошибка
                 Print("Окно не найдено");
                 return(0);
              }  
              
             double   top=WindowPriceMax(win_idx); 
              //находим максимальное значение вертикальной шкалы указанного подокна текущего графика
             topBuffer[i]=top;
             Comment( "\n"," top = ",top); 

             ObjectCreate("max",OBJ_HLINE,win_idx,0,0);
             // рисуем горизонтальную линию в подокне нашего индикатора
             ObjectSet("max", OBJPROP_PRICE1, top);  
             ObjectSet("max",OBJPROP_COLOR,Yellow);
             ObjectSet("max",OBJPROP_WIDTH,0);
 
             WindowRedraw();      
             // перерисовываем окно, чтобы увидить линиию   
      
             initFinished=true;
            // рисование закончено  
        
           } 
        
            
                
        
      }  
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
//Пробуйте с учетом мнения alsu. 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
double ExtMapBuffer1[],ExtMapBuffer2[];
int init(){SetIndexStyle(0,DRAW_LINE);SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);SetIndexBuffer(1,ExtMapBuffer2);
IndicatorShortName("MACD_max-min");return(0);}
int deinit(){return(0);}
//+------------------------------------------------------------------+
int start(){int counted_bars=IndicatorCounted(),limit,win_idx;double top;
if(counted_bars>0)counted_bars--;limit=Bars-counted_bars;win_idx=WindowFind("MACD_max-min");
for(int i=0;i<limit;i++){ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
  ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);}
  top=WindowPriceMax(win_idx);ObjectDelete("max");
  if(ObjectFind("max")!=win_idx){ObjectCreate("max",OBJ_HLINE,win_idx,Time[0],top);
  ObjectSet("max",OBJPROP_COLOR,Yellow);ObjectSet("max",OBJPROP_WIDTH,0);}return(0);}
//+------------------------------------------------------------------+
 
Bonjour, aidez-moi s'il vous plaît. Je suis un débutant et j'ai installé MetaFX et le conseiller expert sur la démo fonctionne et ne veut pas fonctionner sur l'original.
 

Bonjour !

Veuillez m'indiquer la bonne direction :

On me donne N variables externes de même type. Comment choisir la valeur maximale parmi celles-ci sans surcharger le code - MathMax renvoie le maximum de deux valeurs, mais si c'est, disons, 20 ?

Ou, comment créer un tableau à partir de ces données, puis appliquer ArrayMaximum?

extern int A = 10;
extern int .......;

extern int N = 1253;

Merci d'avance !

 
Roll:

https://docs.mql4.com/ru/array/ArrayMaximum

int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)
Recherche de l'élément ayant la valeur maximale. La fonction renvoie la position de l'élément maximal dans le tableau.
Paramètres :
array[] - Tableau numérique, qui est recherché.
count - Nombre d'éléments à rechercher.
Start - L'index de départ pour la recherche.
Exemple :
double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};
int maxValueIdx=ArrayMaximum(num_array) ;
Print("Valeur maximale = ", num_array[maxValueIdx]) ;


Mais, sous la forme

int Max [N] = {A,.....,N};

le tableau n'est pas créé.

Où : A,......N sont les variables données du même type. Nombre de variables = N

 

Exemple de création d'un tableau de chaînes de caractères à partir de variables externes (script) :

extern string sym1="GBPUSD";
extern string sym2="GBPJPY";
extern string sym3="EURUSD";
extern string sym4="EURJPY";
extern string sym5="AUDUSD";
extern string sym6="AUDJPY";
extern string sym7="NZDUSD";
extern string sym8="USDCAD";

string sym[8];
//+------------------------------------------------------------------+
int init(){sym[1]=sym1;sym[2]=sym2;sym[3]=sym3;sym[4]=sym4;
   sym[5]=sym5;sym[6]=sym6;sym[7]=sym7;sym[8]=sym8;return(0);}

int start(){Alert("символ  ",sym[1]);return(0);}
 
Roll:

Exemple de création d'un tableau de chaînes de caractères à partir de variables externes (script) :


Merci !

Cela a fonctionné, mais avec une correction : au lieu de

int init(){sym[1]=sym1;............

faire ce qui suit

int init(){sym[0]=sym1;.......

et ensuite tous les éléments sont comptés.

 
r772ra:

Désolé pour l'intrusion.

topBuffer[i] derrière la boucle et le dessin, essayez de cette façon :

Votre option ne fonctionne pas, mais un GRAND MERCI pour votre attention, votre travail et votre compréhension des problèmes des autres.