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

 
m-r LSV:

Est-ce que je lis bien ?

if(rates_total - prev_calculated == 1)
 Print("Новый бар");
 
Taras Slobodyanik:

Merci, je l'ai maintenant

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
   {
   fin=iTime(Symbol(), PERIOD_M1 ,0);
   if(last==fin) return(rates_total);
   last=fin;
   
   if(rates_total - prev_calculated == 1)
   Print("Новый бар");


return(rates_total);

	          
 

Pouvez-vous me dire la direction de la dernière bougie fermée lors de l'ouverture d'une barre ?

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
   {
   fin=iTime(Symbol(), PERIOD_M1 ,0);
   if(last==fin) return(rates_total);
   last=fin;
   
   if(rates_total - prev_calculated == 1)
   //Print("Новый бар");
   
   if(open[1] > close[1])
   {
      Print("Dn");
   }
   else if(open[1] < close[1])
   {
      Print("Up");
   }

return(rates_total);

Ce code affiche toujours le même message, quelle que soit la bougie qui a été fermée.
Je comprends que je dois recalculer le chandelier à travers une boucle ?
Conseillez-nous, s'il vous plaît !

 
Taras Slobodyanik:

Pourquoi se moquer ainsi d'un programmeur inexpérimenté ?

Que se passe-t-il si une histoire manquée est chargée et que la différence est supérieure à 1 ? On s'en fiche un peu, sautons une mesure... réfléchissons-y, une de plus, une de moins. Et sans explications, pourquoi devrions-nous donner le code ? Vous voyez ce que vous obtenez à la fin ?

 
Alexey Viktorov:

Pourquoi se moquer ainsi d'un programmeur inexpérimenté ?

Que se passe-t-il si une histoire manquée est chargée et que la différence est supérieure à 1 ? On s'en fiche un peu, sautons une mesure... réfléchissons-y, une de plus, une de moins. Et sans explications, pourquoi devrions-nous donner le code ? Vous voyez ce que vous obtenez à la fin ?

Alexei, dis-moi le bon chemin. S'il vous plaît.
 
Alexey Viktorov:

Pourquoi se moquer ainsi d'un programmeur inexpérimenté ?

Que se passe-t-il si une histoire manquée est chargée et que la différence est supérieure à 1 ? On s'en fiche un peu, sautons une mesure... réfléchissons-y, une de plus, une de moins. Et sans explications, pourquoi devrions-nous donner le code ? Vous voyez ce que vous obtenez à la fin ?

C'est évident.)

Si elle est chargée, elle sera supérieure à 1 et ce n'est pas une nouvelle barre, pourquoi en tenir compte, le problème n'existe pas.

 
m-r LSV:

Pouvez-vous me dire la direction de la dernière bougie fermée lors de l'ouverture d'une barre ?

Ce code affiche toujours le même message, quelle que soit la bougie qui a été fermée.
Je comprends que je dois recalculer le chandelier à travers une boucle ?
Conseillez-nous, s'il vous plaît !

car il n'y a pas de parenthèses.

if(rates_total - prev_calculated == 1)
   {
   //Print("Новый бар");
   if(open[1] > close[1])
        {
        Print("Dn");
        }
   else if(open[1] < close[1])
        {
        Print("Up");
        }
   }
 
m-r LSV:

Est-ce que je lis bien ?

C'est vrai.

m-r LSV:

L'ouverture de la bougie est retardée de 9 à 12 secondes.
Pouvez-vous me dire si c'est le premier tic-tac ?

Il est extrêmement important pour moi de faire des calculs et d'effectuer des actions sur le premier tick d'une nouvelle bougie.


Une nouvelle bougie est formée sur le premier tick.

Pour vérifier, vous pouvez demander les tics

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
 {
  MqlTick tick[];
  if(prev_calculated > 0 && rates_total > prev_calculated)
   {
    if(CopyTicks(_Symbol, tick, COPY_TICKS_ALL, 0, 2) <= 0)
      Print("ERR ", GetLastError());
    else
      ArrayPrint(tick);
   }

  return(rates_total);
 }

et voyez que le dernier tick appartient à la bougie actuelle et le tick précédent, respectivement, à la bougie précédente.

2021.06.02 17:50:59.311 00 (EURUSD,M1)                   [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
2021.06.02 17:50:59.311 00 (EURUSD,M1)  [0] 2021.06.02 17:50:58 1.22005 1.22007 0.0000        0 1622656258958       4       0.00000
2021.06.02 17:50:59.311 00 (EURUSD,M1)  [1] 2021.06.02 17:51:00 1.22004 1.22010 0.0000        0 1622656260655       6       0.00000
2021.06.02 17:51:58.741 00 (EURUSD,M1)                   [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
2021.06.02 17:51:58.741 00 (EURUSD,M1)  [0] 2021.06.02 17:51:59 1.22021 1.22026 0.0000        0 1622656319887       6       0.00000
2021.06.02 17:51:58.741 00 (EURUSD,M1)  [1] 2021.06.02 17:52:00 1.22020 1.22025 0.0000        0 1622656320080       6       0.00000

Par exemple, sur ma démo, il s'ouvre sans aucun retard.

Mais sur une paire moins liquide, il y a un retard d'une seconde.

2021.06.02 17:55:59.742 00 (CADJPY,M1)                   [time]  [bid]  [ask] [last] [volume]    [time_msc] [flags] [volume_real]
2021.06.02 17:55:59.742 00 (CADJPY,M1)  [0] 2021.06.02 17:55:59 90.881 90.885  0.000        0 1622656559379       2         0.000
2021.06.02 17:55:59.742 00 (CADJPY,M1)  [1] 2021.06.02 17:56:01 90.882 90.887  0.000        0 1622656561076       6         0.000
 
Taras Slobodyanik:

c'est évident)

S'il est chargé, il sera supérieur à 1, et ce n'est pas une nouvelle barre, pourquoi en tenir compte, il n'y a rien de tel dans la tâche.

Où est-il écrit qu'avec la nouvelle barre, il ne peut y avoir de sous-charge historique ?
 
Taras Slobodyanik:

parce qu'il n'y a pas de parenthèses

Ça n'a pas aidé :(

2021.06.02 17:54:09.465 Test (Volatility 10 Index,M1)      Up
2021.06.02 17:55:09.439 Test (Volatility 10 Index,M1)      Up
2021.06.02 17:56:09.686 Test (Volatility 10 Index,M1)      Up
2021.06.02 17:57:09.471 Test (Volatility 10 Index,M1)      Up
2021.06.02 17:58:09.586 Test (Volatility 10 Index,M1)      Up
Raison: