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

 

Aleksei Stepanenko, merci.


Valeriy Yastremskiy C'est peut-être parce que le code est incomplet, car j'ai supprimé toutes les fonctions inutiles.


//+----------------------------------------------------------------------------+
//|                                                          AverageRange.mq4  |
//|                                                    Ким Игорь В. aka KimIV  |
//|                                                       http://www.kimiv.ru  |
//|                                                                            |
//|  14.09.2005  Скрипт для расчёта:                                           |
//|              средней волатильности инструмента High-Low                    |
//|              среднего размера тела свечи       ABS(Open-Close)             |
//|              среднего размера тени свечи                                   |
//|                                                                            |
//|  17.11.2007  Возможность использования заданного количества баров          |
//+----------------------------------------------------------------------------+
#property copyright "Ким Игорь В. aka KimIV"
#property link      "http://www.kimiv.ru"
#property  show_inputs

extern datetime BeginDateCalc = D'2013.01.01';
extern datetime EndDateCalc   = D'2013.12.31';
extern int      NumberOfBars  = 100;         


//+----------------------------------------------------------------------------+
//|  script program start function                                             |
//+----------------------------------------------------------------------------+
void start() {
   int    i;           
   int    b  = 0;     
   int    bb = 0;      
   int    h  = 0;      
   int    l  = 0;     
   int    s  = 0;      
   int    t  = 0;      
   string st = "";        

  for (i = Bars; i > 0; i--) {
    
    if ((Time [i] >= BeginDateCalc && Time [i] <= EndDateCalc && NumberOfBars <= 0)
    || (NumberOfBars > 0 && NumberOfBars >= i)) {
      
      if (bb == 0) bb = i;
      s += (High [i] - Low [i]) / Point;
      t += MathAbs (Open [i] - Close [i]) / Point;
      
      if (Open [i] > Close [i]) {
        h += (High [i] - Open [i]) / Point;
        l += (Close [i] - Low [i]) / Point;
      } else {
        h += (High [i] - Close [i]) / Point;
        l += (Open [i] - Low [i]) / Point;
      }
      
      b++;
    }
  }

  st =      "Начало: " + TimeToStr (Time [bb], TIME_DATE | TIME_MINUTES) + "\n";
  st = st + "Конец: " + TimeToStr (Time [bb - b + 1], TIME_DATE | TIME_MINUTES) + "\n";
  st = st + "Использовано баров: " + b + "\n";
  st = st + "Средняя волатильность: " + s / b + " п.\n";
  st = st + "Средний размер тела: " + t / b + " п.\n";
  st = st + "Средний размер верхней тени: " + h / b + " п.\n";
  st = st + "Средний размер нижней тени: " + l / b + " п.";

  Comment (st);
}
//+----------------------------------------------------------------------------+
Aleksei Stepanenko
Aleksei Stepanenko
  • www.mql5.com
Профиль трейдера
 
Valeriy Yastremskiy #:

Pour être honnête, je ne comprends pas la logique de Kim, pourquoi les conditions de temps de barre dépassant la valeur fixée et le nombre de barres calculées sont négatives avec OU le nombre de barres calculées est supérieur au nombre de barres Barz)))). Et en même temps, il corrige juste les paramètres personnalisés).

Et il n'affiche même pas une alerte indiquant que l'utilisateur a fait une erreur).

Logiquement, si NumberOfBars est spécifié (supérieur à 0), le temps est ignoré et seules les dernières barres sont prises en compte.

Mais un utilisateur peut faire une erreur avec les dates ou s'il y a un trou dans la citation, alors rien n'est imprimé, cela renvoie simplement DivideByZero :-)

 
Salut

quelqu'un peut-il savoir comment convertir les cotations de mt5 à mt4 ? ou tout moyen de profiter d'un meilleur historique de mt5 à mt4... sauf TDS2😊.
 
Pavel Malyshko #:
Salut

quelqu'un peut-il savoir comment convertir les cotations de mt5 à mt4 ? ou tout moyen de profiter d'un meilleur historique de mt5 à mt4... sauf TDS2😊.
Exportation/importation
 
MakarFX #:
Exportation/importation

donc mt5 a un format de citation différent. mt4 ne les lit pas. c'est le problème...😎

 
Pavel Malyshko #:

donc mt5 a un format de citation différent. mt4 ne les lit pas. c'est le problème...😎

MT5 exporte vers csv et mt4 lit tout.

 
Oksana_Timakova Point;

Pourquoi ai-je besoin d'une division par point ?

...

Je le recommande vivement :

s+=MathRound((High [i] - Low [i]) / Point);

Sinon, vous obtenez un oops)))

void OnStart(){
   double first=0.00001;
   double point=0.00001;
   for(uint i=0;i<10;++i){
      double value=NormalizeDouble(first+i*point,5);
      int res=(int)((value-first)/point);
      if (res!=i)
         PrintFormat("Alert: (%.5 f-%.5 f)/%.5 f!=%u, but ==%i",value,first,point,i,res);
   }
}
2021.09.12 11:06:26.041 Script test EURGBP,H1: removed
2021.09.12 11:06:26.038 test EURGBP,H1: uninit reason 0
2021.09.12 11:06:26.038 test EURGBP,H1: Alert: (0.00007-0.00001)/0.00001!=6, but ==5
2021.09.12 11:06:26.038 test EURGBP,H1: Alert: (0.00003-0.00001)/0.00001!=2, but ==1
2021.09.12 11:06:26.038 test EURGBP,H1: initialized
2021.09.12 11:06:25.998 Script test EURGBP,H1: loaded successfully
 

Comment faire pour que la fenêtre de l'indicateur cache complètement le graphique des prix ?

Je ne peux pas le faire par ChartSetInteger(0,CHART_HEIGHT_IN_PIXELS,0,0), je dois d'abord définir la taille de l'indicateur et ensuite y ajouter la hauteur de la fenêtre de prix :

int chart_height=(int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0);
IndicatorSetInteger(INDICATOR_HEIGHT,200+chart_height);


Toutefois, si vous ouvrez la fenêtre d'ordre en bas, la taille de la fenêtre de l'indicateur devient supérieure à celle de l'écran et le terem affiche à nouveau le prix.

Je ne sais pas comment mesurer la fenêtre de commande, d'ailleurs, elle change constamment.

Que faire ?

 

Aidez-moi !

Aidez à traduire ce code en mql5...

Je veux comprendre comment travailler avec des poignées.

//+------------------------------------------------------------------+
//|                                                Stochastic.v1.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers  2
#property indicator_plots    2
#property indicator_minimum -51
#property indicator_maximum  51
#property indicator_level1   0
#property indicator_levelstyle 0
#property indicator_levelcolor clrDimGray
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrDimGray
#property indicator_style1  STYLE_SOLID
#property indicator_width1  0
//--- plot Label2
#property indicator_label2  "Label2"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  0
//--- input parameters
input int             WeekCount   = 1;     // Ограничение истории в неделях(0-вся история)
input int             StochPeriod = 14;
input ENUM_TIMEFRAMES TimeFrame   = PERIOD_CURRENT;
//--- indicator buffers
double   Label1Buffer[];
double   Label2Buffer[];
int      index=-1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorDigits(2);
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer);
   SetIndexBuffer(1,Label2Buffer);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   ArrayInitialize(Label1Buffer,0);
   ArrayInitialize(Label2Buffer,0);
   int limit,i;
   int barPlus=iBarShift(_Symbol,_Period,iTime(_Symbol,PERIOD_W1,WeekCount));
   limit=rates_total-prev_calculated-1;
   if(WeekCount!=0)limit=barPlus-2;
   if(limit<1) return(0);
   for(i=limit;i>=0;i--)
     {
      index=iBarShift(_Symbol,TimeFrame,time[i],false);
      Label1Buffer[i]=iStochastic(_Symbol,TimeFrame,StochPeriod,3,3,MODE_SMA,1,MODE_MAIN,index)-50; 
     }
   for(i=limit;i>=0;i--)
     {
      Label2Buffer[i]=iMAOnArray(Label1Buffer,0,StochPeriod*3,0,MODE_SMA,i);
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

J'apprécierais votre aide.

 
MakarFX #:

Aidez-moi !

Aidez à traduire ce code en mql5...

Je veux comprendre comment travailler avec des poignées.

J'apprécierais votre aide.

La seule question concerne cette ligne

  Label1Buffer[i]=iStochastic(_Symbol,TimeFrame,StochPeriod,3,3,MODE_SMA,1,MODE_MAIN,index)-50; 
-50 redondants et en réseau