Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 1091

 
FiVik:

Bon après-midi. J'ai une question : où puis-je voir un exemple de code permettant d'afficher les valeurs d'un indicateur pour différentes périodes sur un graphique de prix ?

Je ne peux pas le googler, peut-être que je fais une mauvaise demande.

Je veux afficher dans la deuxième colonne du graphique des prix l'écart type des bandes de Bollinger de H1 à W1. La deuxième colonne montre les valeurs obtenues en multipliant l'écart type par les coefficients.

Bandes de Bollinger modifiées.

Mots-clés pour la recherche codobase "Multi timeframe".

Le texte peut être affiché en utilisant OBJ_LABEL.

 
LRA:

1. Essayez dans MetaEditor : Fichier --> Ouvrir le dossier de données partagées. Vous verrez le chemin vers le dossier. Cette question a été discutée à de nombreuses reprises, voici un lien, par exemple

2. Essayez-le sans inclure dans un premier temps. Quand vous le déboguerez, vous commencerez à l'inclure.

3. insérez vos sources ici, soit en utilisant le bouton SRC ci-dessus, soit en utilisant le bouton Joindre un fichier ci-dessous.

Merci beaucoup.
 

Veuillez me conseiller sur la façon de tracer une ligne horizontale au niveau du prix d'ouverture de la barre à 07:00.

J'ai écrit ce code, mais la ligne n'est pas tracée pour une raison quelconque. Où se trouve l'erreur ?

extern string StartTime = "07:00";          //Начальное время для анализа, 00:00 EST
extern string AlTime = "18:55";          //Время для трейдинга
extern string EndTime   = "20:00";          //Время экспирации
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {       
   ObjectCreate(ChartID(),"CORDON",OBJ_HLINE,0,0,Ask);        //созд гор линию по цене Ask
   
   ObjectSetInteger(ChartID(),"CORDON",OBJPROP_COLOR,clrDarkBlue);  //цвет темно-сиий
      
   ObjectSetInteger(ChartID(),"CORDON",OBJPROP_WIDTH,1);  //толщина линии 1
      
   ObjectSetInteger(ChartID(),"CORDON",OBJPROP_STYLE,STYLE_SOLID);  //линия сплош
   
   int IndexOfBar = iBarShift(ChartID(),PERIOD_H1, StringToTime(StartTime), true); //Считаем индекс бара по заданному времени StartTime
   double StartPrice = Open[IndexOfBar];                    //Получаем цену по индексу
   
   ObjectMove(ChartID(),"CORDON", 0, 0, StartPrice);          // меняем распол линии   
   return(0);
   }
 
RichLux:

Veuillez me conseiller sur la façon de tracer une ligne horizontale au niveau du prix d'ouverture de la barre à 07:00.

J'ai écrit ce code, mais la ligne n'est pas tracée pour une raison quelconque. Où se trouve l'erreur ?

Si vous supprimez ObjectMove, la ligne est visible ? Essayez Alert(StartPrice) ;
 
LRA:
Si vous supprimez ObjectMove, la ligne est visible ? Essayez Alert(StartPrice) ;

Si vous supprimez ObjectMove, vous ne pouvez pas voir la ligne, mais sivous écrivez une valeur numérique au lieu de "IndexOfBar", par exemple, "double StartPrice = Open[5] ;", il trace la ligne au prix d'ouverture de la cinquième barre.

Merci pour l'idée avec Alert - il montre la valeur "0".

D'ailleurs, la ligne existe aussi dans la liste des objets avec la valeur 0.

 
RichLux:

Veuillez me conseiller sur la façon de tracer une ligne horizontale au niveau du prix d'ouverture de la barre à 07:00.

J'ai écrit ce code, mais la ligne n'est pas tracée pour une raison quelconque. Où se trouve l'erreur ?

Vous ne pouvez pas dessiner et calculer dans l'inite, c'est une erreur grossière. L'inite doit terminer son travail le plus rapidement possible.

L'erreur ici estint IndexOfBar = iBarShift(ChartID()_Symbol,PERIOD_H1, StringToTime(StartTime), true) ; //lire l'indice de la barre par le temps donné StartTime

L'heure peut être définie directement au format date, sans qu'il soit nécessaire de perdre du temps de machine pour la conversion :

#property strict
#property  show_inputs

extern datetime StartTime = D'07:00';          //Начальное время для анализа, 00:00 EST
extern datetime AlTime = D'18:55';          //Время для трейдинга
extern datetime EndTime   = D'20:00';          //Время экспирации
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
{       
   ObjectCreate(0,"CORDON",OBJ_HLINE,0,0,Ask);        //созд гор линию по цене Ask
   
   ObjectSetInteger(0,"CORDON",OBJPROP_COLOR,clrDarkBlue);  //цвет темно-сиий
      
   ObjectSetInteger(0,"CORDON",OBJPROP_WIDTH,1);  //толщина линии 1
      
   ObjectSetInteger(0,"CORDON",OBJPROP_STYLE,STYLE_SOLID);  //линия сплош
   
   int IndexOfBar = iBarShift(_Symbol,0, StartTime, false); //Считаем индекс бара по заданному времени StartTime
   double StartPrice = Open[IndexOfBar];                    //Получаем цену по индексу
   Print(IndexOfBar,", ",StartPrice);
   ObjectMove(0,"CORDON", 0, 0, StartPrice);          // меняем распол линии   
}
   
 
evillive:

Vous ne pouvez pas dessiner et calculer dans l'unité, c'est une erreur grossière. L'init doit achever son travail le plus rapidement possible.

L'erreur ici -int IndexOfBar = iBarShift(ChartID()_Symbol,PERIOD_H1, StringToTime(StartTime), true) ; //lire l'indice de la barre par le temps spécifié StartTime

L'heure peut être définie directement au format date, sans qu'il soit nécessaire de perdre du temps de machine pour la conversion :

Merci pour ces conseils précieux pour moi.

Et un merci spécial pour m'avoir remonté le moral en trouvant l'erreur. Je commence à croire à nouveau que je peux devenir ami avec MQL4.

 
RichLux: La version du code ne fonctionne pas. La ligne sur le graphique n'apparaît toujours pas...
// Вставил такой код в скрипт - линию рисует синюю на черном графике слабо видно
#property strict                                                       // -------- Возможно, Дело в этой строке
        
extern string StartTime = "07:00";          //Начальное время для анализа, 00:00 EST
extern string AlTime = "18:55";          //Время для трейдинга
extern string EndTime   = "20:00";          //Время экспирации
void OnStart()
{
   ObjectCreate("CORDON",OBJ_HLINE,0,0,Ask);    //созд гор линию по цене Ask   --- Для текущего графика ID пропускаем
   ObjectSetInteger(0,"CORDON",OBJPROP_COLOR,DarkBlue);  //цвет темно-сиий  --- 0 = текущий график   DarkBlue - то же самое
   ObjectSetInteger(0,"CORDON",OBJPROP_WIDTH,1);  //толщина линии 1
   ObjectSetInteger(0,"CORDON",OBJPROP_STYLE,STYLE_SOLID);  //линия сплош

   // Первый параметр нужен типа string, а функция ChartID возвращает long
   int IndexOfBar = iBarShift(NULL,PERIOD_H1, StringToTime(StartTime), true); //  --- NULL = текущий график  ЗДЕСЬ И БЫЛА ОШИБКА???
   double StartPrice = Open[IndexOfBar];                    //Получаем цену по индексу
   ObjectMove(ChartID(),"CORDON", 0, 0, StartPrice);          // меняем распол линии   
}
 
evillive:

Vous ne pouvez pas dessiner et calculer dans l'unité, c'est une erreur grossière. L'init doit être terminé le plus rapidement possible.


Et si vous prenez les calculs de l'inite dans une fonction séparée et que vous insérez ensuite cette fonction dans l'inite, il ne s'agira pas d'une erreur grossière ?

LRA:

Cela fonctionne déjà.

 
RichLux:

Et si vous prenez les calculs de l'inite dans une fonction séparée, et que vous insérez ensuite cette fonction dans l'inite, il ne s'agira pas d'une erreur grossière ?

Si le code est exécuté trop longtemps, l'inite se terminera de manière forcée et le code n'aura tout simplement pas le temps d'être exécuté. Le code exécuté, y compris les appels de fonctions secondaires, doit se trouver dans les fonctions prédéfinies de MQL - OnTick() pour les Expert Advisors, OnStart() pour les scripts, OnCalculate() pour les indicateurs.

L'inite doit contenir le minimum de code, seulement les choses qui doivent être exécutées une fois, juste avant le début du programme. Par exemple, l'initialisation des variables globales, des tableaux, des tampons d'indicateurs.