Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 978

 
Vadim_2015:

El algoritmo está claro, lo he descubierto. Hizo el ejemplo, todo funciona.

¡Muchas gracias!

Y, con la primera pregunta (sobre los máximos), ¿podrías explicar con más detalle cómo implementarlo? Si es posible, por favor, dame un pequeño algoritmo. Se te da bien :)

Me alegro de que me entienda alguien más que yo.

Vadim_2015:
¡Hola queridos usuarios del foro!

He empezado a estudiar el lenguaje MQL4 y aunque estoy escribiendo un indicador sencillo me he encontrado con un problema que no puedo resolver. La esencia del problema:

1_Cómo encontrar el High[i - final del día]. Tengo un ciclo simple Close[i]-Open[i+1], necesito encontrar el High[i - final del día]. Por ejemplo, desde[i],[1],[2] y hasta el final del día (PERIOD_H1) . No estoy seguro de cómo hacerlo. Existe la función "iHigh", pero no es exactamente lo mismo.


Esto es exactamente lo que necesitamos. El máximo del día actual no importa el tiempo que quede para el final del día.

double  iHigh( 
   string           symbol,          // _Symbol
   int              timeframe,       // PERIOD_D1
   int              shift            // 0
   );

Si entiendo bien la pregunta.

 
AlexeyVik:

Me alegro de que alguien más me entienda, aparte de mí mismo.

Es lo que hay que hacer. Alta jornada actual sin importar el tiempo que quede en el día.

Si entiendo bien la pregunta.

Es un poco diferente de lo que tenía entendido. Así es.
bar=iBarShift(NULL,0,t1,false);   //по времени, находим индекс бара
barH=iHighest(NULL,0,MODE_HIGH,bar+1,1);  //находим максимум, в этом промежутке    
 
r772ra:
Un poco diferente, como yo lo entendí. Así es.

Bueno, eso es exactamente lo que me aconsejaron antes.
Pero iHighest(NULL, MODE_HIGH, bar+1, 1) devuelve el índice de barra High que es más alto que todos los demás en este intervalo, mientras que usted preguntó por el High del día actual.

 
AlexeyVik:

Bueno, eso es exactamente lo que me aconsejaron antes.
Pero iHighest(NULL, MODE_HIGH, bar+1, 1) devuelve el índice de barra High que es más alto que todos los demás en este intervalo, y usted preguntó por el High del día actual.

Estoy de acuerdo,"iHighest(NULL, MODE_HIGH, bar+1, 1) devuelveel índice del bar High que es más alto que todos los demás en este intervalo" . Y me refiero a la alta día actual restante del día.

Intentaré explicarlo más claramente...

#property indicator_separate_window
#property indicator_buffers 1

#property  indicator_label1  "longBars"

#property  indicator_color1 clrBlue

#property  indicator_width1 2

//---углубление в историю на...
extern int barsToProcess = 100;
//---indicators Buffers
double   longBarsBuffer[];        
                

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,longBarsBuffer);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   
   IndicatorDigits(Digits);
  
   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 counted_bars=IndicatorCounted(), 
       limit;

   if (counted_bars<0) return(-1);
   if (counted_bars>0)       
       counted_bars--;       
      
   limit=Bars-counted_bars;
   if(limit>barsToProcess)                                  
      limit=barsToProcess;
  
   double  longValue;
      
                            
   for(int i=0;i<limit;i++)
      {
       longValue = Close[i+1]-Open[i+3];
       
//--- само условие
         
       if(longValue>0) 

//---собственно что необходимо получить: если на i-том баре выполнилось условие(i>0), то находим High от этого бара и 
//---до конца этого дня,я имею ввиду максимум всего этого промежутка. Примерно: Если условие выполнилось 
//---на i=12h,то High от 12 до 00:00,
//--- если i=01:00, то High от 01:00 до 00:00, если i=22:00, то High от 22:00 до 00:00. Как то так.  Возможно ли это реализовать?  
//---Может я не правильно сделал цикл? Как его правильно организовать?
                  
       longBarsBuffer[i]=High[от i - и до конца дня] - то что необходимо получить. 
       else 
          longBarsBuffer[i]=0.0; 
       

Si es posible no regañes demasiado :) ...explica por favor cómo hacerlo?

 
Vadim_2015:

Estoy de acuerdo, "iHighest(NULL, MODE_HIGH, bar+1, 1) devuelveel índice del bar High que es más alto que todos los demás en este intervalo" . Y me refiero a la alta el resto de la corriente del día.

Intentaré ser más específico...

Si puedes, por favor, no me regañes demasiado :) ...¿puedes explicar cómo hacerlo?

Al principio pensé que era un simple error ortográfico, pero ahora ya no hay duda, ¿quieres mirar al futuro? Entonces sólo el doctor de Regreso al Futuro puede ayudarte.
 
AlexeyVik:
Al principio pensé que era una simple errata, pero ahora ya no hay duda, ¿quieres mirar al futuro? Entonces sólo el doctor de Regreso al Futuro puede ayudarte.

Me temo que Doc no puede ayudarme... está en el negocio equivocado:)

Sí, esa pregunta, "Altael resto de la actual. del día". Es un poco confuso. Se me acaba de ocurrir que se trata de un intento de mirar al futuro en este día. Eso está un poco fuera de lugar. Quería contar el _AltoEl resto de la actual. del día desde el inicio de la matriz de precios hasta el penúltimo día (ayer), porque todos los datos están ahí. Y el último día (el de hoy) debería recalcularse en cuanto haya terminado. De lo contrario, parecerá lo que has dicho: ¡un intentode mirar al futuro! Si empiezo por el principio de la matriz de precios, y me muevo hasta el final (el día de ayer), el High cambiará en cada barra subsiguiente comprobada. Por eso pregunté cómo restar el High del resto del día. Se me olvidó decirte que el día actual no se tiene en cuenta, porque aún no se ha completado. Lo siento, no lo entendí de inmediato :) . ¿Pueden decirme cómo organizar dicho cálculo? ¿Es posible?

 
Vadim_2015:

Me temo que Doc no puede ayudarme... está en el negocio equivocado:)

Sí, esa pregunta, "Altael resto de la actual. del día", es un poco confuso. Se me acaba de ocurrir, uno realmente pensaría que es un intento de mirar al futuro en este día . Es un nombre un poco erróneo. Quería contar el _High♪ el resto de la actual ♪ del día desde el inicio de la matriz de precios hasta el penúltimo día (ayer), porque todos los datos están ahí. Y el último día (el de hoy) debería recalcularse en cuanto haya terminado. De lo contrario, parecerá lo que has dicho: ¡un intentode mirar al futuro! Si empiezo por el principio de la matriz de precios, y me muevo hasta el final (el día de ayer), el High cambiará en cada barra subsiguiente comprobada. Por eso pregunté cómo restar el High del resto del día. Se me olvidó decirte que el día actual no se tiene en cuenta, porque aún no se ha completado. Lo siento, no lo entendí de inmediato :) . ¿Pueden decirme cómo organizar dicho cálculo? ¿Es posible?

Permítame tratar de entender su pregunta. Necesitas encontrar lo más alto entre las barras 1) del día anterior y lo que tienes hoy, o 2) sólo lo que tienes hoy? ¿Quizás iHighest() ayude?
 
paladin80:
Permítame tratar de entender su pregunta. ¿Necesita encontrar los máximos entre las barras 1) del día anterior y la fecha de hoy, o 2) sólo la fecha que tiene hoy? ¿Quizás iHighest() ayude?

Queridos amigos, intentaré explicar lo mejor posible lo que quiero conseguir... ...o lo haré bien... ¡o confundiré a todo el mundo!

Mira, hay una matriz de precios, digamos desde el _1.02.2015. hasta el 15.12.2015(día de hoy), toma PERIOD_H1.

1_Tomo una simple fórmula _val=Cerrar[i]-Abrir[i]

2_establecer una condición simple si (val>0) - la comprobación debe comenzar a partir del _1.02.2015.

-Si la condición se cumple, digamos, en algún compás, entonces a partir de este compás y hasta el final de este día encuentra _Alto. Por ejemplo:Close[4]-Open[4]>0, es decir, suponga que la barra con índice[i=4] pertenece a _1.02.2015 10:00, por lo quedesde las 10:00 - de este día hasta las 00:00 - el final de este día - nos encontramos con _High. En consecuencia, si la condición ha funcionado el otro día, actuamos por el mismo principio. Y así pasa por toda la gama de precios. El cálculo debe comenzar desde el _1.02.2015 hasta el 14.12.2015 (el penúltimo día), por qué hasta el penúltimo día, - porque el último día no se ha completado todavía y el Alto de todo el día no se conoce. Tan pronto como se termina el último día, se comprueba también su estado. Dado que se conocen los datos desde el _1.02.2015. hasta el 14.12.2015 (el penúltimo día), no parecerá -tratarde mirar al futuro :)

- Si la condición no se cumple - no se hace nada, se escribe un valor vacío en el array.

Esa es en realidad toda la "idea". Cómo hacerlo, cómo definirlo a través de un bucle - ¡no se me ocurre!

 
Vadim_2015:

Me temo que Doc no puede ayudarme... está en el negocio equivocado:)

Sí, esa pregunta, "Altael resto de la actual. del día", es un poco confuso. Se me acaba de ocurrir, uno realmente pensaría que es un intento de mirar al futuro en este día . Es un nombre un poco erróneo. Quería contar el _High♪ el resto de la actual ♪ del día desde el inicio de la matriz de precios hasta el penúltimo día (ayer), porque todos los datos están ahí. Y el último día (el de hoy) debería recalcularse en cuanto haya terminado. De lo contrario, parecerá lo que has dicho: ¡un intentode mirar al futuro! Si empiezo por el principio de la matriz de precios, y me muevo hasta el final (el día de ayer), el High cambiará en cada barra subsiguiente comprobada. Por eso pregunté cómo restar el High del resto del día. Se me olvidó decirte que el día actual no se tiene en cuenta, porque aún no se ha completado. Lo siento, no lo entendí de inmediato :) . ¿Pueden decirme cómo organizar dicho cálculo? ¿Es posible?

Si es así, volvemos a iHighest(), pero el número de barras que hay que contar y desde las que hay que empezar se debe calcular con iBarShift()
 
AlexeyVik:
Si es así, volvemos a iHighest(), pero el número de barras a contar y a partir de cuál empezar debe calcularse con iBarShift()

¿Podría mostrarme cómo hacer esto en un bucle? No sé cómo hacerlo correctamente.

Razón de la queja: