[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
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
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) ;
}
//+------------------------------------------------------------------+
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 :
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 !
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.
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) :
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.
Désolé pour l'intrusion.
topBuffer[i] derrière la boucle et le dessin, essayez de cette façon :