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

 

He probado diferentes opciones. El resultado es el mismo. No entiendo cómo puede suceder. En algún momento el iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end); de repente empieza a calcular un rango de barras mayor. Por favor, avisen a quien lo entienda, tengo la cabeza rota. Gracias.


4:08:36 Tiempo+iLowest prueba iniciada

14:08:36 2004.09.29 00:00 Hora+iLowest EURUSD,H1: NumberLastBar_beg= 24 NumberLastBar_end= 0
14:08:36 2004.09.29 00:00 Hora+iMínimo EURUSD,H1: i=18
14:08:36 2004.09.29 00:00 Hora+iMínimo EURUSD,H1: time_check_low_day=06:00
14:08:39 2004.09.29 01:00 Hora+iLowest EURUSD,H1: NumberLastBar_beg= 25 NumberLastBar_end= 1
14:08:39 2004.09.29 01:00 Hora+iMínimo EURUSD,H1: i=19
14:08:39 2004.09.29 01:00 Hora+iMínimo EURUSD,H1: time_check_low_day=06:00
14:08:39 2004.09.29 02:00 Hora+iLowest EURUSD,H1: NumberLastBar_beg= 26 NumberLastBar_end= 2
14:08:39 2004.09.29 02:00 Hora+iMínimo EURUSD,H1: i=20
14:08:39 2004.09.29 02:00 Hora+iMínimo EURUSD,H1: time_check_low_day=06:00
14:08:40 2004.09.29 03:00 Hora+iLowest EURUSD,H1: NumberLastBar_beg= 27 NumberLastBar_end= 3
14:08:40 2004.09.29 03:00 Hora+iMínimo EURUSD,H1: i=21
14:08:40 2004.09.29 03:00 Hora+iMínimo EURUSD,H1: time_check_low_day=06:00
14:08:41 2004.09.29 04:00 Hora+iLowest EURUSD,H1: NumberLastBar_beg= 28 NumberLastBar_end= 4
14:08:41 2004.09.29 04:00 Hora+iMínimo EURUSD,H1: i=31

14:08:41 2004.09.29 04:00 Hora+iMínimo EURUSD,H1: time_check_low_day=21:00

Código:


static int PrevTime=0;
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int inicio()
{
if(Time[0]<=PrevTime) return(0);
PrevTime=Hora[0];
//////////////
// CheckForLongTimeClose_Sell();
double pBid=NormalizeDouble(Bid,Digits),Low_Now=Low[1];
////////////
int n_beg=1;// índice del día, en este caso 1 es ayer
datetime DayTime_beg=iTime(NULL,PERIOD_D1,n_beg); // inicio del día "n" en segundos
intLastBar_beg=iBarShift(NULL,0,DayTime_beg);

int n_end=0;// índice del día, en este caso 1 es el día de ayer
datetime DayTime_end=iTime(NULL,PERIOD_D1,n_end); // inicio del día "n" en segundos
int NumberLastBar_end=iBarShift(NULL,0,DayTime_end);
Print(" NúmeroÚltimaBar_beg= ",NúmeroÚltimaBar_beg," NúmeroÚltimaBar_end= ",NúmeroÚltimaBar_end);
//---------------------------------------------------------------------

datetime Time_Check_Low_Day=Time[iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end)];
int=iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end);
Print(" i=",i);
string time_check_low_day=TimeToStr(Time_Check_Low_Day,TIME_MINUTES);
/////////////
Print(" tiempo_comprobación_bajo_día=",tiempo_comprobación_bajo_día;)

datetime time_check_verify=StrToTime("H_check_beg:M_check_beg");


return(0);
}

 
Lo más desconcertante es que ocurre en esta sección concreta de la historia, en otras es normal.
 
DiPach:

Si sólo utiliza el código en una cuenta real o de demostración, entonces esto es más conveniente. Sin embargo, en el probador de estrategias pueden surgir problemas al utilizarlo.


Por ejemplo, ¿como qué? Por qué yo no tengo problemas en ningún sitio, pero tú "puedes tenerlos".
 

Hay una parte que no entiendo.

double Delta =  NormalizeDouble(MathAbs(Bid-PriceOld),Digits);

Me sale una mierda como 5e-005.0 en la impresora.

PrecioValor antiguo

PriceOld   = NormalizeDouble(Bid,Digits); 
Cuando lo sumo todo, ¿por qué queda así al restarlo?
 
001:
Lo más confuso es que esto ocurre en esta parte concreta de la historia, en otras es normal.
Lea atentamente la ayuda de iLowest(). ¿Cuál es el número de elementos a buscar? Y a qué equivale en el tuyo.
 
001:

He probado diferentes variantes. El resultado es el mismo. No está nada claro cómo puede ser esto. En algún momento el iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end); de repente empieza a calcular un rango de barras mayor. Por favor, avisen a quien lo entienda, tengo la cabeza rota. Gracias.


4:08:36 Tiempo+iLowest prueba iniciada

14:08:36 2004.09.29 00:00 Hora+iLowest EURUSD,H1: NumberLastBar_beg= 24 NumberLastBar_end= 0
14:08:36 2004.09.29 00:00 Hora+iMínimo EURUSD,H1: i=18
14:08:36 2004.09.29 00:00 Hora+iMínimo EURUSD,H1: time_check_low_day=06:00
14:08:39 2004.09.29 01:00 Hora+iLowest EURUSD,H1: NumberLastBar_beg= 25 NumberLastBar_end= 1
14:08:39 2004.09.29 01:00 Hora+iMínimo EURUSD,H1: i=19
14:08:39 2004.09.29 01:00 Hora+iMínimo EURUSD,H1: time_check_low_day=06:00
14:08:39 2004.09.29 02:00 Hora+iLowest EURUSD,H1: NumberLastBar_beg= 26 NumberLastBar_end= 2
14:08:39 2004.09.29 02:00 Hora+iMínimo EURUSD,H1: i=20
14:08:39 2004.09.29 02:00 Hora+iMínimo EURUSD,H1: time_check_low_day=06:00
14:08:40 2004.09.29 03:00 Hora+iLowest EURUSD,H1: NumberLastBar_beg= 27 NumberLastBar_end= 3
14:08:40 2004.09.29 03:00 Hora+iMínimo EURUSD,H1: i=21
14:08:40 2004.09.29 03:00 Hora+iMínimo EURUSD,H1: time_check_low_day=06:00
14:08:41 2004.09.29 04:00 Hora+iLowest EURUSD,H1: NumberLastBar_beg= 28 NumberLastBar_end= 4
14:08:41 2004.09.29 04:00 Hora+iMínimo EURUSD,H1: i=31

14:08:41 2004.09.29 04:00 Hora+iMínimo EURUSD,H1: time_check_low_day=21:00

Código:

static int    PrevTime=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   if(Time[0]<=PrevTime) return(0);
   PrevTime=Time[0];
//////////////
 //  CheckForLongetivityClose_Sell();
   double pBid=NormalizeDouble(Bid,Digits),Low_Now=Low[1];
////////////
   int n_beg=1;                                           // индекс дня, в данном случае 1 - вчерашний день
   datetime DayTime_beg=iTime(NULL,PERIOD_D1,n_beg);             // Начало дня "n" в секундах
   int NumberLastBar_beg=iBarShift(NULL,0,DayTime_beg);

   int n_end=0;                                           // индекс дня, в данном случае 1 - вчерашний день
   datetime DayTime_end=iTime(NULL,PERIOD_D1,n_end);             // Начало дня "n" в секундах
   int NumberLastBar_end=iBarShift(NULL,0,DayTime_end);
   Print(" NumberLastBar_beg= ",NumberLastBar_beg," NumberLastBar_end= ",NumberLastBar_end);
//---------------------------------------------------------------------

   datetime Time_Check_Low_Day=Time[iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end)];
   int i=iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end);
   Print(" i=",i);
   string time_check_low_day=TimeToStr(Time_Check_Low_Day,TIME_MINUTES);
/////////////
   Print(" time_check_low_day=",time_check_low_day);

   datetime time_check_verify=StrToTime("H_check_beg:M_check_beg");


   return(0);
  }


Presta atención a estas líneas.

   datetime Time_Check_Low_Day=Time[iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end)];//iLowest раз
   int i=iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end);                            //iLowest два

Estas líneas deben ser intercambiadas.

int i=iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end); // исправлять не стал
datetime Time_Check_Low_Day=Time[i];

2. NumberLastBar_beg es el número de la barra de ayer, mientras que este valor puede ser sustituido por el número de barras a buscar.

3. Cuando pegues el código, busca el botón SRC en la barra de herramientas de la ventana de entrada de texto.

 
AlexeyVik:

¿Cómo cuáles? Por qué es que yo no tengo ningún problema con ella en ningún sitio, pero tú "puedes" tener un problema con ella.

Estoy un poco pensativo. No quiero poner el código del indicador existente, donde se puede ver claramente (si no se aplica una condición separada para el probador). Así como para pensar, lo que prescribir en su base separada para la claridad.

Sin embargo, si usted insiste - por supuesto, lo más probable es que empezar a pensar en lo que puede sustituir a la complicada "relleno" que tiene con el fin de prescribir algo más allí.
 
¿Puedo utilizar más de un temporizador en mi EA? EventSetTimer(5);
 
pu6ka:
Lea atentamente la ayuda de iLowest(). ¿Cuál es el número de elementos a buscar? ¿Y a qué equivale?

Por alguna razón pensé que era un rango, pero es el número de elementos, ¡gracias!
 
AlexeyVik:

Preste atención a estas líneas

Es mejor intercambiar estas líneas.

2. NumberLastBar_beg es el número de la primera barra de ayer, y se pone este valor en lugar del número de barras que se quiere buscar.


La variable i es aquí puramente de control, para Imprimir. Cometí un error al ajustar las barras. Gracias por el consejo.
Razón de la queja: