Questions des débutants MQL4 MT4 MetaTrader 4 - page 154

 
nidves premièrement, faites un message correct avec le code, il est très difficile de le comprendre, et deuxièmement, j'aimerais voir la structure du fichier de nouvelles, sinon on ne sait pas quelles données sont utilisées où.
 

La première chose qui attire l'attention est que vous utilisez l'EA comme un script ordinaire. Lisez le manuel pour voir en quoi ils sont différents. C'est le script, et non le conseiller expert, qui convient à votre tâche !

Deuxièmement,pourquoi utilisez-vous ce modèle ?

  for (count=1; count<=countstr; count++)
  {
   //----
   //----  
  if (count>=countstr) break;
  }

Et la racine de votre problème.

void CreatFile()
   {
    string Filepatch="Analyse news\\"+"Symbol"+"_"+IntegerToString(periodMT)+".csv";
    Comment("Creat a new file");
    int file=FileOpen(Filepatch, FILE_WRITE|FILE_CSV);
    FileWrite(file, "Symbol","Period","News","Data Time","Open","High","Low","Close");
    
    int  bar_index=iBarShift(symbolMT,periodMT,DateNews[count-1]); 
//Чему равен в этот момент count? 
//Для чего нужен был массив событий если в обработку попадает только одно событие?
//Функция iBarShift (так как вы используете) возвращает либо номер бара по времени либо ближайший номер бара если в истории есть пропуски 
//Внимательно почитайте описание 
    int  countBar=bar_index;
    
    for(count=1; count<=countstr; count++)
    {
    countBar--;
    
    FileWrite(file,symbolMT,periodMT,NameNews[count-1],DateNews[count-1],
    
    DoubleToStr(iOpen(symbolMT,periodMT,countBar))

    );
    }
    FileClose(file);
    ExpertRemove();
   }

Eh bien, le dernier que vous avez très bien fait dans un programme simple décrire ce que vous voulez de ce programme et essayons d'écrire le script étape par étape gentiment !

 
Vitaly Gorbunov:

La première chose qui attire l'attention est que vous utilisez l'EA comme un script ordinaire. Lisez le manuel pour voir en quoi ils sont différents. C'est le script, et non le conseiller expert, qui convient à votre tâche !

Deuxièmement,pourquoi utilisez-vous ce modèle ?

Et la racine de votre problème.

Et enfin, vous faites trop de bruit dans un programme simple, décrivez ce que vous voulez de ce programme et essayons d'écrire le script étape par étape !

Vitaly, merci pour votre réponse !

1)A propos du script, je vous comprends, je vais essayer.

2)Bon, tout est simple, j'interromps la boucle for.

3) Je veux créer un Expert Advisor ou un script qui téléchargera les cotations pour certains instruments + délais, des nouvelles spécifiques par date et heure spécifiques.

Le résultat final de l'écriture dans le fichier devrait ressembler à ceci

SymbolePériodeNouvellesDateTimeOuvrirHautFaibleFermer
GBPUSD5Indice de référence des prix à la consommation (IPC) du Canada (m/m)26.01.2018 16:30:000.000000000.000000000.000000000.00000000
GBPUSD5Indice de référence des prix à la consommation (IPC) du Canada (m/m)21.12.2017 15:30:000.000000000.000000000.000000000.00000000
GBPUSD5Indice de référence des prix à la consommation (IPC) du Canada (m/m)17.11.2017 15:30:000.000000000.000000000.000000000.00000000
GBPUSD5Indice de référence des prix à la consommation (IPC) du Canada (m/m)20.10.2017 15:30:000.000000000.000000000.000000000.00000000

Et ainsi de suite sur différents instruments+délais+nouvelleset dates.

Il y a une autre nuance. Si les données sont déchargées sur le cadre temporel de 60 minutes, les cotations devraient correspondre aux cadres temporels de 16:00 et 15:00.

Si l'heure de l'actualité est 14:45, les cotations doivent correspondre à cette heure :

1 minute - 14:45

5 minutes - 14:45

15 minutes - 14:45

30 minutes - 14:30

60 minutes - 14:00

J'espère avoir été clair. Merci.

 

Regardez à nouveau cette boucle ! Le nombre de variables n'est modifié que par l'instruction for elle-même, donc if est superflu dans cette boucle.

Définissons maintenant comment nous allons traiter les données. Il me semble qu'il serait plus logique de lire dans le fichier des actualités les paramètres des actualités, de traiter les données et de les écrire dans le fichier des cotations. Recueillir un tableau de nouvelles qui doivent ensuite parcourir à nouveau un tableau pour un enregistrement ne semble pas rationnel, en outre, très souvent dans le traitement des tableaux peut faire beaucoup d'erreurs liées aux index.

 
Vitaly Gorbunov:

Regardez à nouveau cette boucle ! Le nombre de variables n'est modifié que par l'instruction for elle-même, donc if est superflu dans cette boucle.

Définissons maintenant comment nous allons traiter les données. Il me semble qu'il serait plus logique de lire dans le fichier des actualités les paramètres des actualités, de traiter les données et de les écrire dans le fichier des cotations. Recueillir un tableau de nouvelles, qu'ensuite encore de courir à travers un tableau pour un enregistrement ne semble pas rationnel, en outre, très souvent dans le traitement des tableaux peuvent faire beaucoup d'erreurs associées à des indices.

Je veux dire, créer des fichiers avec des citations à l'avance et ajouter des paramètres de nouvelles au fichier ?

 
nidves:

Voulez-vous dire qu'il faut créer les fichiers de citation à l'avance et ajouter les paramètres des nouvelles au fichier ?

Vous ne me comprenez pas, nous lisons le fichier des nouvelles, le traitons et l'écrivons immédiatement dans le fichier des citations et ainsi de suite jusqu'à ce que tout le fichier des nouvelles soit traité !
 
Vitaly Gorbunov:
Vous ne me comprenez pas, nous lisons le fichier des nouvelles, le traitons et l'écrivons immédiatement dans le fichier des citations et ainsi de suite jusqu'à ce que tout le fichier des nouvelles soit traité !
C'est ce que j'essaie de faire, mais en utilisant des tableaux. Comment écrirais-tu ce code ?
 
nidves:
C'est ce que j'essaie de faire, mais en utilisant des tableaux. Comment écrivez-vous ce code ?
Pourquoi utiliser un tableau là où il n'est pas nécessaire ? Plus le code est simple, moins vous pouvez faire d'erreurs !
 
Vitaly Gorbunov:
Pourquoi devrais-je utiliser le tableau là où il n'est pas nécessaire ? Plus le code est simple, moins vous pouvez faire d'erreurs !

J'apprends à travailler avec des tableaux grâce à ce code. Après tout, la tâche n'est pas compliquée en principe.

OpenSymbol  [count-1]=iOpen(symbolMT,periodMT,numberBar);

Les guillemets "Open" sont déjà stockés dans le tableau ci-dessus. Par conséquent, je dois simplement extraire du tableau la citation de la date dont j'ai besoin.

 
nidves:

J'apprends à travailler avec des tableaux grâce à ce code. Après tout, la tâche n'est pas compliquée en principe.

Les guillemets "Open" sont déjà stockés dans le tableau ci-dessus. Par conséquent, je dois simplement extraire de ce tableau la citation de la date dont j'ai besoin.

Je suis en train de passer à l'été et je serai là lundi. Si vous êtes intéressé, ajoutez-moi comme ami et nous pourrons discuter sans encombrer le forum.