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

 
barabashkakvn:
Mira en el código del indicador, la función OnCalculate().

Haciendo lo siguiente:

int limit=rates_total-prev_calculated;
   double pr=close[0];
   //----
   if(rates_total-prev_calculated>=Period_)
      limit=limit-Period_;
      //----
   for(int i=limit-1;i>=0;i--)
     {
      CopyBuffer(ma1Handle,0,i,1,ma1Val);
      ExtMapBuffer1[i]=ma1Val[0]-pr;
     }
Nada funciona. Todo está claro en MQL4. No conozco bien MQL5. ¿Supongo que hay que llamar a algunas funciones para obtener el precio?
 
forexman77:

Hago lo siguiente:

Nada funciona. Todo está claro en MQL4. No conozco bien MQL5. ¿Quizás haya que llamar a algunas funciones para obtener el precio?

Escribe en OnInit:

//--- установим индексацию для буфера как в таймсерии 
ArraySetAsSeries(ma1Val,true); 
 
forexman77:

Hago lo siguiente:

Nada funciona. Todo está claro en MQL4. No conozco bien MQL5. ¿Tal vez haya que llamar a algunas funciones para obtener el precio?

Puede utilizar CopyRates (similar a CopyBuffer) para acceder al historial de precios.

Los precios actuales de compra y venta pueden obtenerse utilizando SymbolInfoTick o SymbolInfoDouble (como en el indicador Spread).

 
barabashkakvn:

Escribe en OnInit:

Automatización de la negociación:
Puede utilizar CopyRates (similar a CopyBuffer) para acceder al historial de precios. Los valores actuales de los precios de compra y venta pueden obtenerse utilizando SymbolInfoTick.

Nada funciona. Aquí está todo el código:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_label1  "BUY TP"
input int Period_=34;
int ma1Handle;
double ma1Val[1];
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,ExtMapBuffer1,INDICATOR_DATA);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,Period_);
   ArraySetAsSeries(ExtMapBuffer1,true);
   ma1Handle=iMA(_Symbol,_Period,Period_,0,MODE_EMA,PRICE_CLOSE);
   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 limit=rates_total-prev_calculated;
   //----
   if(rates_total-prev_calculated>=Period_)
      limit=limit-Period_;
      //----
   for(int i=limit-1;i>=0;i--)
     {
       MqlTick latest_price;       // Будет использоваться для текущих котировок
      if(!SymbolInfoTick(_Symbol,latest_price))
          {
          Alert("Ошибка получения последних котировок - ошибка:",GetLastError(),"!!");return(0);
          }
      double iclose=latest_price.bid;
      CopyBuffer(ma1Handle,0,i,1,ma1Val);
      ExtMapBuffer1[i]=iclose - ma1Val[0];
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
forexman77:

Nada funciona. Aquí está todo el código:

¿Por qué no? A mí me funciona:

El indicador está funcionando, ¿verdad?

Archivos adjuntos:
test.mq5  3 kb
 
Вbarabashkakvn:

No veo por qué no. A mí me funciona:

Visualmente, a primera vista, parece correcto. Pero cuando vuelvo a calcular la diferencia entre el precio y la media móvil obtengo una cifra completamente diferente.

He comprobado en EURUSD/1,36421-1,36168=0,00253, y el indicador muestra 0,00157.

 

Buenas tardes.

¿Existe algún código de función listo en el lenguaje MQL5, como el que tenía KimIV en MQL4 http://forum.mql4.com/ru/38949?

Только "Полезные функции от KimIV". - MQL4 форум
  • www.mql5.com
Только "Полезные функции от KimIV". - MQL4 форум
 
forexman77:

Visualmente, a primera vista, parece correcto. Pero, tras recalcular la diferencia entre el precio y la media móvil, obtenemos una cifra completamente diferente.

He comprobado en EURUSD/1.36421-1.36168=0.00253, y el indicador muestra 0.00157 Captura de pantalla adjunta.

Ah, bueno, tienes que ser más preciso en tus peticiones. Ahora cuenta correctamente.
Archivos adjuntos:
test.mq5  3 kb
 
abeiks:

Buenas tardes.

¿Existe algún código de función listo en el lenguaje MQL5, como el que tenía KimIV en MQL4 http://forum.mql4.com/ru/38949?

En mql5 no se utilizan códigos de función, sino bibliotecas de objetos. Las funciones son difíciles de conectar, en POO es más fácil: conectar la biblioteca necesaria, crear un objeto y obtener los métodos necesarios en él - análogos a las funciones en los lenguajes algorítmicos.
 
Me he apuntado a una señal, ¿podéis decirme si necesito que el terminal esté funcionando y la cuenta esté abierta?
Razón de la queja: