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

 
Artyom Trishkin:
Il s'agit d'une simple restriction logicielle, qui n'est pas liée aux paramètres par défaut de la fenêtre des paramètres de l'EA - ces paramètres appartiennent aux paramètres de l'EA, et ils sont contrôlés dans l'EA elle-même.

Merci) Je comprends maintenant comment il est mis en œuvre.

 
Alexandr Sokolov:
Comment obtenir les valeurs de profit et de perte lorsque le TP ou le SL est atteint dans le code ?

Par exemple, il existe la fonction AccountFreeMarginCheck(), avec laquelle vous pouvez obtenir la marge. Et il n'existe aucune fonction permettant de déterminer la valeur du point, du moins pour le symbole, le volume et le type d'ordre spécifiés.

MQL4

https://www.mql5.com/ru/forum/131859/page3

Vous pouvez trouver beaucoup de fonctions ici. Peut-être que vous pouvez réparer quelque chose pour vous et vous serez bien.

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 

et comment définir la fonction de recalcul lorsque j'estime le graphique TF ?

 
Lomonosov1991:

et comment définir la fonction de recalcul lorsque j'estime le graphique TF ?

Il existe une documentation. Il est possible de regarder à travers parfois. Il existe une fonction : UninitializeReason(), elle renvoie le code de la raison de la désinitialisation. Et il y a même des exemples.

Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Причины деинициализации
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Причины деинициализации
  • www.mql5.com
//| get text description                                             | //| Expert deinitialization function                                 |
 

Bonsoir. À la demande d'un ami, j'ai réalisé une version modifiée de l'indicateurstochastique MT5 standard Stoch_HISTOGRAM_MQL5_3.

Cette version affiche l'indicateur sous forme de graphique à barres. Mon ami a demandé que les barres au-dessus de 50 soient vertes et que celles en dessous de 50 soient rouges.

J'ai réussi à manipuler les bargraphes mais je ne sais pas comment changer la couleur, ça m'a époustouflé. Aide, conseil, s'il vous plaît.

Je vais coller le code ci-dessous et joindre le fichier.

//+------------------------------------------------------------------+
//|                                       Stoch_HISTOGRAM_MQL5_3.mq5 |
//|                   Copyright 2009-2017, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009-2017, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_plots   3
#property indicator_type1   DRAW_LINE
#property indicator_type2   DRAW_LINE
#property indicator_type3   DRAW_HISTOGRAM2
#property indicator_type4   DRAW_HISTOGRAM2
#property indicator_color1  LightSeaGreen
#property indicator_color2  Blue
#property indicator_color3  Green
#property indicator_style2  STYLE_DOT
#property indicator_style3  STYLE_SOLID
//--- input parameters
input int InpKPeriod=5;  // K period
input int InpDPeriod=3;  // D period
input int InpSlowing=3;  // Slowing
//--- indicator buffers
double    ExtMainBuffer[];
double    ExtSignalBuffer[];
double    HISTOGRAM2_1[];
double    HISTOGRAM2_2[];
double    ExtHighesBuffer[];
double    ExtLowesBuffer[];
color     colors[]={clrRed,clrGreen};
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtMainBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtSignalBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,HISTOGRAM2_1,INDICATOR_DATA);
   SetIndexBuffer(3,HISTOGRAM2_2,INDICATOR_DATA);
   SetIndexBuffer(4,ExtHighesBuffer,INDICATOR_CALCULATIONS);
   SetIndexBuffer(5,ExtLowesBuffer,INDICATOR_CALCULATIONS);
//--- set accuracy
   IndicatorSetInteger(INDICATOR_DIGITS,2);
//--- set levels
   IndicatorSetInteger(INDICATOR_LEVELS,3);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,0,20);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,1,50);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,2,80);
////--- установим пустое значение для HISTOGRAM2
//   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);   
//--- set maximum and minimum for subwindow 
   IndicatorSetDouble(INDICATOR_MINIMUM,0);
   IndicatorSetDouble(INDICATOR_MAXIMUM,100);
//--- name for DataWindow and indicator subwindow label
   IndicatorSetString(INDICATOR_SHORTNAME,"Stoch_HISTOGRAM("+(string)InpKPeriod+","+(string)InpDPeriod+","+(string)InpSlowing+")");
   PlotIndexSetString(0,PLOT_LABEL,"Main");
   PlotIndexSetString(1,PLOT_LABEL,"Signal");
   PlotIndexSetString(2,PLOT_LABEL,"UP");
   PlotIndexSetString(3,PLOT_LABEL,"LOW");
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpKPeriod+InpSlowing-2);
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpKPeriod+InpDPeriod);
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,InpKPeriod+InpSlowing-2);
   PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,InpKPeriod+InpSlowing-2);
//--- initialization done
  }
//+------------------------------------------------------------------+
//| Stochastic Oscillator                                            |
//+------------------------------------------------------------------+
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,k,start;
//--- check for bars count
   if(rates_total<=InpKPeriod+InpDPeriod+InpSlowing)
      return(0);
//---
   start=InpKPeriod-1;
   if(start+1<prev_calculated) start=prev_calculated-2;
   else
     {
      for(i=0;i<start;i++)
        {
         ExtLowesBuffer[i]=0.0;
         ExtHighesBuffer[i]=0.0;
        }
     }
//--- calculate HighesBuffer[] and ExtHighesBuffer[]
   for(i=start;i<rates_total && !IsStopped();i++)
     {
      double dmin=1000000.0;
      double dmax=-1000000.0;
      for(k=i-InpKPeriod+1;k<=i;k++)
        {
         if(dmin>low[k])  dmin=low[k];
         if(dmax<high[k]) dmax=high[k];
        }
      ExtLowesBuffer[i]=dmin;
      ExtHighesBuffer[i]=dmax;
     }
//--- %K
   start=InpKPeriod-1+InpSlowing-1;
   if(start+1<prev_calculated) start=prev_calculated-2;
   else
     {
      for(i=0;i<start;i++) ExtMainBuffer[i]=0.0;
     }
//--- main cycle
   for(i=start;i<rates_total && !IsStopped();i++)
     {
      double sumlow=0.0;
      double sumhigh=0.0;
      for(k=(i-InpSlowing+1);k<=i;k++)
        {
         sumlow +=(close[k]-ExtLowesBuffer[k]);
         sumhigh+=(ExtHighesBuffer[k]-ExtLowesBuffer[k]);
        }
      if(sumhigh==0.0) ExtMainBuffer[i]=100.0;
         else          ExtMainBuffer[i]=sumlow/sumhigh*100;
      if(ExtMainBuffer[i]>50){
         HISTOGRAM2_1[i]=50; 
         HISTOGRAM2_2[i]=ExtMainBuffer[i]; 
         //colors[i]=clrGreen;
         //PlotIndexSetInteger(2,PLOT_LINE_COLOR,clrGreen);
         } 
      if(ExtMainBuffer[i]<50){
         HISTOGRAM2_1[i]=ExtMainBuffer[i]; 
         HISTOGRAM2_2[i]=50; 
         //colors[i]=clrRed;
         //PlotIndexSetInteger(2,PLOT_LINE_COLOR,clrRed);
         } 
      //PlotIndexSetInteger(2,PLOT_LINE_COLOR,colors[i]);
     }
//--- signal
   start=InpDPeriod-1;
   if(start+1<prev_calculated) start=prev_calculated-2;
   else
     {
      for(i=0;i<start;i++) ExtSignalBuffer[i]=0.0;
     }
   for(i=start;i<rates_total && !IsStopped();i++)
     {
      double sum=0.0;
      for(k=0;k<InpDPeriod;k++) sum+=ExtMainBuffer[i-k];
      ExtSignalBuffer[i]=sum/InpDPeriod;
     }
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }
//+------------------------------------------------------------------+
Dossiers :
 
Sergey Voytsekhovsky:

Bonsoir. À la demande d'un ami, j'ai réalisé une version modifiée de l'indicateurstochastique MT5 standard Stoch_HISTOGRAM_MQL5_3.

Cette version affiche l'indicateur sous forme de graphique à barres. Mon ami a demandé que les barres au-dessus de 50 soient vertes et que celles en dessous de 50 soient rouges.

J'ai réussi à manipuler les bargraphes mais je ne sais pas comment changer la couleur, ça m'a époustouflé. Aide, conseil, s'il vous plaît.

Je vais coller le code ci-dessous, je vais joindre le fichier.

C'est juste incroyable. Comment peut-on lire la documentation et voir DRAW_HISTOGRAM2 sans voir DRAW_COLOR_HISTOGRAM2 ?

Oh, et il y a des tampons supplémentaires déclarés.
 
Alexey Viktorov:

C'est juste incroyable. Comment peut-on lire la documentation et voir DRAW_HISTOGRAM2 sans voir DRAW_COLOR_HISTOGRAM2 ?

Oh, et les tampons sont redondants.

Merci pour votre commentaire. Oooh, vous n'avez pas idée de tout ce qu'on peut NE PAS remarquer, en lisant de la documentation, quand on cherche des moyens et des solutions au feeling, comme dans un brouillard, quand il n'y a pas de professeur, de mentor, de camarade plus expérimenté, etc. Merci beaucoup, j'ai déjà trouvé DRAW_COLOR_HISTOGRAM2, j'en comprends le sens, je vais le refaire maintenant.

Pourriez-vous m'en dire plus sur les tampons supplémentaires ? On ne peut pas avoir trop d'expérience, mais on peut avoir trop de tampons. :-0

 
Sergey Voytsekhovsky:

Merci pour votre commentaire. Oooh, vous n'avez pas idée de tout ce qu'on peut NE PAS remarquer, en lisant de la documentation, quand on cherche des moyens et des solutions au feeling, comme dans un brouillard, quand il n'y a pas de professeur, de mentor, de camarade plus expérimenté, etc. Merci beaucoup, j'ai déjà trouvé DRAW_COLOR_HISTOGRAM2, j'en comprends le sens, je vais le refaire maintenant.

Pourriez-vous m'en dire plus sur les tampons supplémentaires ? On ne peut pas avoir trop d'expérience, mais on peut avoir trop de tampons. :-0

Eh bien... Si la stochastique a 2 tampons, si je n'ai pas toutes les puces mémoire brûlées. Pour être exact, 2 d'entre eux le sont. Par conséquent, il convient de les sauvegarder uniquement, en les remplaçant par un affichage de l'histogramme. En fait, pour deux tracés, DRAW_COLOR_HISTOGRAM2 aura besoin de 6 tampons. Mais si j'ai dit "nombre", je voulais dire "ces lignes".

#property indicator_type1   DRAW_LINE
#property indicator_type2   DRAW_LINE
#property indicator_type3   DRAW_HISTOGRAM2
#property indicator_type4   DRAW_HISTOGRAM2

A mon avis, cela devrait être comme ceci

#property indicator_buffers 5
#property indicator_plots   2
#property indicator_type1   DRAW_COLOR_HISTOGRAM2 // основная 
#property indicator_type2   DRAW_LINE             // сигнальная
#property indicator_color1  clrGreen,clrRed       // цвет гистограмм
#property indicator_color2  clrBlue               // цвет линии
 

Salutations à tous !
Un indice, si vous savez.

Vous voyez, le vert (Vigor=0.1154) n'a même pas croisé le rouge (Signal=0.1133) à proximité, mais il a vendu. Et ce n'est pas un cas isolé.

En voici un autre.

Ici ils sont "fusionnés", mais toujours Vigor=0.0543 et Signal=0.0525.

Tout est "pronormalisé" partout.

Code de cette condition : && RVI_S_S >0 && RVI_S_M < RVI_S_S && RVI_S_M1 > RVI_S_S1

RVI_S_S (Signal-rouge), respectivement RVI_S_M (Vigueur-vert).

Si quelqu'un a quelque chose d'intéressant à dire, je lui en serai très reconnaissant.

 
KrasAleks:

Salutations à tous !
Un indice, si vous savez.

Vous voyez, le vert (Vigor=0.1154) n'a même pas croisé le rouge (Signal=0.1133) à proximité, mais il a vendu. Et ce n'est pas un cas isolé.

En voici un autre.

Ici ils sont "fusionnés", mais toujours Vigor=0.0543 et Signal=0.0525.

Tout est "pronormalisé" partout.

Code de cette condition : && RVI_S_S >0 && RVI_S_M < RVI_S_S && RVI_S_M1 > RVI_S_S1

RVI_S_S (Signal-rouge), respectivement RVI_S_M (Vigueur-vert).

Si quelqu'un a quelque chose d'intéressant à dire, je lui en serai très reconnaissant.

Il y a probablement eu un croisement, mais il a été redessiné.
Vérifiez le signal après la fermeture de la bougie.