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

 
Vladimir Baskakov:

Gracias, funciona, sólo se cumple una condición:

Y necesito

No abre una posición por alguna razón.

int barfrup_1 = GetLastFractals(1,MODE_UPPER);
int barfrup_2 = GetLastFractals(barfrup_1+1,MODE_UPPER);
int barfrdn_1 = GetLastFractals(1,MODE_LOWER);
int barfrdn_2 = GetLastFractals(barfrdn_1+1,MODE_LOWER);

if(High[barfrup_1] < High[barfrup_2] && Low[barfrdn_1] < Low[barfrdn_2] )
if(High[barfrup_1] < High[barfrup_2] && Low[barfrdn_1] > Low[barfrdn_2] )
 
Igor Makanu:

Funciona, pero abre posiciones, no por condición, donde quiera, de acuerdo

 
Vladimir Baskakov:

Funciona, pero abre posiciones, no por condición, donde quiera, ok

no puede ser así, mi código es simple, como ZigZag, el fractal tiene valores solo en las barras con flechas en el bucle, busca los valores del indicador antes de que aparezca la flecha y sale del bucle, devuelve el número de barra del fractal

Acabo de hacer un Asesor Experto por fractales - el código se comprueba, y resultó durante la prueba que fractal en la barra número 1 puede overdraw - activar el modo de visualización del probador y añadir un indicador para fractal

 
Igor Makanu:

no puede ser, mi código es sencillo, el fractal, al igual que el ZigZag, tiene valores sólo en las barras con flechas, en el bucle, recorre los valores del indicador hasta que aparece la flecha y sale del bucle, devuelve el número de barra en la que está el fractal

Acabo de hacer un Asesor Experto por fractales - el código se comprueba, y resultó durante la prueba que fractal en la barra número 1 puede overdraw - activar el modo de visualización del probador y añadir un indicador para fractal

Tal vez el resultado debería comprobarse en 0 o en un valor vacío
 
Aleksei Beliakov:
Tal vez el resultado debería ser comprobado por 0 o un valor vacío

hay 0 en los valores vacíos, bueno un poco no es la mejor manera de comparar a _Point

funciona, no quiero probarlo, pero los valores del indicador fractal deberían funcionar con esta parte del código

SZY: una vez más, por alguna razón discuto mi código.... no veo el código de otros participantes, no entiendo quién lo necesita al final... ))))


PS:Comprobado, porque sé que la cuestión no va a descansar, todo funciona, el código es rápido:

#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Label2
#property indicator_label2  "Label2"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrBlue
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- indicator buffers
double         Label1Buffer[];
double         Label2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer);
   SetIndexBuffer(1,Label2Buffer);
   SetIndexArrow(0,SYMBOL_ARROWUP);
   SetIndexArrow(1,SYMBOL_ARROWDOWN);
   
//---
   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[])
  {
//--
   static int limit=0;   
   if(limit>=10) return(rates_total);
   int b_up = 0, b_dn = 0;
   while(limit<=10)
     {
      b_up = GetLastFractals(b_up,MODE_UPPER);
      Label1Buffer[b_up] = high[b_up];
      b_up++;
      b_dn = GetLastFractals(b_dn,MODE_LOWER);
      Label2Buffer[b_dn] = low[b_dn];
      b_dn++;
      limit++;
      }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//_______________________________________________________________________
int GetLastFractals(int bar,int mode) // bar - с какого бара начинать поиск, mode = MODE_UPPER или MODE_LOWER , результат № бара где найден фрактал
  {
   int i=bar; 
   while(i<Bars && iFractals(NULL,0,mode,i)<_Point) i++;
   return(i);
  }
//_______________________________________________________________________

resultado


 
Artyom Trishkin:

ArraySetAsSeries(true) para los buffers de los indicadores.

Sí. Lo hice de acuerdo con el manual
 
Igor Makanu:

no puede ser, mi código es sencillo, el fractal, al igual que el ZigZag, tiene valores sólo en las barras con flechas, en el bucle, recorre los valores del indicador hasta que aparece la flecha y sale del bucle, devuelve el número de barra en la que está el fractal

Recientemente he hecho un Asesor Experto por fractales - el código se comprueba, y resultó durante la prueba que fractal en la barra número 1 puede sobredibujar - activar el modo de visualización del probador y añadir un indicador para fractal,

No, mi posición se abre. Como debe ser, en el tercer compás un fractal. Pero más allá es peor. Por mi condición (fr1_up<fr_2 && fr1_down>fr2_down) no encuentra. La esencia es la compresión de los precios, que encontramos por dos fractales
 

¡Creo que lo he conseguido!

999

Archivos adjuntos:
IgorM.mq5  17 kb
 
Aleksandr Klapatyuk:

¡Creo que lo he conseguido!

¿Qué es?
 
Vladimir Baskakov:
¿Cuál?

nombre del objeto mover sobre iFractals