Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 357

 
STARIJ:
Intente escribir la fecha, la hora, la oferta y los resultados de sus cálculos en el archivo para cada tic. A continuación, cárguelo en Excel y compruébelo. No tiene sentido conciliar cada docena de líneas del programa.

Pero mira, tienes return en cada rama del operador condicional, es decir, se ejecuta siempre. Así que lo sacamos del operador condicional:

Oferta[1] - ¿es así?


Gracias. Lo probaré ahora. He entendido lo esencial de tu código y ya es un gran logro para mí :) También vi mis defectos.

¿Qué es el botón SRC?

 
STARIJ:
Intente escribir en el archivo la fecha, la hora, la oferta y los resultados de sus cálculos para cada tic. A continuación, cárguelo en Excel y compruébelo. No tiene sentido conciliar cada docena de líneas del programa.

Pero mira, tienes return en cada rama del operador condicional, es decir, se ejecuta siempre. Así que lo sacamos del ámbito del operador condicional:

Oferta[1] - ¿es así?


He insertado el código en el "constructor" del indicador personalizado. Lo he recopilado. El compilador ha generado 1 advertencia: Se han definido dos OnCalculate. Se utilizará la versión OHLC (no entiendo lo que significa).

Tengo el producto compilado. Adjúntalo a la carta. La ventana separada para el gráfico se abre pero no muestra ninguna información sobre el histograma, a pesar de los ticks.

¿Qué ocurre? Por favor, ¿me aconseja?

#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Label2
#property indicator_label2  "Label2"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

//- local variables
int Tick, Tick2;       // Для вставки программы используйте кнопку SRC
double Bid1;

//--- indicator buffers
double         Label1Buffer[];
double         Label2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer);
   SetIndexBuffer(1,Label2Buffer);
   Bid1=Bid;
//---
   return(INIT_SUCCEEDED);
  }
  
 
    void start()   // Вместо start более модно писать OnTick
{
    if(Bid > Bid1) Tick++;                             
    else Tick2++;
    Bid1=Bid;                      
}
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

 
YarTrade:

He insertado el código en el "constructor" del indicador personalizado. Lo compiló. El compilador me dio una advertencia: se definen dos OnCalculate. Se utilizará la versión OHLC (no sé lo que significa).

Tengo el producto compilado. Adjúntalo a la carta. La ventana separada para el gráfico se abre pero no muestra ninguna información sobre el histograma, a pesar de los ticks.

¿Qué ocurre? ¿Puede aconsejarnos?

Cuando pegues el código aquí, utiliza el botón del editor de mensajes SRC - en la parte superior del campo de mensajes hay muchas cosas útiles en el panel de formato de mensajes.

No es difícil levantar los ojos justo por encima del texto que estás escribiendo, ¿verdad? Y es mucho más agradable para la gente mirar el código normal en lugar del botín, ¿no?

He insertado tu código en tu post correctamente (SRC)

 
Artyom Trishkin:

Cuando pegues el código aquí, utiliza el botón del editor de posts SRC - hay un montón de características útiles en el panel de formato del post en la parte superior de la caja del post.

No es difícil levantar los ojos justo por encima del texto que estás escribiendo, ¿verdad? Y es mucho más agradable para la gente mirar el código normal en lugar del botín, ¿no?

Puse su código en su mensaje para usted correctamente (SRC)


Sí, gracias. No lo sabía.

 
YarTrade:

Emitido 1 aviso al compilador: se definen dos OnCalculate. Se utilizará la versión OHLC (no se sabe qué significa esto).

Tengo el producto compilado. Adjúntalo a la carta. La ventana separada para el gráfico se abre pero no muestra ninguna información sobre el histograma, a pesar de los ticks.

¿Qué ocurre? Por favor, ¿me aconseja?

La función se llamaba antes Inicio, ahora se llama OnTick en el Asesor Experto y OnCalculate en el indicador. El compilador advierte: tienes la misma función dos veces con nombres diferentes. Mueve el contenido de Start a OnCalculate y borra Start. También tendría que describir en su programa, qué y cómo debe mostrarse. Primero decida usted mismo: ¿qué imagen debe haber? Es mejor empezar a estudiar el lenguaje MQL escribiendo scripts. Un Asesor Experto es más complicado, un indicador es aún más complicado

 
STARIJ:

La función antes se llamaba Start, ahora se llama OnTick en el EA y OnCalculate en el indicador. El compilador advierte: tienes la misma función dos veces con nombres diferentes. Mueve el contenido de Start a OnCalculate y borra Start. También tendría que describir en su programa, qué y cómo debe mostrarse. Primero decida usted mismo: ¿qué imagen debe haber? Es mejor empezar a estudiar el lenguaje MQL escribiendo scripts. El Asesor Experto es más difícil, el indicador es aún más difícil.


No puedo insertar el contenido de Start en OnCalculate y me da muchos errores

 
YarTrade: No puedo insertar el contenido de Start en OnCalculate, da muchos errores


El indicador sólo muestra información desde el principio. La ventana de datos (Ctrl-D) muestra los datos de la vela a la que apunta el cursor

//+------------------------------------------------------------------+
//|                                                     -Тики-07.mq4 |
//+------------------------------------------------------------------+
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
//  #property indicator_plots   2        в MQL-4 такое отсутствует
#property indicator_label1  "Вверх"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  Salmon
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

#property indicator_label2  "Вниз"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2

datetime Время=0;   // Время прошлого бара
double Bid1;

double   Buf_1[], Buf_2[]; // 2 буфера

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
{
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
   SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
}
 
 
//+------------------------------------------------------------------+
//| 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[])
{
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[0]=0;         // и обнулить последний элемент буфера
      Buf_2[0]=0;
   }

   if(Bid > Bid1) Buf_1[0]++;                             
   else Buf_2[0]--;
   Bid1=Bid;                      

  return(rates_total);
}
 
Alexey Kozitsyn:

:)

¿y cómo se formula la situación creada con los nombres de las funciones?
 
STARIJ:
¿Y cómo se formula la situación creada con los nombres de las funciones?

inicio - nombre obsoleto. OnTick() es el nombre real de la función de manejo de ticks.

De todos modos, da igual cómo se defina, sólo la palabra "de moda" me hizo sonreír.

 
Alexey Kozitsyn:

inicio - nombre obsoleto. OnTick() es el nombre real de la función de manejo de ticks.

De todos modos, no importa cómo se defina, sólo la palabra "trendy" hace sonreír.

Obsoleto ya no se utiliza. Pero el comienzo vive y seguirá viviendo.