Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1750

 
Aleksei Stepanenko structure MqlDateTime. Mais dans ce cas, il y aura des signaux de barres manquées qui ne devraient pas exister.

Par exemple :

Manqué 1 barre le mercredi, commencé par ce symbole à 00:30, c'est-à-dire perdu à 00:00

M30, il s'est avéré qu'il y en avait 47 en un jour au lieu de 48. C'est exactement ce que nous devons identifier


 
Vitaly Muzichenko #:

Voici un exemple :

Manqué 1 barre le mercredi, commencé par ce symbole à 00:30, c'est-à-dire perdu à 00:00

M30 time frame, a obtenu 47 dans la journée au lieu de 48. C'est exactement ce que nous devons identifier.


Je ne connais pas le bon chemin, mais je penserais dans cette direction

      datetime tt=Time[Bars-1];
      //--- 
      if(Time[i]==tt){tt+=PeriodSeconds(PERIOD_CURRENT);}
      else
      {Print(TimeToString(tt,TIME_DATE|TIME_MINUTES));tt+=PeriodSeconds(PERIOD_CURRENT);}
 
Vitaly Muzichenko #:

Voici un exemple :

Manqué 1 barre le mercredi, commencé par ce symbole à 00:30, c'est-à-dire perdu à 00:00

M30 time frame, a obtenu 47 dans la journée au lieu de 48. C'est exactement ce que nous devons identifier


int  Bars( 
   string           symbol_name,     // имя символа 
   ENUM_TIMEFRAMES  timeframe,       // период 
   datetime         start_time,      // с какой даты 
   datetime         stop_time        // по какую дату 
   );
Si 47
 

Vitaly Muzichenko #:

C'est exactement ce que nous devons identifier.

Compris, la question est celle des fausses alarmes, qui seront nombreuses.

//дата последней свечи
 curr_time=iTime(symbol,frame,0);
//ограничение на торговлю вне начала бара
if(last_time==curr_time) return;

if((iBarShift(eSymbol,eFrame,last_time)-iBarShift(eSymbol,eFrame,curr_time))>PeriodSeconds(eFrame)) printf("а-я-яй");
last_time=curr_time;
 
Alexey Viktorov #:
Si 47

C'est possible, vous pouvez également utiliser CopyOpen().

Je n'arrive pas à me décider sur la façon d'organiser cela en boucle à travers toute l'histoire.

 

encore plus simple :

for(int i=TotalBars-1; .....
   {
   if((iBarShift(eSymbol,eFrame,last_time)-i)>PeriodSeconds(eFrame)) printf("а-я-яй");
   last_time=iTime(symbol,frame,i);
 
Vitaly Muzichenko #:

C'est possible, vous pouvez également utiliser CopyOpen().

Je n'arrive pas à me décider sur la manière d'organiser ceci en boucle à travers toute l'histoire.

L'heure d'ouverture de la barre de jour zéro moins 1 seconde à l'ouverture de la première barre de jour. Puis de l'ouverture de la première barre quotidienne moins 1 seconde à l'ouverture de la deuxième barre quotidienne et ainsi de suite.
 
Vitaly Muzichenko #:

C'est possible, vous pouvez également utiliser CopyOpen().

Je n'arrive pas à décider comment l'arranger en boucle sur toute l'histoire

Exactement (par exemple pour M30) - si le temps entre les ouvertures (modulo % 24 heures) de barres voisines est plus long que M30 - cela signifie qu'il manque des barres entre elles.

int nbars = ( ( iTime(_Symbol,PERIOD_M30,N) - iTime(_Symbol,PERIOD_M30,N+1) ) ) / PeriodSeconds(PERIOD_M30) ) % 48; // сколько баров должно быть между ссоедними отметками

if (nbars>1) PrintFormat("Пропущено баров: %d",nbars-1);

 

Merci à tous, le principe est clair, le problème a été formalisé.

---

Maintenant une question : Qu'est-ce que je fais mal, tous les caractères ont la même valeur ?

#property strict

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Print( DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_POINT),8) );
  }
//+------------------------------------------------------------------+
0       14:39:38.965    sc GBPCHF,M30: 0.00001000
0       14:46:44.478    sc NZDCHF,M30: 0.00001000
0       14:44:54.709    sc EURUSD,M30: 0.00001000

---

P.S. Terminal MT4, vérifié sur deux terminaux différents dans des sociétés de courtage différentes

P.SS. J'ai vérifié dans MT5, le résultat est le même

2021.11.20 15:05:34.881 sc (EURCHF,M30)  0.00001000
2021.11.20 15:05:39.203 sc (AUDUSD,M30)  0.00001000
2021.11.20 15:05:51.985 sc (EURAUD,M30)  0.00001000

---

Je fais probablement quelque chose de mal !

J'ai besoin d'obtenir la "valeur du point"

 
Vitaly Muzichenko #:

Merci à tous, le principe est clair, le problème a été formalisé.

---

Maintenant une question : Qu'est-ce que je fais mal, tous les caractères ont la même valeur ?

Vitaly, ici il faut soit embêter les développeurs, soit

Raison: