Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 353

 
tvv:

Das verstehe ich nicht. Diese Option gibt den Speicherort der Datei - \MetaQuotes\Terminal\Common - an. Ohne diese Option kann ich die Datei, die im Tester erzeugt wurde, nicht abrufen. Ohne diese Option wird die Datei in MQL4\Files gesucht - und ich kann die Datei aus dem Testgerät nicht dort ablegen.

Ich habe auf das Fehlen dieser Flagge hingewiesen.

 
Alexey Viktorov:

Ich habe auf das Fehlen dieser Flagge hingewiesen.

Danke für Ihre Hilfe - es ist nur ein Tippfehler - ich kenne diese Flagge. Das Problem ist nicht gelöst - die Datei will nicht im gemeinsamen Lesemodus geöffnet werden - auch nicht ohne Verwendung des Testers. Solange diese Datei durch den Indikator geöffnet ist, kann das Skript sie nicht öffnen. Notepad hingegen öffnet es ohne Probleme.

 
tvv:

Danke für die Hilfe - es ist nur ein Tippfehler - ich kenne diese Flagge. Das Problem ist nicht gelöst - die Datei will sich nicht im gemeinsamen Lesemodus öffnen lassen - auch nicht mit dem Tester. Solange diese Datei durch den Indikator geöffnet ist, kann das Skript sie nicht öffnen. Notepad hingegen öffnet es problemlos.

Versuchen Sie, die Daten periodisch mit FileFlush() auf die Festplatte zu zwingen.


hmmm: eine weitere Sache, die mir nicht sofort aufgefallen ist

tvv:

ExtHandle=FileOpen(c_symbol+(string)20+".csv",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_READ|FILE_SHARE_READ|FILE_COMMON);
Die Datei im Skript wird wie folgt geöffnet: ExtHandleR=FileOpen("EURUSD20.csv",FILE_BIN|FILE_READ|FILE_SHARE_READ);
Bitte weisen Sie mich auf meinen Fehler hin.

Es ist seltsam, dass es dort heißt. Es sollte ein FILE_CSV-Flag vorhanden sein.
FileFlush - Файловые операции - Справочник MQL4
FileFlush - Файловые операции - Справочник MQL4
  • docs.mql4.com
При выполнении операции записи в файл физически данные могут оказаться в нем только через некоторое время. Для того чтобы данные сразу же сохранились в файле, нужно использовать функцию FileFlush(). Если не использовать функцию, то часть данных, еще не попавших на диск, принудительно записывается туда только при закрытии файла функцией...
 
Alexey Viktorov:

Versuchen Sie, die Daten periodisch mit FileFlush() auf die Festplatte zu zwingen.


Hinweis: Eine andere Sache, die mir vor einiger Zeit aufgefallen ist

Es ist seltsam, dass es dort heißt. Es sollte ein FILE_CSV-Flag vorhanden sein.

.CSV ist eine Dateierweiterung - Sie können jede beliebige Erweiterung verwenden - ich habe sie gewählt, damit Sie sie in Notepad nachschlagen können. Hier ist ein interessanter Artikel - https://www.mql5.com/ru/articles/2720. Mein Code entspricht den dort beschriebenen Regeln - aber ich kann die Datei nicht programmatisch lesen. im Modus FILE_SHARE_READ. Für die Datei EURUSD20.HST mit der Erweiterung .HST - muss das Flag FILE.BIN lauten, damit in MT 4 Datei kann offline geöffnet werden.

Основы программирования на MQL5: Файлы
Основы программирования на MQL5: Файлы
  • 2016.09.28
  • Dmitry Fedoseev
  • www.mql5.com
Функции для работы с файлами есть почти во всех языках программирования, и MQL5 в этом смысле — не исключение. Хотя при программировании советников и индикаторов на MQL5 работать с использованием файлов приходится не всегда, (а скорее даже — очень редко), но тем не менее, каждый экспертописатель рано или поздно с этим сталкивается. Диапазон...
 
tvv:

.CSV ist eine Dateierweiterung, die beliebig sein kann - ich habe sie gewählt, damit ich sie in Notepad nachschlagen kann. Hier ist ein interessanter Artikel - https://www.mql5.com/ru/articles/2720. Mein Code entspricht den dort beschriebenen Regeln - aber ich kann die Datei nicht programmatisch lesen. im Modus FILE_SHARE_READ. Für die Datei EURUSD20.HST mit der Erweiterung .HST - muss das Flag FILE.BIN lauten, damit in MT 4 Datei kann offline geöffnet werden.

Ich habe versucht, nicht in den Tester zu arbeiten, sondern nur auf einem normalen Chart (EURUSD M1) - Ich führe den Indikator, der die TF M20 erzeugt.

So öffnen Sie die Datei:

ExtHandle= FileOpen("EURUSD20.csv",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_READ|FILE_SHARE_READ).

Die Datei wird dann im Ordner MQL4\Files angezeigt. Dann führen wir das Skript auf einem regulären Chart (EURUSD M5) aus, der den Inhalt von EURUSD20.csv in EURUSD20.HST kopiert. Die Datei EURUSD20.HST wird im Ordner history im gleichen Verzeichnis wie MQL4 erstellt.

Der Skriptcode:

ExtHandleR=FileOpen("EURUSD20.csv",FILE_BIN|FILE_READ|FILE_SHARE_READ) Datei lesen;

ExtHandleW=FileOpenHistory("EURUSD20.hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ);

Alles funktioniert nur, wenn ich den Indikator aus dem M1-Diagramm entferne. Das heißt, dass der Lesemodus für die Dateifreigabe bei mir nicht funktioniert.

 

Hallo! Was ist die Metatrader-Störung auf dem Eurodollar-Diagramm? Eine Tageskerze für Sonntag 9.10.2011 erschien, auf dem Stundenchart nur eine Stunde 23:00 für dieses Datum. Dies ist wahrscheinlich auf die Umstellung der Uhren auf Winterzeit zurückzuführen. Wie kann man das beheben? Eine solche Kerze gab es vorher nicht.

 
tvv: Alles funktioniert nur, wenn ich den Indikator aus dem M1-Diagramm entferne. Das heißt, der Modus "Geteilte Datei lesen" funktioniert nicht.

Das Problem wird wie folgt gelöst: Das Programm, das die Datei schreibt, muss nach jedem Schreibvorgang FileClose schließen und damit die Datei für ein anderes Programm zum Lesen freigeben. Dies liegt daran, dass die Daten zunächst in den Puffer geschrieben werden und eine Zeit lang nicht physisch in der Datei vorhanden sind. Durch das Schließen der Datei wird der Puffer in der Datei freigegeben. Vor dem nächsten Schreiben

   // Открытие или создание файла и перемещение указателя в конец
   Файл = FileOpen(ИмяФайла, FILE_CSV | FILE_READ | FILE_WRITE, " "); // еще COMMON  SHARE...
   FileSeek(Файл, 0, SEEK_END);

wird die Datei erneut geöffnet und der Zeiger wird an das Ende der Datei

 

Hallo! Können Sie mir sagen, ob es richtig ist, dass die Anzahl der erhaltenen Punkte in beiden Ausdrücken gleich ist? Das ist wirklich wichtig für mich!

"Цена закрытия последнего закрытого ордера"-Ask>=30*Point

Ask-"Цена закрытия последнего закрытого ордера">=30*Point //Если цена Выше

Genauer gesagt, können die Punkte nicht negativ sein? Oder ist es immer noch.....))

 

Guten Abend.

Ich habe mit dem Studium von mql5 begonnen und habe einige Fragen, also bitte helfen Sie mir.

Das Ziel ist es, die Werte der letzten n Candlesticks in ein Array zu bekommen und das Array zu sortieren, indem nur die ungeschlagenen Candlesticks ausgewählt werden.

Ich habe die Funktion geschrieben:

double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
   {
      double high=0;
      int k=0;
      int s=0;
      ArraySetAsSeries(High,true);
         if(CopyHigh(Symbol(),Period(),0,NumCand,High)==-1)
               {
               Print("Не удалось скопировать значения цен High! Код ошибки = ",GetLastError());
               }  
               
      
       for(int x=NumCand-1; x==0; x--)
            {
            if(IsStopped())
            break;
                  for (int j = NumCand-x-1; j == 0; j--) 
                  {
                  if (High[j+1] > High[j])
                     {
                     // Если хай не побит записываем в массив
                     temp[k] = High[j+1];
                     k++;
                     }   
                   }
            }
      s=sizeof(temp);               
      high=temp[index];
      return(high);
   } 

Es erzeugt einFehlerfeld außerhalb des Bereichs.

 high=temp[index];

Soweit ich verstanden habe, wird dieser Fehler durch die Adressierung einer nicht existierenden Zelle des Arrays verursacht.

Aber ich konnte den Fehler beim Verschieben nicht finden. Bitte teilen Sie mir mit, wo ich einen Fehler gemacht habe, oder gibt es vielleicht eine elegantere Sortierung.

 
WhiteBerkut:

Guten Abend.

Ich habe mit dem Studium von mql5 begonnen und habe einige Fragen, also bitte helfen Sie mir.

Die Aufgabe besteht darin, die Werte der letzten n Candlesticks in ein Array zu übertragen und das Array zu sortieren, indem nur die ungeschlagenen Candlesticks ausgewählt werden.

Ich habe die Funktion geschrieben:

Es erzeugt einFehlerfeld außerhalb des Bereichs.

Soweit ich verstanden habe, wird dieser Fehler durch die Adressierung einer nicht existierenden Zelle des Arrays verursacht.

Aber ich konnte den Fehler beim Verschieben nicht finden. Bitte teilen Sie mir mit, wo ich einen Fehler gemacht habe, oder gibt es vielleicht eine elegantere Sortierung.

Vergleich des Indexwertes mit der Array-Dimension. Beachten Sie, dass die Array-Elemente von Null an nummeriert sind und die Nummer des letzten Elements um 1 kleiner ist als die Indexdimension. Und NumCand ist gleich was?