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

 

Hola, podrías aconsejar por favor, en el código de abajo sin el bloque de bucle (que viene después del CopyByffer), el indicador se ejecuta normalmente, pero si se incluye un ciclo comparando el precio de una vela con el precio de una de las barras, las propias barras después del inicio no se muestran, ¿cuál podría ser el problema?

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots   3
#property indicator_type1   DRAW_LINE
#property indicator_color1  Olive
#property indicator_type2   DRAW_LINE
#property indicator_color2  Green
#property indicator_type3   DRAW_LINE
#property indicator_color3  Olive

input int peroid = 20;        // период полос 1
input int bands_shift= 0;           // смещение полос 1 
input double deviation = 2.3;   // отклонение полос 1

input ENUM_APPLIED_PRICE   applied_price=PRICE_CLOSE; // тип цены 

double      Base[];     // массив для BASE_LINE индикатора iBands
double      Upper[];    // массив для UPPER_BAND индикатора iBands
double      Lower[];    // массив для LOWER_BAND индикатора iBands

int iBands1_handle; //Указатель на первый индикатор 
int iBands2_handle; //Указатель на первый индикатор 

int g_i_Window;


int OnInit()
  {
   g_i_Window=ChartWindowFind();
   SetIndexBuffer(0,Base,INDICATOR_DATA);
   SetIndexBuffer(1,Upper,INDICATOR_DATA);
   SetIndexBuffer(2,Lower,INDICATOR_DATA);
           
   iBands1_handle=iBands(NULL,PERIOD_CURRENT,peroid,bands_shift,deviation,applied_price);

   if(iBands1_handle==INVALID_HANDLE){
         Alert("Неудалось загрузить индикатор, повторите попытку");
         return(-1);
         }
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,      // размер входных таймсерий 
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const datetime& time[],     // Time 
                 const double& open[],       // Open 
                 const double& high[],       // High 
                 const double& low[],        // Low 
                 const double& close[],      // Close 
                 const long& tick_volume[],  // Tick Volume 
                 const long& volume[],       // Real Volume 
                 const int& spread[])         // Spread 
  {
   int i;
   int shift = 0;
   int shift1;
   int shift2;
   int shift3;
   string alert;
   
   double O, O1, O2, C, C1, C2, L, L1, L2, H, H1, H2;
      shift1 = shift;
      shift2 = shift + 1;
      shift3 = shift + 2;   
      O = open[shift1];
      O1 = open[shift2];
      O2 = open[shift3];
      H = high[shift1];
      H1 = high[shift2];
      H2 = high[shift3];
      L = low[shift1];
      L1 = low[shift2];
      L2 = low[shift3];;
      C = close[shift1];
      C1 = close[shift2];
      C2 = close[shift3]; 
   
   i = (prev_calculated==0)?1: prev_calculated;
   i = (prev_calculated==rates_total)?rates_total-1: i;
   
   CopyBuffer(iBands1_handle,0,0,rates_total-1,Base);
   CopyBuffer(iBands1_handle,1,0,rates_total-1,Upper);
   CopyBuffer(iBands1_handle,2,0,rates_total-1,Lower);

   for (i = i; i < rates_total; i++)
   {
    if(H > L && O > Lower[i])
    {
     int time_waiting = (int)TimeLocal() + 1;
     while(TimeLocal() < time_waiting){}
     Comment("True");
     return(0);
    }
     else Comment("False"); 
   }
   
   
   if (prev_calculated==0) ChartRedraw();   
   return(rates_total);
  }

Resultado:


 
Aleksey Vyazmikin:

No se puede.

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

Bichos, errores, preguntas

Alexey Viktorov, 2018.05.30 15:53

Bueno, no tan dinámicamente, pero una vez a través de la reinicialización se puede. Lo hice.


 
Alexey Viktorov:

Si puede detallar, por favor describa

 
Andrii Djola:

si puede ser más específico

¿Cuánto más detallado?

En una situación necesitaba hacer barras de colores o candelabros de colores. Utilizan 4 buffers de valores y 1 buffer de color. La otra, necesitaba mostrar una línea de color, donde 1 buffer de valor y 1 buffer de color.

La llamada y el cambio de las propiedades del indicador provocan la inicialización del indicador. En consecuencia, si la configuración contiene barras o velas, entonces una opción de inicialización. Si la línea, la otra opción de inicialización.

Es imposible cambiar el número de topes en medio del indicador, que es lo que dijo Alexey Vyazmikin sin conocer las otras opciones.

 
Alexey Viktorov:

¿Cuántos detalles más?

En una situación necesitaba hacer barras de colores o candelabros de colores. Utilizan 4 buffers de valores y 1 buffer de color. Otra, necesitaba mostrar una línea de color, donde 1 buffer de valor y 1 buffer de color.

La llamada y el cambio de las propiedades del indicador provocan la inicialización del indicador. En consecuencia, si la configuración contiene barras o velas, entonces una opción de inicialización. Si la línea, entonces otra opción de inicialización.

Es imposible cambiar el número de topes en medio del indicador, que es lo que dijo Alexey Vyazmikin, sin conocer otras opciones.

Si decides escribir mi apellido en ruso, suena como Vyazmikin.

En cuanto a mis sospechas, creo que la respuesta es correcta a la pregunta planteada. Sin una explicación de las necesidades no tiene sentido decir lo contrario. La reinicialización es un reinicio del programa, está claro que se puede cambiar cualquier cosa en la configuración.

 
Aleksey Vyazmikin:

Si se escribe mi apellido en ruso, suena como Vyazmikin.

En cuanto a mis sospechas, creo que la respuesta a la pregunta planteada es correcta. Sin una explicación de las necesidades, no tiene sentido decir lo contrario. La reinicialización es un reinicio del programa, está claro que se puede cambiar cualquier cosa en la configuración.

¿Tanto ofende la falta de un cartel suave?

He hablado de incorrecciones, en mi opinión he hecho hincapié exactamente en la corrección de la respuesta.

 
alph:
¿Puede decirme si se trata de una cifra de prueba realista? ¿Y es un buen o mal resultado para un año con un depósito de 3000$?
real.
 
Alexey Viktorov:

¿Tanto ofende la falta de un cartel suave?

Me mueve la iluminación, no la ofensa. ¿Por qué iba a ofenderme, sabías cómo se escribe y querías ofenderme? Ni siquiera consideré esa opción, ¿fue para nada?

 
Aleksey Vyazmikin:

Me motiva la iluminación, no el resentimiento. ¿Por qué iba a ofenderme, sabías escribir correctamente y querías ofenderme? Ni siquiera consideré esa opción, ¿fue para nada?

La paz, la amistad, la goma de mascar.

 
Alexey Viktorov:

Paz, amistad, goma de mascar.

¿Y los medios litros?

Razón de la queja: