Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 617

 

Tentei diferentes opções. O resultado é o mesmo. Não entendo como isso pode acontecer. Em algum momento o iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end); de repente começa a calcular uma faixa de barras maior. Por favor, avise quem entende, minha cabeça está quebrada. Obrigado.


4:08:36 Teste Time+iLowest iniciado

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

14:08:41 2004.09.29 04:00 Time+iLowest EURUSD,H1: time_check_low_day=21:00

Código:


estática int PrevTime=0;
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int start()
{
if(Time[0]<=PrevTime) return(0);
PrevTime=Time[0];
//////////////
// CheckForLongTimeClose_Sell();
double pBid=NormalizeDouble(Bid,Digits),Low_Now=Low[1];
////////////
int n_beg=1;// índice do dia, neste caso 1 é ontem
datatime DayTime_beg=iTime(NULL,PERÍODO_D1,n_beg); // início do dia "n" em segundos
intLastBar_beg=iBarShift(NULL,0,DayTime_beg);

int n_end=0;// índice do dia, neste caso 1 é o dia de ontem
datatime DayTime_end=iTime(NULL,PERÍODO_D1,n_end); // início do dia "n" em segundos
int NumberLastBar_end=iBarShift(NULL,0,DayTime_end);
Print(" NumberLastBar_beg= ",NumberLastBar_beg," NumberLastBar_end= ",NumberLastBar_end= ",NumberLastBar_end);
//---------------------------------------------------------------------

data/hora Hora_Check_Low_Day=Time[iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end)];
int=iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end);
Imprimir(" 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 time_check_verify=StrToTime("H_check_beg:M_check_beg");


retorno(0);
}

 
O mais desconcertante é que isso acontece nesta seção específica da história, em outras é normal.
 
DiPach:

Se você só usar o código em uma conta real ou demo, então isto é mais conveniente. No entanto, no testador de estratégia, podem surgir problemas ao utilizá-lo.


Por exemplo, como o quê? Por que eu não tenho nenhum problema em nenhum lugar, mas você "pode ter".
 

Há uma peça que eu não entendo.

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

Eu recebo uma porcaria como 5e-005.0 na impressora.

PreçoValor

PriceOld   = NormalizeDouble(Bid,Digits); 
Quando somo tudo, por que fica assim quando o subtraio?
 
001:
O mais confuso é que isso acontece nesta parte particular da história, em outras é normal.
Leia atentamente a ajuda iLowest(). Qual é o número de itens a serem pesquisados? E o que é igual no seu.
 
001:

Experimentamos diferentes variantes. O resultado é o mesmo. Como isto pode ser assim é absolutamente obscuro. Em algum momento o iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end); de repente começa a calcular uma faixa de barras maior. Por favor, avise quem entende, minha cabeça está quebrada. Obrigado.


4:08:36 Teste Time+iLowest iniciado

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

14:08:41 2004.09.29 04:00 Time+iLowest 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);
  }


Preste atenção a estas linhas.

   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 linhas devem ser trocadas.

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

2. NumberLastBar_beg é o número da barra de ontem, enquanto este valor pode ser substituído pelo número de barras a serem pesquisadas.

3. Quando você cola o código, encontre o botão SRC na barra de ferramentas da janela de entrada de texto.

 
AlexeyVik:

Tais como quais? Por que eu não tenho nenhum problema com isso em nenhum lugar, mas você "pode" ter um problema com isso.

Estou um pouco chato. Não pretendo traçar o código do indicador existente, onde ele possa ser visto claramente (se não aplicar uma condição separada para o testador). Assim como pensar, o que prescrever em sua base separadamente para maior clareza.

No entanto, se você insistir - é claro, muito provavelmente começarei a pensar no que pode substituir o complicado "recheio" que ele tem a fim de prescrever algo mais lá.
 
Posso usar mais de 1 timer no meu EA? EventSetTimer(5);
 
pu6ka:
Leia atentamente a ajuda iLowest(). Qual é o número de elementos a serem pesquisados? E o que é igual a isso?

Por alguma razão eu pensava que era uma gama, mas é o número de elementos, obrigado!
 
AlexeyVik:

Preste atenção a estas linhas

É melhor trocar estas linhas.

2. NumberLastBar_beg é o número da primeira barra de ontem, e você coloca este valor ao invés do número de barras que você quer procurar.


A variável i está aqui apenas para fins de controle, para impressão. Eu cometi um erro ao ajustar as barras. Obrigado pela dica!
Razão: