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

 
Vladimir Karputov:

En la depuración, revisa y comprueba en qué casos se mantiene tu condición.


Rates_total - prev_calculates es muy eficaz.

  • Si es igual a cero - significa que el cálculo se realizará en la barra actual por un tick.
  • Si es igual a 1 - significa que hay una nueva barra y se calcularán dos barras - la anterior y la actual.
  • Si es mayor que 1, significa que se trata de la primera ejecución o de un cambio en los datos del historial
Calculamos el límite. Y en el bucle de límite a mayor o igual que cero, calculamos los datos del indicador. Y tú mismo calculas a qué equivale el límite al calcular límite = rates_total - prev_calculates.
 
Artyom Trishkin:

rates_total - prev_calculates es una construcción muy eficaz.

  • Si es igual a cero, significa que el cálculo se realiza en la barra actual por el tick
  • Si es igual a 1 - significa que hay una nueva barra y se calcularán dos barras - la anterior y la actual
  • Si es mayor que 1, significa que se trata de la primera ejecución o de un cambio en los datos del historial
Calculamos el límite. Y en el bucle de límite a mayor o igual que cero, calculamos los datos del indicador. Y tú mismo calculas cuál es el límite al calcular límite = rates_total - prev_calculates.

Mira el código.

Luego, haz tus comentarios.

 
Vladimir Karputov:

Mira el código.

Entonces, coméntalo.

¿Por qué la descortesía? No estaba siendo grosero.

Respondí cuando la línea que citaste y su condición se mantendrá:

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategia

FAQ de principiantes MQL5 MT5 MetaTrader 5

Vladimir Karputov, 2020.08.06 13:03

En la depuración, revise y compruebe, ¿en qué casos se cumplirá su condición?


Incluso he añadido una respuesta a tres posibles condiciones y lo que se hace en tal caso:

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

FAQ de principiantes MQL5 MT5 MetaTrader 5

Artyom Trishkin, 2020.08.06 15:17

rates_total - prev_calculates es un algoritmo muy eficiente.

  • Si es igual a cero, significa el cálculo en la barra actual por el tick.
  • Si es igual a 1, significa que hay una nueva barra y se calcularán dos barras: la anterior y la actual
  • Si es mayor que 1, significa que se trata de la primera ejecución o de un cambio en los datos del historial
Calculamos el límite. Y en el bucle de límite a mayor o igual que cero, calculamos los datos del indicador. Y calcular cuál es el límite al calcular el límite = rates_total - prev_calculates.

No es necesario hacer nada para el procesamiento - este mismo cálculo iniciará el ciclo desde el valor necesario en cada uno de los tres estados.

 
Artyom Trishkin:

¿Por qué ser grosero? No estaba siendo grosero.

Respondí en qué casos se cumplirá la línea que citaste y su condición:

E incluso completé la respuesta con tres posibles estados, y lo que se hace en tal caso:

No necesita hacer nada para procesarlo usted mismo: este cálculo exacto iniciará un bucle desde el valor deseado en cada uno de los tres estados.

Toma el código y pasa por la depuración. A continuación, puedes hacerlo tú mismo, pero ahora ve hasta el final y explica al menos tres errores.

 
Vladimir Karputov:

Toma el código y pasa por la depuración. Haz el resto por tu cuenta, pero ahora sigue y explica al menos tres errores.

No. No tengo tiempo. Sólo he respondido a la línea que has citado, no hay ningún error. Y a partir de aquí (miré el código de reojo) que intente resolverlo por sí mismo (hay errores, y están en la superficie).

Hay muchos ejemplos de este tipo de construcciones en el foro y sus servicios.

Victor Nikolaev siempre lo utilizó (o lo sigue haciendo si no le da pereza), y me lo enseñó hace mucho tiempo.

Victor Nikolaev
Victor Nikolaev
  • www.mql5.com
Профиль трейдера
 
Artyom Trishkin:

No. No tengo tiempo. Sólo he respondido a la línea que has citado, no hay ningún error en ella. Y además (miré el código con el rabillo del ojo) que intente resolverlo él mismo (hay errores, y están en la superficie).

Hay muchos ejemplos de este tipo de construcciones en el foro y sus servicios.

Victor Nikolaev siempre lo ha utilizado (o lo sigue utilizando si no le da pereza), y me lo enseñó hace mucho tiempo.

Es mejor que leas el foro no desde un móvil, sino desde un ordenador. Y lee TODOS los posts, no los favoritos. Si no quieres ayudar, no participes en la conversación.

 
Сергей Таболин:


Aquí hay un ejemplo: basado en DRAW_COLOR_CANDLES, si el tamaño de la vela es menor que el establecido - la vela no se dibuja.

Nota: este es un indicador rediseñado - originalmente dibujaba velas por Alto y Bajo. Y todavía no hay ticks - sólo un ejemplo de trabajo con DRAW_COLOR_CANDLES, si el tamaño de la vela es menor que el establecido - la vela no se dibuja.

//+------------------------------------------------------------------+
//|                                             High Low Candles.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_plots   1
//--- plot HLC_
#property indicator_label1  "High Low Candles"
#property indicator_type1   DRAW_COLOR_CANDLES
#property indicator_color1  clrLimeGreen,clrLavender
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input uint     InpMinSize     = 150;            // Candles: min size
//--- indicator buffers
double   OpenBuffer[];  // open
double   HighBuffer[];  // high
double   LowBuffer[];   // low
double   CloseBuffer[]; // close
double   Colors[];
//---
double   m_min_size           = 0.0;            // Candles: min size          -> double
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,OpenBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,HighBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,LowBuffer,INDICATOR_DATA);
   SetIndexBuffer(3,CloseBuffer,INDICATOR_DATA);
   SetIndexBuffer(4,Colors,INDICATOR_COLOR_INDEX);
//--- an empty value
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//--- set the display of the symbol
   string symbol=Symbol();
   PlotIndexSetString(0,PLOT_LABEL,symbol+" Open;"+symbol+" High;"+symbol+" Low;"+symbol+" Close");
   IndicatorSetString(INDICATOR_SHORTNAME,"HLC ("+symbol+")");
//---
   m_min_size=InpMinSize*Point();
//---
   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=prev_calculated-1;
   if(prev_calculated==0)
      limit=0;
   for(int i=limit; i<rates_total; i++)
     {
      HighBuffer[i]=high[i];
      LowBuffer[i]=low[i];
      if(open[i]<close[i])
        {
         if(close[i]-open[i]>m_min_size)
           {
            OpenBuffer[i]=low[i];
            CloseBuffer[i]=high[i];
            Colors[i]=1.0;
           }
         else
           {
            OpenBuffer[i]=0.0;
            HighBuffer[i]=0.0;
            LowBuffer[i]=0.0;
            CloseBuffer[i]=0.0;
            Colors[i]=0.0;
           }
        }
      else
        {
         if(open[i]-close[i]>m_min_size)
           {
            OpenBuffer[i]=high[i];
            CloseBuffer[i]=low[i];
            Colors[i]=0.0;
           }
         else
           {
            OpenBuffer[i]=0.0;
            HighBuffer[i]=0.0;
            LowBuffer[i]=0.0;
            CloseBuffer[i]=0.0;
            Colors[i]=0.0;
           }
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


Resultado:


Archivos adjuntos:
 
Vladimir Karputov:

Deberías leer el foro desde tu ordenador y no desde tu teléfono móvil. Y lee TODOS los posts, no los favoritos. Si no quieres ayudar, no participes en la conversación.

¿Estás enfermo? :)


 

Chicos, Artyom y Vladimir, no os peleéis, no hay nada que discutir... )))

Ahora los errores. Empecé a escribir este indicador simplemente para visualizar lo que leí en este artículo. Y empecé a escribirlo después de que me enviaran a los baños hace un mes. Quiero decir que tuve tiempo de encontrar mis propios errores. No pude encontrarlos, por eso vine a pedir ayuda.

Te he pedido que me muestres dónde me equivoco (en el código). ¿Y por qué?

No puedo usar el depurador. No sé cómo. No se añaden variables a "watchable" (escribí sobre ello en el foro hace bastante tiempo...).

¿Sólo dime dónde está el enganche?

Дискретизация ценового ряда, случайная составляющая и "шумы"
Дискретизация ценового ряда, случайная составляющая и "шумы"
  • www.mql5.com
Классический способ представления ценовых движений в виде временных отрезков возник на заре становления финансовых рынков, когда еще не было компьютеров и вся торговля шла на реальных рынках, реальными товарами. Хранить каждое изменение цены в течении дня было трудно, да и не имело смысла, цены менялись не так быстро. Поэтому представлялось...
 
Сергей Таболин:

¿Sólo dime dónde está el enganche?

El problema está en la organización del código. He intentado mirarlo, pero está escrito de tal manera que mi cerebro no puede comprenderlo. No sé cómo explicar lo que está mal.

Sólo puedo aconsejarte que empieces por el principio y en orden.

  1. Empieza por señalar todas las velas N.
  2. A continuación, establezca una condición para elegir la vela que desea destacar.
Y por último, aprende a utilizar el depurador.
Razón de la queja: