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

 

Comment obtenir les données de l'indicateur iMA sur la "barre zéro", c'est-à-dire pour obtenir la valeur de l'indicateur sur la barre actuelle ?

Si je le fais

int OnInit()
{handle.MA_CHART=iMA(_Symbol,_Period,period_MA_CHART,0,Signal_MA_Method,Signal_MA_Applied);}

void OnTick()
{CopyBuffer(handle.MA_CHART, 0, 0, 3, ind_date.MA_CHART);}


Lors de l'appel

ind_date.MA_CHART[0]

J'obtiens les données de la barre précédente, pas de la barre actuelle.

 
Yury Smagin:

Comment obtenir les données de l'indicateur iMA sur la "barre zéro", c'est-à-dire pour obtenir la valeur de l'indicateur sur la barre actuelle ?

Si je le fais


Lors de l'appel

J'obtiens les données de la barre précédente, pas de la barre actuelle.

Le tableau doit

ArraySetAsSeries(ind_date.MA_CHART,true);

et alors l'élément avec l'index "0" dans le tableau correspondra à la barre DROITE dans le graphique.

 
Vladimir Karputov:

Le tableau doit être

et l'élément du tableau ayant l'indice "0" correspondra alors à la toute première barre du graphique.

Merci !
 
Yury Smagin:

Comment obtenir les données de l'indicateur iMA sur la "barre zéro", c'est-à-dire pour obtenir la valeur de l'indicateur sur la barre actuelle ?

Si je le fais


Lors de l'appel

J'obtiens les données de la barre précédente, pas de la barre actuelle.

Comme dans ce film, "J'ai quelques doutes...". N'utilisez-vous pas mon conseiller expert pour étudier ?

Vous n'avez pas besoin de retourner le tableau. Il suffit de prendre la valeur du deuxième indice du tableau.

ind_date.MA_CHART[2]
 

OBJPROP_BACK

J'ai essayé les deux façons. Ça ne marche pas. Je ne comprends pas du tout comment cela fonctionne.

Indépendamment de leur valeur, les objets sont simplement affichés dans l'ordre où ils ont été formés - le dernier est plus élevé.

Et comment puis-je ajuster le niveau (couche) d'un objet s'il y en a plus de deux ? Peut-être y a-t-il d'autres paramètres ? S'il vous plaît, dites-moi si vous le savez.

 
Alexey Viktorov:

Comme dans ce film, "J'ai des doutes..." N'est-ce pas mon conseiller que tu utilises pour étudier :

Vous n'avez pas besoin de retourner le tableau. Il suffit de prendre la valeur du deuxième index du tableau.

Merci !

 

Bonne journée à vous tous))


Pourriez-vous me dire pourquoi il y a une différence dans les résultats ?

//+------------------------------------------------------------------+
//|  exponential moving average multytimeframes   ДЛЯ БУФЕРА         |
//+------------------------------------------------------------------+
void CalculateExponentialMA(int rates_total,int prev_calculated,int begin,const double &price[])
  {
   int    i,limit;
   double SmoothFactor=2.0/(1.0+period_ma);
//--- first calculation or number of bars was changed
   if(prev_calculated==0)
     {
      limit=period_ma+begin;
      ExtLineBuffer[begin]=price[begin];
   for(i=begin+1;i<limit;i++)
         ExtLineBuffer[i]=price[i]*SmoothFactor+ExtLineBuffer[i-1]*(1.0-SmoothFactor);
     }
   else limit=prev_calculated-1;
//--- main loop
   for(i=limit;i<rates_total && !IsStopped();i++)
      ExtLineBuffer[i]=price[i]*SmoothFactor+ExtLineBuffer[i-1]*(1.0-SmoothFactor);
//---
  }
//+------------------------------------------------------------------+
//|  exponential moving average       ДЛЯ ТОЧКИ                      |
//+------------------------------------------------------------------+
void CalculateEMA(int periodMA,int bgn)
  {
 int i,lmt=periodMA+bgn+1;
 double SmoothFactor=2.0/(1.0+periodMA);
   for(i=0;i<lmt;i++)
              BufferPrice[i]=0.0;
   switch(AppliedPrice)
     {
      case 1: BufferPrice[lmt]=iClose(NULL,Timeframes,lmt); break;
      case 2: BufferPrice[lmt]=iOpen(NULL,Timeframes,lmt);  break;
      case 3: BufferPrice[lmt]=iHigh(NULL,Timeframes,lmt);  break;
      case 4: BufferPrice[lmt]=iLow(NULL,Timeframes,lmt);   break;
   default :  BufferPrice[lmt]=iClose(NULL,Timeframes,lmt); break;
     }
   for(i=lmt-1;i>=0;i--)
   switch(AppliedPrice)
     {
      case 1: BufferPrice[i]=iClose(NULL,Timeframes,i)*SmoothFactor+BufferPrice[i+1]*(1.0-SmoothFactor); break;
      case 2: BufferPrice[i]=iOpen(NULL,Timeframes,i)*SmoothFactor+BufferPrice[i+1]*(1.0-SmoothFactor);  break;
      case 3: BufferPrice[i]=iHigh(NULL,Timeframes,i)*SmoothFactor+BufferPrice[i+1]*(1.0-SmoothFactor);  break;
      case 4: BufferPrice[i]=iLow(NULL,Timeframes,i)*SmoothFactor+BufferPrice[i+1]*(1.0-SmoothFactor);   break;
   default :  BufferPrice[i]=iClose(NULL,Timeframes,i)*SmoothFactor+BufferPrice[i+1]*(1.0-SmoothFactor); break;
     }
      MA=NormalizeDouble(BufferPrice[bgn],_Digits);
  }
//+------------------------------------------------------------------+

QUESTION : qu'est-ce que j'ai écrit de faux dans la deuxième version des calculs MA ?

Merci)))

 
Lors de l'optimisation, les objets graphiques sont-ils construits de manière à pouvoir être lus sur le graphique ?
 
Aleksey Vyazmikin:
Lors de l'optimisation, les objets graphiques sont-ils construits de manière à pouvoir être lus dans le graphique ?

Non

 
Artyom Trishkin:

Non

Mal...