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

 
Tango_X:

Merci ! J'ai toujours pensé que se référer à des classes était un pointeur vers une classe. Mais ici, c'est juste une déclaration... quel est le rapport ?

Ce sont les bases de la POO, jetez un coup d'oeil à l'aide. Par exemple, les opérateurs nouveau/supprimé et ainsi de suite.

 
Tango_X:

Merci ! J'ai toujours pensé que se référer à des classes était un pointeur vers une classe. Mais ici, c'est juste une déclaration... quel est le rapport ?

Je vais m'en occuper, merci ! !!

 
Seric29:

Dans quel metatrader créez-vous des symboles sur MT5 ?

Oui, sur MT5

 
fxsaber:

Tu ne peux pas.

C'est une honte.

Je fais cela après avoir téléchargé vers excel, mais cela a ses propres défauts là aussi. C'est dommage qu'une telle fonction ne soit pas intégrée.

Mais j'ai l'intuition que cela peut être implémenté d'une manière ou d'une autre par voie programmatique).

 
ISL:

Oui, sur MT5.

C'est dommage que MT4 ne permette pas de créer des symboles, on peut changer les valeurs mais on ne peut pas les créer.

 

apprenez-moi comment me débarrasser de ArraySetAsSeries() ! !!

ici j'ai réécrit une partie d'un indicateur connu pour MT4 (Perfect trend line), tout fonctionne comme dans MT4, MAIS... Mais je n'arrive pas à me débarrasser de ArraySetAsSeries() que j'ai écrit de force - sinon l'indicateur ne calcule pas correctement, je sais que ArraySetAsSeries() va changer la direction de l'indexation dans le tableau, mais je n'y suis pas arrivé pendant 2 jours tout seul !

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_plots   1
//--- plot BufBars
#property indicator_label1  "BufBars"
#property indicator_type1   DRAW_COLOR_BARS
#property indicator_color1  clrRed,clrAqua,clrNONE
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3

//--- input parameters
input int SlowLength         = 7; //Slow length
input int SlowPipDisplace    = 0; //Slow pip displace
input int FastLength         = 3; //Fast length
input int FastPipDisplace    = 0; //Fast pip displace
//--- indicator buffers
double         BufBarsBuffer1[];
double         BufBarsBuffer2[];
double         BufBarsBuffer3[];
double         BufBarsBuffer4[];
double         BufBarsColors[];
double         BufLSELLBuffer[];
double         BufLBUYBuffer[];
static int trend=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,BufBarsBuffer1,INDICATOR_DATA);
   SetIndexBuffer(1,BufBarsBuffer2,INDICATOR_DATA);
   SetIndexBuffer(2,BufBarsBuffer3,INDICATOR_DATA);
   SetIndexBuffer(3,BufBarsBuffer4,INDICATOR_DATA);
   SetIndexBuffer(4,BufBarsColors,INDICATOR_COLOR_INDEX);
   SetIndexBuffer(5,BufLSELLBuffer,INDICATOR_DATA);
   SetIndexBuffer(6,BufLBUYBuffer,INDICATOR_DATA);
   for(int i=0;i<7;i++)
     {
      PlotIndexSetInteger(i,PLOT_DRAW_BEGIN,FastLength+1);
      PlotIndexSetDouble(i,PLOT_EMPTY_VALUE,0.0);
     }
   ArraySetAsSeries(BufBarsBuffer1,true);
   ArraySetAsSeries(BufBarsBuffer2,true);
   ArraySetAsSeries(BufBarsBuffer3,true);
   ArraySetAsSeries(BufBarsBuffer4,true);
   ArraySetAsSeries(BufBarsColors,true);
   ArraySetAsSeries(BufLBUYBuffer,true);
   ArraySetAsSeries(BufLSELLBuffer,true);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
   trend=0;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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,limit;
   double thigh1,tlow1,thigh2,tlow2,trendUp,trendDn;
   ArraySetAsSeries(open,true);
   ArraySetAsSeries(high,true);
   ArraySetAsSeries(low,true);
   ArraySetAsSeries(close,true);
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      BufLSELLBuffer[limit]=high[limit];
      BufLBUYBuffer[limit]=low[limit];
      limit--;
     }
   else limit=rates_total-prev_calculated+1;
   for(i=limit;i>=0;i--)
     {
      thigh1= high[iHighest(NULL,0,MODE_HIGH,SlowLength,i)]+SlowPipDisplace * _Point;
      tlow1 = low[iLowest(NULL,0,MODE_LOW,SlowLength,i)]-SlowPipDisplace * _Point;
      thigh2= high[iHighest(NULL,0,MODE_HIGH,FastLength,i)]+FastPipDisplace * _Point;
      tlow2 = low[iLowest(NULL,0,MODE_LOW,FastLength,i)]-FastPipDisplace * _Point;
      if(close[i]>BufLBUYBuffer[i+1])  trendUp=tlow1;  else trendUp=thigh1;
      if(close[i]>BufLSELLBuffer[i+1]) trendDn=tlow2;  else trendDn=thigh2;
      BufLSELLBuffer[i]= trendDn;
      BufLBUYBuffer[i] = trendUp;
      BufBarsBuffer1[i] = 0.0;
      BufBarsBuffer2[i] = 0.0;
      BufBarsBuffer3[i] = 0.0;
      BufBarsBuffer4[i] = 0.0;
      BufBarsColors[i]  = 2;
      if(close[i]<trendUp && close[i]<trendDn)
        {
         BufBarsBuffer1[i] = open[i];
         BufBarsBuffer2[i] = high[i];
         BufBarsBuffer3[i] = low[i];
         BufBarsBuffer4[i] = close[i];
         BufBarsColors[i]  = 0;
        }
      if(close[i]>trendUp && close[i]>trendDn)
        {
         BufBarsBuffer1[i] = open[i];
         BufBarsBuffer2[i] = high[i];
         BufBarsBuffer3[i] = low[i];
         BufBarsBuffer4[i] = close[i];
         BufBarsColors[i]  = 1;
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Igor Makanu:

apprenez-moi comment me débarrasser de ArraySetAsSeries() ! !!

ici j'ai réécrit une partie d'un indicateur connu pour MT4 (Perfect trend line), tout fonctionne comme dans MT4, MAIS... Je sais que ArraySetAsSeries() va changer le sens de l'indexation dans le tableau, mais depuis 2 jours je n'y arrive pas moi-même !

Je peux faire ce qui suit

#ifdef __MQL5__
   ArraySetAsSeries(BufBarsBuffer1,true);
   ArraySetAsSeries(BufBarsBuffer2,true);
   ArraySetAsSeries(BufBarsBuffer3,true);
   ArraySetAsSeries(BufBarsBuffer4,true);
   ArraySetAsSeries(BufBarsColors,true);
   ArraySetAsSeries(BufLBUYBuffer,true);
   ArraySetAsSeries(BufLSELLBuffer,true);
#endif
 
Vitaly Muzichenko:

Je peux le faire de cette façon

Je sais que l'on peut calculer les valeurs de l'indicateur sansArraySetAsSeries(), mais je ne vois pas ce que je fais de mal. J'ai essayé de trouver un exemple simple dans kodobase, mais hélas, tous les indicateurs sont écrits de manière différente, je n'arrive pas à comprendre ((()

SZY : Je n'ai pas besoin de l'indicateur multiplateforme, je veux gérer l'indexation par défaut des tableaux, j'ai déjà utilisé ArrayGetAsSeries() - je ne le comprends pas.

 
Igor Makanu:

Je sais que l'on peut calculer les valeurs de l'indicateur sansArraySetAsSeries(), mais je ne vois pas ce que je fais de mal. J'ai essayé de trouver un exemple simple dans kodobase, hélas, tous les indicateurs sont écrits de manière différente, je n'arrive pas à comprendre ((()

Le calcul de votre indicateur va du début à la fin (des données historiques les plus récentes aux plus récentes - aux données actuelles). Et cela indique l'indexation comme dans les séries chronologiques. Les tableaux doivent donc être indexés en conséquence, et c'est ce que vous avez.

Qu'est-ce qui ne va pas alors ?

 
Igor Makanu:

Je sais que je peux calculer les valeurs de l'indicateur sansArraySetAsSeries(), mais je ne vois pas ce que je fais de mal. J'ai essayé de trouver un exemple simple dans kodobase mais hélas, tous les indicateurs sont écrits de manière différente, je n'arrive pas à comprendre ((()

SZZ : Je n'ai pas besoin de l'indicateur multiplateforme, je veux gérer l'indexation par défaut des tableaux, j'ai déjà utilisé ArrayGetAsSeries() - je ne le comprends pas.

Vous pouvez le faire sans ArraySetAsSeries, utilisez simplement Print ou Comment pour vérifier, pour voir, que l'index 0 du tableau, par exemple, opens[0]. À partir de là, vous pouvez prendre vos propres décisions. Cela vous aidera à comprendre ce qui est quoi.