Questions des débutants MQL5 MT5 MetaTrader 5 - page 1231

 

J'essaie de faire une entrée simple. Comme je le voulais, si le prix d'ouverture est inférieur au prix de clôture d'un certain nombre de points (sur la barre précédente), alors on achète au début d'une nouvelle barre, en tenant compte de la prise de profit et du stop loss. Mais quelque chose semble fonctionner d'une manière différente de celle que je voulais. Aidez-moi à comprendre


   MqlRates rt[1];

   if(CopyRates(_Symbol,_Period,0,1,rt)!=1)
     {
      Print("CopyRates of ",_Symbol," failed, no history");
      return;
     }
   
   ENUM_ORDER_TYPE signal=WRONG_VALUE;

      if(rt[1].open - rt[1].close >= padenie) 
	 {
         signal=ORDER_TYPE_BUY;
         printf(rt[1].open+"____"+rt[1].close);
         }
         
      if(signal !=WRONG_VALUE && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && Bars(_Symbol,_Period)>100)
         ExtTrade.PositionOpen(_Symbol,signal,1,SYMBOL_ASK,SymbolInfoDouble(_Symbol,SYMBOL_BID)-sl,SymbolInfoDouble(_Symbol,SYMBOL_ASK)+tp);
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Технические индикаторы требуют для своих расчетов указания значений цен и/или значений объемов, на которых они будут считаться. Существуют 7 предопределенных идентификаторов перечисления ENUM_APPLIED_PRICE, для указания нужной ценовой базы расчетов. Если технический индикатор для своих расчетов использует ценовые данные, тип которых задается...
 
BorisD:

J'essaie de faire une entrée simple. Comme je le voulais, si le prix d'ouverture est inférieur au prix de clôture d'un certain nombre de points (sur la barre précédente), alors on achète au début d'une nouvelle barre, en tenant compte de la prise de profit et du stop loss. Mais quelque chose semble fonctionner d'une manière différente de celle que je voulais. Veuillez m'aider à comprendre


Erreur 1 : Vous copiez UN élément. Par conséquent, l'index de l'élément sera [0].

Ouverture 100, Fermeture 105 - bull bar. Ouverture - Fermeture = 100 - 105 = - 5. La valeur '-5' sera toujours inférieure à la valeur définie, car le résultat est un nombre négatif.

Ouverture 110, Fermeture 103 - barre baissière. Ouverture - Fermeture = 110 - 103 = 7. 7 est un nombre positif et cela fonctionnera déjà correctement.


En résumé, il faut corriger la référence à l'indice (au lieu de [1], il faut se référer à l'indice [0]). Avant de faire le calcul, considérez le type de bougie : si elle est haussière ou baissière.

 

Une continuation de la question des constructions DRAW_HISTOGRAM2.

Exemple :

// Индикатор Проба DRAW_HISTOGRAM2.mq5
//+------------------------------------------------------------------+
#property indicator_chart_window                   
#property indicator_buffers   20                    
#property indicator_plots     20                  

#property indicator_color1    clrOrange                
#property indicator_color2    clrOrange               
#property indicator_color3    clrLimeGreen        
#property indicator_color4    clrLimeGreen        

#property indicator_type5     DRAW_HISTOGRAM2
#property indicator_color5    clrOrange               
#property indicator_type6     DRAW_HISTOGRAM2
#property indicator_color6    clrLimeGreen        

//#property indicator_color9    clrRed                

double
   Line_High_Up[], Line_High_Dn[], Hist_High_Up[], Hist_High_Dn[],
   Line_Low_Up[],  Line_Low_Dn[],  Hist_Low_Up[],  Hist_Low_Dn[],  Line_Red[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit() 
   { 
   SetIndexBuffer     (0, Line_High_Up,      INDICATOR_DATA); 
   PlotIndexSetInteger(0, PLOT_DRAW_TYPE,    DRAW_LINE);      
   SetIndexBuffer     (1, Line_High_Dn,      INDICATOR_DATA); 
   PlotIndexSetInteger(1, PLOT_DRAW_TYPE,    DRAW_LINE);      

   SetIndexBuffer     (2, Line_Low_Up,       INDICATOR_DATA);
   PlotIndexSetInteger(2, PLOT_DRAW_TYPE,    DRAW_LINE);     
   SetIndexBuffer     (3, Line_Low_Dn,       INDICATOR_DATA);
   PlotIndexSetInteger(3, PLOT_DRAW_TYPE,    DRAW_LINE);     

   SetIndexBuffer     (4, Hist_High_Up,      INDICATOR_DATA); 
   SetIndexBuffer     (5, Hist_High_Dn,      INDICATOR_DATA);

   SetIndexBuffer     (6, Hist_Low_Up,       INDICATOR_DATA);
   SetIndexBuffer     (7, Hist_Low_Dn,       INDICATOR_DATA);

   //SetIndexBuffer     (8, Line_Red,          INDICATOR_DATA);
   //PlotIndexSetInteger(8, PLOT_DRAW_TYPE,    DRAW_LINE);     
   }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[]   )                   
   {  
   int i;
   for(i=prev_calculated; i<=rates_total-1; i++)      
      {
      Line_High_Up[i] = high[i] + 50*_Point;
      Line_High_Dn[i] = high[i] + 30*_Point;
      Line_Low_Up[i]  = low[i]  - 30*_Point;
      Line_Low_Dn[i]  = low[i]  - 50*_Point;

      Hist_High_Up[i] = Line_High_Up[i];
      Hist_High_Dn[i] = Line_High_Dn[i];
      Hist_Low_Up[i]  = Line_Low_Up[i];
      Hist_Low_Dn[i]  = Line_Low_Dn[i];
      
      //Line_Red[i]     = low[i]  - 70*_Point;
      }
   return(i-1);
   }           
//+------------------------------------------------------------------+

Dans l'indicateur présenté, il a été possible de construire les deux histogrammes. Une particularité inattendue était la suivante :

Pour les lignes normales dans les entrées #property indicator_colorn, #property indicator_typen etc., la valeur de n est supérieure de 1 à l'index du tampon.
De plus, cette exigence est maintenue même si les indices des tampons ne sont pas spécifiés dans une ligne, et qu'il y a de l'espace libre entre les indices adjacents.
Par exemple, si les index 0, 1, 2, 3, 8 sont utilisés, les cinq lignes seront affichées.

Une autre exigence concerne les constructions de type DRAW_HISTOGRAM2, à savoir :
Si des histogrammes sont spécifiés dans une ligne, les entrées #propriété indicateur_colorn, #propriété indicateur_typen etc.
n valeur est calculée à partir d'un compte et non d'un index de tampon. Dans l'exemple, les indices 5 et 6 sont spécifiés, bien que logiquement 5 et 7 soient attendus.

Toutes ces absurdités font qu'il est impossible de comprendre quelle devrait être la valeur de n pour la ligne régulière (rouge) qui suit les deux histogrammes.
Dans cet exemple, la valeur de n=9 est spécifiée, mais cela ne fonctionne pas, donc toutes les lignes relatives au tampon 8 sont commentées. Cela n'a pas fonctionné pour d'autres valeurs de n non plus.

Conclusion : tous les histogrammes doivent être spécifiés dans une ligne à la fin de la liste des tampons. De plus, leurs valeurs doivent être calculées en une seule ligne par comptage quantitatif (malgré leurs indices tampons).
Il est impossible de le comprendre, mais il est possible de vivre avec.

Au fait : aucun effet de l'ordre des tampons INDICATOR_CALCULATIONS et INDICATOR_DATA n'a été détecté.

Merci à Vladimir Karputov et Artem Trishkin pour leur participation à la résolution de ce problème.

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
При создании пользовательского индикатора можно указать один из 18 типов графического построения (способа отображения на главном окне графика или в подокне графика), значения которых указаны в перечислении ENUM_DRAW_TYPE. В зависимости от стиля рисования, может потребоваться от одного до четырех буферов значений (отмеченных как INDICATOR_DATA...
 
User_mt5:

Une continuation de la question des constructions DRAW_HISTOGRAM2.

Exemple :

Dans l'indicateur présenté, il a été possible de construire les deux histogrammes. Une particularité inattendue était la suivante :

Pour les lignes normales dans les entrées #property indicator_colorn, #property indicator_typen etc., la valeur de n est supérieure de 1 à l'index du tampon.
De plus, cette exigence est maintenue même si les indices des tampons ne sont pas spécifiés dans une ligne, et qu'il y a de l'espace libre entre les indices adjacents.
Par exemple, si les index 0, 1, 2, 3, 8 sont utilisés, les cinq lignes seront affichées.

Une autre exigence concerne les constructions de type DRAW_HISTOGRAM2, à savoir :
Si des histogrammes sont spécifiés dans une ligne, les entrées #propriété indicateur_colorn, #propriété indicateur_typen etc.
n valeur est calculée à partir d'un compte et non d'un index de tampon. Dans l'exemple, les indices 5 et 6 sont spécifiés, bien que logiquement 5 et 7 soient attendus.

Toutes ces absurdités font qu'il est impossible de comprendre quel devrait être l'indice de la ligne régulière (rouge) qui suit les deux histogrammes.
Dans cet exemple, la valeur n=9 est spécifiée, mais cela ne fonctionne pas, donc toutes les lignes relatives au tampon 8 sont commentées. Cela n'a pas fonctionné pour d'autres valeurs de n non plus.

Conclusion : tous les histogrammes doivent être spécifiés dans une ligne à la fin de la liste des tampons. De plus, leurs valeurs doivent être calculées en une seule ligne par comptage quantitatif (malgré leurs indices tampons).
Il est impossible de le comprendre, mais il est possible de vivre avec.

Au fait : aucun effet de l'ordre des tampons INDICATOR_CALCULATIONS et INDICATOR_DATA n'a été détecté.

Merci à Vladimir Karputov et Artem Trishkin pour leur participation à la résolution du problème.

Vous êtes les bienvenus. Mais vous n'avez pas résolu le problème.

Il n'y a pas de dépendance à l'égard de l'ordre des différents types de tampons dans les indicateurs. Seuls ceux qui sont calculés doivent se trouver après ceux qui sont tirés.

 
Artyom Trishkin:

Vous êtes les bienvenus. Mais vous n'avez pas résolu le problème.

Les indicateurs ne dépendent pas de l'ordre des différents types de tampons. Seuls ceux qui sont calculés doivent être après ceux qui sont tirés.

Sans grande certitude, mais je continue à croire que ces deux affirmations sont fausses.

Quant à "aucune dépendance". Je n'ai pas trouvé de moyen de mapper le huitième tampon dans le dernier exemple. Quel devrait être l'ordre... Peut-être que tu peux le faire ?

A propos de "calculé ... après tirage". Mon indicateur utilise plus de 200 tampons, dont les 100 premiers sont des tampons calculés.
Dans mon cas, ce sont toutes des lignes simples, donc n pour #propriété est calculé à partir de la valeur de l'index du tampon : n=b+1. Et des lignes simples sont affichées. La confusion commence avec l'apparition des histogrammes.

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
При создании пользовательского индикатора можно указать один из 18 типов графического построения (способа отображения на главном окне графика или в подокне графика), значения которых указаны в перечислении ENUM_DRAW_TYPE. В зависимости от стиля рисования, может потребоваться от одного до четырех буферов значений (отмеченных как INDICATOR_DATA...
 
User_mt5:

Sans grande certitude, mais je continue à croire que ces deux affirmations sont fausses.

Quant à "aucune dépendance". Je n'ai pas trouvé de moyen de mapper le huitième tampon dans le dernier exemple. Quel devrait être l'ordre... Peut-être que tu peux le faire ?

A propos de "calculé ... après tirage". Mon indicateur utilise plus de 200 tampons, dont les 100 premiers sont des tampons calculés.
Dans mon cas, ce sont toutes des lignes simples, donc n pour #propriété est calculé à partir de la valeur de l'index du tampon : n=b+1. Et des lignes simples sont affichées. Les malentendus commencent avec l'apparition des histogrammes.

Je ne vais pas discuter. Je crée les tampons pour qu'ils soient dessinés dans n'importe quel ordre. Mais dès que j'ajoute un tampon de calcul entre eux, le tracé graphique des indicateurs à dessiner ne s'affiche pas sur le graphique. Leurs valeurs restent dans la fenêtre de données. J'ai effectué de nombreux tests pour décrire la création des indicateurs et de leurs tampons dans les articles. Je suis arrivé à la conclusion que seuls les tampons calculés (leur emplacement dans l'ordre de déclaration des tampons indicateurs) affectent d'une manière ou d'une autre l'affichage/le non-affichage des tampons dessinés.

 
Artyom Trishkin:

Je ne vais pas discuter. Je crée des tampons de dessin dans n'importe quel ordre. Mais dès que j'ajoute un tampon de calcul entre eux, les constructions graphiques des indicateurs à dessiner ne seront pas affichées sur le graphique. Leurs valeurs restent dans la fenêtre de données. J'ai effectué de nombreux tests pour décrire la création des indicateurs et de leurs tampons dans les articles. Je suis arrivé à la conclusion que seuls les tampons calculés (leur emplacement dans l'ordre de déclaration des tampons indicateurs) affectent en quelque sorte l'affichage ou non des tampons dessinés.

Je ne suis pas sûr non plus.

Depuis quelque temps (les 3 ou 4 derniers mois), des phénomènes incompréhensibles et alarmants se produisent dans la fenêtre de symboles en général.

Tout d'abord, j'ai remarqué que le dessin de l'indicateur peut simplement se déplacer dans n'importe quelle direction, par exemple vers le bas ou vers la droite, sans raison apparente. Juste au moment d'un nouveau tick, l'indicateur entier glisse soudainement vers le bas. La même chose se produit parfois lorsque le PC est allumé pour la première fois.

Deuxièmement, si certains tampons sont supprimés puis compilés, les "traces" de ces constructions supprimées subsistent jusqu'à certains événements inexpliqués (TF aller et retour, nouvelle recompilation, mise à jour des paramètres, etc.) ) Il y a probablement des "traces" dans la fenêtre de données, qui sont des souvenirs d'une époque révolue (techniquement, les tableaux ne sont nettoyés que de manière forcée, et dans MT5, si le tableau n'est pas nécessaire, il est simplement "désenregistré", mais les données restent ; bien sûr, tout ceci est un problème de MT5)
--

Il y a une blague : l'histoire de notre patrie n'est pas prévisible. On peut dire la même chose de MT5 : trop mystérieux :)
--

A propos, j'ai fait quelques changements dans mon indicateur réel, selon ma dernière déclaration. Ça ne marche pas. J'ai ajouté DRAW_HISTOGRAM2 et INDICATOR_CALCULATIONS pour les tableaux de réflexion - cela fonctionne.

Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
  • www.metatrader5.com
Графики в торговой платформе отображают изменение котировок финансовых инструментов во времени. Они необходимы для проведения технического анализа и работы советников. Они позволяют трейдерам наглядно следить за котировками валют и акций в режиме реального времени и моментально реагировать на любое изменение ситуации на финансовых рынках...
 
User_mt5:


Pas besoin d'être amateur - créez le conseiller expert en blanc à l'aide de l'assistant MQL5 - de cette façon, vous ferez le moins d'erreurs possible lors de la déclaration des constructions graphiques et des tableaux d'indicateurs.

 
User_mt5:

Je ne suis pas sûr non plus.

Depuis quelque temps (les 3-4 derniers mois), des phénomènes incompréhensibles et alarmants se produisent dans la fenêtre de symboles en général.

Premièrement, j'ai remarqué que la construction de l'indicateur peut simplement se déplacer dans n'importe quelle direction, par exemple vers le bas ou vers la droite, sans raison apparente. Juste au moment d'un nouveau tick, l'indicateur entier glisse soudainement vers le bas. La même chose se produit parfois lorsque le PC est allumé pour la première fois.

Deuxièmement, si certains tampons sont supprimés puis compilés, les "traces" de ces constructions supprimées subsistent jusqu'à certains événements inexpliqués (TF aller et retour, nouvelle recompilation, mise à jour des paramètres, etc.) ) Il y a probablement des "traces" dans la fenêtre de données, qui sont des souvenirs d'une époque révolue (techniquement, les tableaux ne sont nettoyés que de manière forcée, et dans MT5, si le tableau n'est pas nécessaire, il est simplement "désenregistré", mais les données restent ; bien sûr, tout ceci est un problème de MT5)
--

Il y a une blague : l'histoire de notre patrie n'est pas prévisible. On peut dire la même chose de MT5 : trop mystérieux :)
--

A propos, j'ai fait quelques changements dans mon indicateur réel, selon ma dernière déclaration. Ça ne marche pas. J'ai ajouté DRAW_HISTOGRAM2 et INDICATOR_CALCULATIONS pour les tableaux de réflexion - cela fonctionne.

Pas sur moi.

Le reste - vos bugs et votre inattention (sauf le décalage de la ligne de l'indicateur, mais je pense qu'il a été corrigé, si ma mémoire est bonne).

Quel est votre modèle ?

 
Vladimir Karputov:

Pas besoin d'être amateur - créez un Expert Advisor vierge à l'aide de l'assistant MQL5 - de cette façon, vous ferez le moins d'erreurs possible lors de la déclaration des constructions graphiques et des tableaux d'indicateurs.

Pouvez-vous me dire comment refléter correctement le 8e tampon dans mon dernier exemple ? Sans aucun amateurisme ?
Pouvez-vous me dire quelles sont les règles ?

Artyom Trishkin:

Pas sur moi.

Le reste, ce sont vos erreurs et votre inattention (sauf le décalage de la ligne de l'indicateur, mais je pense qu'il a été corrigé, si ma mémoire est bonne).

Quelle est votre construction ?

Pouvez-vous me dire comment refléter correctement le 8e tampon dans mon dernier exemple ? Avec toute l'attention requise ?
Et donner des raisons ?
Construire 2530.

--
Je suis encore en train d'apprendre, donc je vous serais extrêmement reconnaissant si vous pouviez m'indiquer où lire tout cela dans la documentation.