Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 154

 
nidves erstens, machen Sie eine korrekte Nachricht mit dem Code, es ist sehr schwierig, es zu verstehen, und zweitens, würde ich gerne die Struktur der Nachrichten-Datei zu sehen, sonst ist es nicht klar, welche Daten verwendet wird, wo.
 

Als erstes fällt auf, dass Sie den EA als gewöhnliches Skript verwenden. Lesen Sie das Handbuch, um zu sehen, wie sie sich unterscheiden. Es ist das Skript, nicht der Expert Advisor, der für Ihre Aufgabe geeignet ist!

Zweitens:Warum verwenden Sie dieses Design?

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

Und die Wurzel Ihres Problems.

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

Nun, das letzte haben Sie sehr viel durcheinander in einem einfachen Programm beschreiben, was Sie von diesem Programm wollen und lassen Sie uns versuchen, das Skript Schritt für Schritt schön zu schreiben!

 
Vitaly Gorbunov:

Als erstes fällt auf, dass Sie den EA als gewöhnliches Skript verwenden. Lesen Sie das Handbuch, um zu sehen, wie sie sich unterscheiden. Es ist das Skript, nicht der Expert Advisor, der für Ihre Aufgabe geeignet ist!

Zweitens:Warum verwenden Sie dieses Design?

Und die Wurzel Ihres Problems.

Und schließlich, Sie machen zu viel Lärm in einem einfachen Programm, beschreiben Sie, was Sie von diesem Programm wollen und lassen Sie uns versuchen, das Skript Schritt für Schritt zu schreiben!

Vitaly, ich danke dir für deine Antwort!

1) Was das Skript betrifft, verstehe ich Sie, ich werde es versuchen.

2) Nun, alles ist einfach, ich unterbreche die for-Schleife.

3) Ich möchte einen Expert Advisor oder ein Skript erstellen, das Kurse für bestimmte Instrumente und Zeitrahmen sowie bestimmte Nachrichten zu einem bestimmten Datum und einer bestimmten Uhrzeit herunterlädt.

Das Endergebnis des Schreibens in die Datei sollte wie folgt aussehen

SymbolZeitraumNachrichtenDateTimeÖffnen SieHochNiedrigSchließen Sie
GBPUSD5KanadischerBenchmark-Verbraucherpreisindex (CPI) (m/m)26.01.2018 16:30:000.000000000.000000000.000000000.00000000
GBPUSD5Kanadischer Benchmark-Verbraucherpreisindex (CPI) (m/m)21.12.2017 15:30:000.000000000.000000000.000000000.00000000
GBPUSD5Kanadischer Benchmark-Verbraucherpreisindex (CPI) (m/m)17.11.2017 15:30:000.000000000.000000000.000000000.00000000
GBPUSD5Kanadischer Benchmark-Verbraucherpreisindex (CPI) (m/m)20.10.2017 15:30:000.000000000.000000000.000000000.00000000

Und so weiter mit verschiedenen Instrumenten+Zeitrahmen+Nachrichtenund Daten.

Es gibt noch eine weitere Nuance. Wenn die Daten auf dem 60-Minuten-Zeitrahmen entladen werden, sollten die Kurse den Zeitrahmen 16:00 und 15:00 Uhr entsprechen.

Wenn der Zeitrahmen für die Nachrichten 14:45 Uhr ist, sollten die Notierungen dieser Zeit entsprechen:

1 Minute - 14:45

5 Minuten - 14:45

15 Minuten - 14:45

30 Minuten - 14:30

60 Minuten - 14:00

Ich hoffe, ich habe mich klar ausgedrückt. Dankeschön

 

Sehen Sie sich diese Schleife noch einmal an! Die Anzahl der Variablen wird nur durch die for-Anweisung selbst geändert, so dass if in dieser Schleife einfach überflüssig ist.

Legen wir nun fest, wie wir die Daten verarbeiten wollen. Es scheint mir logischer zu sein, die Nachrichtenparameter aus der Nachrichtendatei zu lesen, die Daten zu verarbeiten und sie in die Datei mit den Zitaten zu schreiben. Das Sammeln eines Arrays von Nachrichten, die dann durch ein Array wieder für einen Datensatz laufen müssen, scheint nicht rational, darüber hinaus sehr oft in der Verarbeitung von Arrays kann eine Menge Fehler mit Indizes verbunden zu machen.

 
Vitaly Gorbunov:

Sehen Sie sich diese Schleife noch einmal an! Die Anzahl der Variablen wird nur durch die for-Anweisung selbst geändert, so dass if in dieser Schleife einfach überflüssig ist.

Legen wir nun fest, wie wir die Daten verarbeiten wollen. Es scheint mir logischer zu sein, die Nachrichtenparameter aus der Nachrichtendatei zu lesen, die Daten zu verarbeiten und sie in die Datei mit den Zitaten zu schreiben. Sammeln Sie ein Array von Nachrichten, die dann wieder durch ein Array für einen Datensatz zu laufen scheint nicht rational, auch sehr oft in der Verarbeitung von Arrays können eine Menge Fehler mit Indizes verbunden zu machen.

Ich meine, Dateien mit Anführungszeichen im Voraus erstellen und der Datei Nachrichtenparameter hinzufügen?

 
nidves:

Meinen Sie damit, dass Sie die Angebotsdateien im Voraus erstellen und die Nachrichtenparameter in die Datei aufnehmen?

Sie verstehen mich nicht, wir lesen aus der Nachrichtendatei, verarbeiten sie und schreiben sie sofort in die Zitatdatei und so weiter, bis die gesamte Nachrichtendatei verarbeitet ist!
 
Vitaly Gorbunov:
Sie verstehen mich nicht, wir lesen aus der Nachrichtendatei, verarbeiten sie und schreiben sie sofort in die Zitatdatei und so weiter, bis die gesamte Nachrichtendatei verarbeitet ist!
Das ist es, was ich versuche zu tun, nur durch Arrays. Wie würden Sie diesen Code schreiben?
 
nidves:
Das ist es, was ich versuche zu tun, nur durch Arrays. Wie würden Sie einen solchen Code schreiben?
Warum ein Array verwenden, wenn es nicht benötigt wird? Je einfacher der Code ist, desto weniger Fehler können Sie machen!
 
Vitaly Gorbunov:
Warum sollte ich das Array verwenden, wenn es nicht benötigt wird? Je einfacher der Code ist, desto weniger Fehler können Sie machen!

Ich lerne durch diesen Code, mit Arrays zu arbeiten. Schließlich ist die Aufgabe im Prinzip nicht kompliziert.

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

Die "Open"-Anführungszeichen sind bereits in dem obigen Array gespeichert. Daher muss ich nur das Zitat des Datums, das ich benötige, aus dem Array herausziehen.

 
nidves:

Ich lerne durch diesen Code, mit Arrays zu arbeiten. Schließlich ist die Aufgabe im Prinzip nicht kompliziert.

Die "Open"-Anführungszeichen sind bereits in dem obigen Array gespeichert. Daher muss ich nur das Zitat des Datums, das ich benötige, aus diesem Array ziehen.

Ich gehe jetzt in den Sommer und werde am Montag dort sein. Wenn Sie Interesse haben, fügen Sie mich als Freund hinzu und wir können uns unterhalten, ohne das Forum zu vermüllen.
Grund der Beschwerde: