Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 617

 

Ho provato diverse opzioni. Il risultato è lo stesso. Non capisco come possa accadere. Ad un certo momento iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end); inizia improvvisamente a calcolare un intervallo di barre più grande. Si prega di consigliare chi capisce, la mia testa è rotta. Grazie.


4:08:36 Tempo+iLowest test iniziato

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 Tempo+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 Tempo+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 Tempo+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 Tempo+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 Tempo+iLowest EURUSD,H1: i=31

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

Codice:


int statico 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;// indice del giorno, in questo caso 1 è ieri
datetime DayTime_beg=iTime(NULL,PERIOD_D1,n_beg); // inizio del giorno "n" in secondi
intLastBar_beg=iBarShift(NULL,0,DayTime_beg);

int n_end=0;// indice del giorno, in questo caso 1 è il giorno di ieri
datetime DayTime_end=iTime(NULL,PERIOD_D1,n_end); // inizio del giorno "n" in secondi
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=iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end);
Stampa(" i=",i);
string time_check_low_day=TimeToStr(Time_Check_Low_Day,TIME_MINUTES);
/////////////
Stampa(" time_check_low_day=",time_check_low_day;)

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


ritorno(0);
}

 
La cosa più sconcertante è che succede in questa particolare sezione della storia, in altre è normale.
 
DiPach:

Se usate il codice solo in un conto reale o demo, allora questo è più conveniente. Tuttavia, nel tester di strategia, possono sorgere problemi quando lo si usa.


Per esempio, come? Perché io non ho problemi da nessuna parte, ma tu "potresti averne".
 

C'è un pezzo che non capisco.

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

Nella stampante ottengo una schifezza come 5e-005.0.

Valore PriceOld

PriceOld   = NormalizeDouble(Bid,Digits); 
Quando sommo il tutto, perché appare così quando lo sottraggo?
 
001:
La cosa più confusa è che succede in questa particolare parte della storia, in altre è normale.
Leggete attentamente la guida iLowest(). Qual è il numero di elementi da cercare? E che cosa equivale nel vostro.
 
001:

Provato diverse varianti. Il risultato è lo stesso. Come questo possa essere così non è assolutamente chiaro. Ad un certo momento iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end); inizia improvvisamente a calcolare un intervallo di barre più grande. Si prega di consigliare chi capisce, la mia testa è rotta. Grazie.


4:08:36 Tempo+iLowest test iniziato

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 Tempo+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 Tempo+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 Tempo+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 Tempo+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 Tempo+iLowest EURUSD,H1: i=31

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

Codice:

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);
  }


Fate attenzione a queste linee.

   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 два

Queste linee dovrebbero essere scambiate.

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

2. NumberLastBar_beg è il numero della barra di ieri, mentre questo valore può essere sostituito con il numero di barre da cercare.

3. Quando incollate il codice, trovate il pulsante SRC nella barra degli strumenti della finestra di inserimento del testo.

 
AlexeyVik:

Ad esempio quali? Perché io non ho problemi da nessuna parte, ma tu "potresti" avere un problema.

Sono un po' pensieroso. Non voglio stendere il codice dell'indicatore esistente, dove può essere visto chiaramente (se non applicando una condizione separata per il tester). Così come pensare, cosa prescrivere sulla sua base separata per chiarezza.

Tuttavia, se insistete - naturalmente, molto probabilmente inizierò a pensare a cosa può sostituire il complicato "ripieno" che ha per prescrivere qualcos'altro lì.
 
Posso usare più di 1 timer nel mio EA? EventSetTimer(5);
 
pu6ka:
Leggete attentamente la guida iLowest(). Qual è il numero di elementi da cercare? E a cosa corrisponde?

Per qualche ragione ho pensato che fosse un intervallo, ma è il numero di elementi, grazie!
 
AlexeyVik:

Fate attenzione a queste righe

È meglio scambiare queste linee.

2. NumberLastBar_beg è il numero della prima barra di ieri, e tu metti questo valore al posto del numero di barre che vuoi cercare.


La variabile i è qui puramente a scopo di controllo, per la stampa. Ho fatto un errore quando ho regolato le barre. Grazie per il suggerimento!
Motivazione: