Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1023

 

¿Cómo puedo obtener los datos del indicador iMA en la "barra cero", es decir, obtener el valor del indicador en la barra actual?

Si lo hago

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);}


Al llamar

ind_date.MA_CHART[0]

Obtengo los datos de la barra anterior, no de la actual.

 
Yury Smagin:

¿Cómo obtengo los datos del indicador iMA en la "barra cero", es decir, para obtener el valor del indicador en la barra actual?

Si lo hago


Al llamar

Obtengo los datos de la barra anterior, no de la actual.

El conjunto necesita

ArraySetAsSeries(ind_date.MA_CHART,true);

y entonces el elemento con índice "0" en el array corresponderá a la barra DERECHA del gráfico.

 
Vladimir Karputov:

La matriz debe ser

y entonces el elemento de la matriz con índice "0" corresponderá a la barra de la DERECHA en el gráfico.

Gracias.
 
Yury Smagin:

¿Cómo puedo obtener los datos del indicador iMA en la "barra cero", es decir, obtener el valor del indicador en la barra actual?

Si lo hago


Al llamar

Obtengo los datos de la barra anterior, no de la actual.

Como en aquella película, "tengo algunas dudas...". ¿No estás usando mi Asesor Experto para estudiar?

No tienes que voltear la matriz. Basta con tomar el valor del segundo índice del array.

ind_date.MA_CHART[2]
 

OBJPROP_BACK

Lo he probado de las dos maneras. No funciona. No entiendo en absoluto cómo funciona.

Independientemente del valor, los objetos se muestran simplemente en el orden en que se formaron: el último es más alto.

¿Y cómo puedo ajustar el nivel (capa) de un objeto si hay más de dos? ¿Tal vez haya otros ajustes? Por favor, dígame si lo sabe.

 
Alexey Viktorov:

Como en esa película, "tengo dudas..." ¿No es mi asesor el que está usando para estudiar?

No tienes que voltear la matriz. Simplemente toma el valor del segundo índice del array.

Gracias.

 

Buenos días a todos))


¿Podría decirme por qué hay una diferencia en los resultados?

//+------------------------------------------------------------------+
//|  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);
  }
//+------------------------------------------------------------------+

PREGUNTA: ¿qué he escrito mal en la segunda versión de los cálculos de MA?

Gracias)))

 
Al optimizar, ¿se construyen los objetos gráficos de forma que puedan leerse en el gráfico?
 
Aleksey Vyazmikin:
Al optimizar, ¿se construyen los objetos gráficos de manera que puedan leerse desde el gráfico?

No

 
Artyom Trishkin:

No

Malamente...

Razón de la queja: