Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 617

 

J'ai essayé différentes options. Le résultat est le même. Je ne comprends pas comment cela peut arriver. A un moment donné, le iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end) ; commence soudainement à calculer une plage de barres plus large. S'il vous plaît, conseillez ceux qui comprennent, j'ai la tête cassée. Merci.


4:08:36 Time+iLowest test commencé

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 Heure+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 Heure+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 Heure+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 Heure+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 Heure+iLowest EURUSD,H1 : time_check_low_day=21:00

Code :


statique int PrevTime=0 ;
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int start()
{
si(Time[0]<=PrevTime) return(0) ;
PrevTime=Time[0] ;
//////////////
// CheckForLongTimeClose_Sell() ;
double pBid=NormalizeDouble(Bid,Digits),Low_Now=Low[1] ;
////////////
int n_beg=1 ;// indice du jour, dans ce cas 1 est hier
datetime DayTime_beg=iTime(NULL,PERIOD_D1,n_beg) ; // début du jour "n" en secondes
intLastBar_beg=iBarShift(NULL,0,DayTime_beg) ;

int n_end=0 ;// indice du jour, dans ce cas 1 est le jour d'hier
datetime DayTime_end=iTime(NULL,PERIOD_D1,n_end) ; // début de la journée "n" en secondes
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) ;
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") ;


retour(0) ;
}

 
Le plus déconcertant est que cela se produit dans cette section particulière de l'histoire, dans d'autres c'est normal.
 
DiPach:

Si vous n'utilisez le code que sur un compte réel ou de démonstration, c'est plus pratique. Cependant, dans le testeur de stratégie, des problèmes peuvent sur venir lors de son utilisation.


Par exemple, comme quoi ? Pourquoi je n'ai aucun problème nulle part, mais vous "pouvez avoir des problèmes".
 

Il y a un morceau que je ne comprends pas.

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

J'obtiens une merde comme 5e-005.0 dans l'imprimante.

Valeur de PriceOld

PriceOld   = NormalizeDouble(Bid,Digits); 
Quand j'additionne tout, pourquoi est-ce que ça ressemble à ça quand je soustrais ?
 
001:
Le plus déroutant est que cela se produit sur cette section particulière de l'histoire, sur d'autres c'est normal.
Lisez attentivement l'aide de iLowest(). Quel est le nombre d'éléments à rechercher ? Et qu'est-ce que ça représente dans le vôtre.
 
001:

J'ai essayé différentes variantes. Le résultat est le même. La façon dont cela peut être le cas n'est absolument pas claire. A un moment donné, le iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end) ; commence soudainement à calculer une plage de barres plus large. S'il vous plaît, conseillez ceux qui comprennent, j'ai la tête cassée. Merci.


4:08:36 Time+iLowest test commencé

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 Heure+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 Heure+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 Heure+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 Heure+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 Heure+iLowest EURUSD,H1 : time_check_low_day=21:00

Code :

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


Faites attention à ces lignes.

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

Ces lignes doivent être échangées.

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

2. NumberLastBar_beg est le numéro de la barre d'hier, alors que cette valeur est mise à la place du nombre de barres à rechercher.

3. Lorsque vous collez le code, trouvez le bouton SRC dans la barre d'outils de la fenêtre de saisie de texte.

 
AlexeyVik:

Par exemple, lesquels ? Comment se fait-il que je n'aie aucun problème avec cette situation nulle part, mais que vous ayez "peut-être" un problème avec elle.

Je suis un peu pensif. Je ne veux pas exposer le code de l'indicateur existant, où il peut être clairement vu (si ce n'est en appliquant une condition distincte pour le testeur). Ainsi que de penser, ce qu'il faut prescrire sur sa base séparée pour la clarté.

Cependant, si vous insistez - bien sûr, je vais probablement m'engager dans une réflexion sur la manière de remplacer la "farce" compliquée qu'il a afin d'y prescrire autre chose.
 
Puis-je utiliser plus d'un timer dans mon EA ? EventSetTimer(5) ;
 
pu6ka:
Lisez attentivement l'aide de iLowest(). Quel est le nombre d'éléments à rechercher ? Et qu'est-ce que cela représente ?

Pour une raison quelconque, je pensais que c'était un intervalle, mais c'est le nombre d'éléments, merci !
 
AlexeyVik:

Faites attention à ces lignes

Il est préférable de permuter ces lignes.

2. NumberLastBar_beg est le numéro de la première barre d'hier, et vous mettez cette valeur à la place du nombre de barres que vous voulez rechercher.


La variable i est ici purement à des fins de contrôle, pour l'impression. J'ai fait une erreur en ajustant les barres. Merci pour le conseil !