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

 
¿Cómo aumentar el número de parámetros optimizables en el probador? ¿Tal vez hay algunas formas virtuales en MQL, tal vez en Python o en algún otro lugar? Dame alguna dirección, por favor...
 
Vladimir M.:
¿Cómo aumentar el número de parámetros optimizados en el probador? ¿Tal vez hay algunas formas virtuales en MQL, tal vez en Python o en algún otro lugar? Dame algunos consejos, por favor...

OnTester()

 
Vladimir Karputov:

¡Tome un ejemplo de la referencia! ¿Cuántas veces? No uses tus propias construcciones inventadas si no entiendes mucho de su significado. Utiliza las construcciones estándar: averigua cómo funcionan. Después de eso, tira tus propias construcciones a la basura.


Y utilizar el 'MQL Wizard' para generar una plantilla.

Código

y el resultado


Vladimir, tengo la sensación de que intentan hablar entre un mudo y un sordo.

  1. He utilizado la plantilla'MQL Wizard'.
  2. ¿Por qué te molestas con mis construcciones? No son peores que los tuyos, ¡sobre todo para mis necesidades!

if(rates_total - prev_calculated > 1)

¡Cuando ejecuto el indicador rates_total = ХХХ (digamos que ХХХ = 1000), prev_calculated = 0, rates_total - prev_calculated (1000 - 0 = 1000) mayor que 1! ¡La condición funcionó!

Siguiente

if(prev_calculated == 0)

Cuando se inicia el indicador, prev_calculado = 0. ¡La condición funcionó!

Y entonces explícame en qué se diferencia la tuya

      Buffer1[i]=open[i];
      Buffer2[i]=high[i];
      Buffer3[i]=low[i];
      Buffer4[i]=close[i];

de la mía

            barsBuffer1[0] = newCandles_Open[i];
            barsBuffer2[0] = newCandles_High[i];
            barsBuffer3[0] = newCandles_Low[i];
            barsBuffer4[0] = newCandles_Close[i];

teniendo en cuenta que miArraySetAsSeries está ajustado a true?

¿Por qué los candelabros tuyos están rendidos y los míos no?

¡Llevo casi dos semanas pidiéndote que me lo expliques! No hace falta que me manden a leer la documentación. Me lo sé casi de memoria. Dígame por qué. O me explicas, o me dices que no lo sabes, o me dices que no quieres contestar.

Oh hombre, ¿has olvidado el título de este hilo?

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


¿Qué te parece esto? Tiene todos los índices asignados a un índice cero en los buffers.

            barsBuffer1[i] = newCandles_Open[i];
            barsBuffer2[i] = newCandles_High[i];
            barsBuffer3[i] = newCandles_Low[i];
            barsBuffer4[i] = newCandles_Close[i];
 
Сергей Таболин:


Eso es lo que intento enseñarte: te sigo dando ejemplos, pero tú sigues dándote cabezazos contra la pared.

Por última vez: tira tus diseños a la basura y utiliza los estándar. Entonces puede preguntar: cómo dibujar (por ejemplo, las cinco velas de la derecha del gráfico) según sus reglas. Pero no antes de que destroces tus construcciones, no antes de que dejes de usar el incremento del prefijo en lugardel incremento del postfijo...

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


Ejemplo

//+------------------------------------------------------------------+
//|                                                 Draw 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 4
#property indicator_plots   1
//--- plot USDJPY
#property indicator_label1  "USDJPY"
#property indicator_type1   DRAW_CANDLES
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input int      Input1=9;
//--- indicator buffers
double   Buffer1[];
double   Buffer2[];
double   Buffer3[];
double   Buffer4[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Buffer1,INDICATOR_DATA);
   SetIndexBuffer(1,Buffer2,INDICATOR_DATA);
   SetIndexBuffer(2,Buffer3,INDICATOR_DATA);
   SetIndexBuffer(3,Buffer4,INDICATOR_DATA);
//--- the 0 (empty) value will mot participate in drawing
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//---
   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[])
  {
   if(rates_total<10)
      return(0);
//---
   int limit=prev_calculated-5;
   if(prev_calculated==0)
     {
      limit=rates_total-5;
      for(int j=0; j<limit; j++)
        {
         Buffer1[j]=0.0;
         Buffer2[j]=0.0;
         Buffer3[j]=0.0;
         Buffer4[j]=0.0;
        }
     }
   for(int i=limit; i<rates_total; i++)
     {
      if(i<rates_total-5)
        {
         //--- затираем всё, что левее пяти свеч (сюда попадаем при рождении нового бара)
         Buffer1[i]=0.0;
         Buffer2[i]=0.0;
         Buffer3[i]=0.0;
         Buffer4[i]=0.0;
         continue;
        }
      //--- четыре левые свечи будут перерисовываться на каждом тике - это не оптимально,
      //--- но пригодится в будущем (если для них потом подсовывать тики)
      //--- пятая свеча (она же самая правая на графике) реагирует онлайн на изменение текущих цен
      Buffer1[i]=open[i];
      Buffer2[i]=high[i];
      Buffer3[i]=low[i];
      Buffer4[i]=close[i];
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Resultado:


Archivos adjuntos:
 
Vladimir Karputov:

Eso es lo que intento enseñarte: te sigo dando ejemplos, pero tú sigues dándote cabezazos contra la pared.

Por última vez: tira tus diseños a la basura y utiliza los estándar. Entonces puede preguntar: cómo dibujar (por ejemplo, las cinco velas de la derecha del gráfico) según sus reglas. Pero no antes de tirar sus construcciones, no antes de dejar de usar elincremento del prefijo en lugardel incremento del postfijo...

¿Qué tienes en contra? ¿Porque no lo entiendes? A menudo utilizo este bucle, por ejemplo

for(int i PositionsTotal(); i-- > 0)

y no hay ningún problema.........

 
Alexey Viktorov:

¿Qué es lo que no te gusta de él? ¿Porque no lo entiendes? Yo, por ejemplo, suelo utilizar este ciclo

for(int i PositionsTotal(); i-- > 0)

y no hay ningún problema.........

¿Qué tal si intentas leerlo en lugar de apresurarte a contestar? Usted utiliza (como la mayoría) Postfix. Y tu ejemplo es postfijado. No debes apresurarte a responder en lugar de pensar.

 
Youri Lazurenko:
Carga de la CPU al 100% y tras unos minutos de trabajo el ordenador se bloquea (procesador phenom II x4 955 (4 núcleos, 3,2 GHz), el refrigerador está de sobra). Después de dos veces decidí no arriesgarme más. ¿Cómo debe interpretarse esto?

Compruebe su ordenador con Aida64 o Linx - si no hay problemas con las pruebas de CPU y memoria y la temperatura está dentro de los límites normales, entonces compruebe el disco duro. Generalmente parece que la fuente de alimentación, si no se ha cambiado en mucho tiempo, es probable que sea el problema. El terminal funciona bien en los segundos fenómenos.

 
Buenas tardes compañeros, sabéis si existe ese símbolo en forma de raya horizontal en una bola, no lo encuentro :-(