MetaTrader 4 Build 529 beta publié avec un nouveau compilateur - page 39

 
Out of range indique sans ambiguïté une erreur dans le code - sortie du tableau. La chaîne de caractères et l'emplacement de l'erreur y sont indiqués, alors recherchez l'erreur.
 

Voici le code.


datetime   prevtime0 = 0;
double prevVolume0 =0;
double prevClose0 =0;
void init()
{
   Print("_______Test init");
   prevtime0 = iTime(NULL,PERIOD_M1,0); 
   prevVolume0 = iVolume(NULL,PERIOD_M1,0);
   prevClose0 = iClose(NULL,PERIOD_M1,0);
}

void start()
{
  Print(" prevtime0!!!!! = ",prevtime0," iTime(NULL,PERIOD_M1,0) =",iTime(NULL,PERIOD_M1,0) );
  Print(" prevVolume0!!!!! = ",prevVolume0," iVolume(NULL,PERIOD_M1,0) =",iVolume(NULL,PERIOD_M1,0) );
  Print(" prevClose0!!!!! = ",prevClose0," iClose(NULL,PERIOD_M1,0) =",iClose(NULL,PERIOD_M1,0) );
  Print("");

  prevtime0 = iTime(NULL,PERIOD_M1,0); 
  prevVolume0 = iVolume(NULL,PERIOD_M1,0);
  prevClose0 = iClose(NULL,PERIOD_M1,0);

}

Voici le résultat de l'exécution dans le terminal Version 4.0 Build 536

2013.11.11 22:53:08 Test EURJPY,M1 : prevClose0 !!!!! = 133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 Test EURJPY,M1 : prevVolume0 !!!!! = 133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 Test EURJPY,M1 : prevtime0 !!!!! = 2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00
2013.11.11 22:52:25 Test EURJPY,M1 :
2013.11.11 22:52:25 Test EURJPY,M1 : prevClose0 !!!!! = 133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 Test EURJPY,M1 : prevVolume0 !!!!! = 133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 Test EURJPY,M1 : prevtime0 !!!!! =2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00

Comme vous pouvez le voir, ni iClose, ni iVolume, ni iTime ne changent.

Je suppose que oui, tout comme les autres fonctions qui commencent par i.

De même, la fonction iVolume dans cet exemple ne montre clairement pas de Volume.

Au même moment dans le testeur, tout fonctionne et change sauf iVolume. Ça ne marche pas là non plus.

Note.

 
thecore:

Voici le code.


Voici le résultat de l'exécution dans le terminal Version 4.0 Build 536

2013.11.11 22:53:08 Test EURJPY,M1 : prevClose0 !!!!! =133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 Test EURJPY,M1 : prevVolume0 !!!!! =133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 Test EURJPY,M1 : prevtime0 !!!!! =2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00
2013.11.11 22:52:25 Test EURJPY,M1 :
2013.11.11 22:52:25 Test EURJPY,M1 : prevClose0 !!!!! =133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 Test EURJPY,M1 : prevVolume0 !!!!! =133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 Test EURJPY,M1 : prevtime0 !!!!! =2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00

Comme vous pouvez le voir, ni iClose, ni iVolume, ni iTime ne changent.

Je suppose que les autres fonctions qui commencent par i ne changent pas non plus.

De même, la fonction iVolume dans cet exemple ne montre clairement pas de volume.

Au même moment dans le testeur, tout fonctionne et change sauf iVolume. Ça ne marche pas là non plus.

Note.

Eh bien, je l'ai fait. Qu'est-ce qu'il y a ?
 
tara:
Eh bien, je l'ai fait. Qu'est-ce qu'il y a ?


Bien...

La fonction iTime(NULL,PERIOD_M1,0) donne l'heure erronée du terminal de gauche.

Le terminal donne 2013.11.11 22:53:08, iTime donne 2013.11.11 22:38:00, et devrait donner

2013.11.11 22:53:00

iVolume(NULL,PERIOD_M1,0) devrait renvoyer un nombre entier, par exemple 1, 2, 3, 100, pas

comme dans cet exemple 133.02

iClose devrait donner 133,02 dans le premier cas, et 133,03 dans le second.

 

Toutes ces fonctions fonctionnent un peu différemment, à la minute près. Votre impression fonctionne en ticks. Le temps en MT est compté en secondes.

Et le deuxième terminal, en général, à gauche :)

 
tara:

Toutes ces fonctions fonctionnent un peu différemment, à la minute près. Votre impression fonctionne en ticks. Le temps en MT est compté en secondes.

Et le deuxième terminal, en général, à gauche :)

Ecoute, je comprends que tu n'aies personne à qui parler le soir.

Je sais que le procès-verbal, c'est pourquoi dans l'impression du résultat et a montré SPECIAL

deux résultats à des minutes différentes.

Et d'ailleurs, ce message n'était pas pour vous, mais pour les développeurs.

 
thecore:

iVolume(NULL,PERIOD_M1,0) devrait retourner un entier, par exemple 1, 2, 3, 100, mais pas

comme dans cet exemple 133.02

Il semble que iVolume renvoie effectivement le dernier prix(prix de clôture) au lieu du volume.

Mais j'ai été très amusé par la description de l'aide (la première est tirée du fichier, et la seconde du site web).

1

datetime  iVolume(
   string           symbol,          // символ
   int              timeframe,       // период
   int              shift            // сдвиг
   );

2

double iVolume(string symbol, int timeframe, int shift)
 
thecore:


Bien...

La fonction iTime(NULL,PERIOD_M1,0) donne l'heure erronée du terminal de gauche.

Le terminal affiche 2013.11.11 22:53:08, iTime affiche 2013.11.11 22:38:00 et devrait afficher

2013.11.11 22:53:00

iVolume(NULL,PERIOD_M1,0) devrait renvoyer un nombre entier, par exemple 1, 2, 3, 100, pas

comme dans cet exemple 133.02

iClose devrait sortir 133.02 dans le premier cas, et 133.03 dans le second.


Essayez d'utiliser RefreshRates(), OnTick a le même problème, le temps et les prix ne sont pas mis à jour dans le testeur, mais en utilisant RefreshRates() tout est ok ....
 
Deux autres problèmes avec les indicateurs, veuillez consulter le Service Desk!
 
thecore:

Comme vous pouvez le constater, ni iClose, ni iVolume, ni iTime ne changent.

Je suppose que les autres fonctions qui commencent par i ne le font pas non plus.

De même, la fonction iVolume dans cet exemple ne montre clairement pas de Volume.


Corrigé. Merci.