[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 427
Guten Tag. Frage zu einem Dateizeiger... Im MQL4-Buch, zu finden unter MQL4.community, gibt es im Abschnitt "Standardfunktionen" ein Beispiel für das Skript "Dateioperationen", das für das Lesen von Daten aus einer Datei und die Anzeige von grafischen Objekten in einem Symbolfenster gedacht ist:
//--------------------------------------------------------------------// timetablenews.mq4// Предназначен для использования в качестве примера в учебнике MQL4.//--------------------------------------------------------------- 1 --int start() // Спец. функция start
{
//--------------------------------------------------------------- 2 --int Handle, // Файловый описатель
Stl; // Стиль вертикальной линииstring File_Name="News.csv", // Имя файла
Obj_Name, // Bмя объекта
Instr, // Название валюты
One,Two, // 1я и 2я чать названия инстр.
Text, // Текст описания события
Str_DtTm; // Дата и время события(строка)datetime Dat_DtTm; // Дата и время события(дата)color Col; // Цвет вертикальной линии//--------------------------------------------------------------- 3 --
Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");// Открытие файлаif(Handle<0) // Неудача при открытии файла
{
if(GetLastError()==4103) // Если файла не существует,..Alert("Нет файла с именем ",File_Name);//.. извещаем трейдера else// При любой другой ошибке..Alert("Ошибка при открытии файла ",File_Name);//..такое сообщPlaySound("Bzrrr.wav"); // Звуковое сопровождениеreturn; // Выход из start()
}
//--------------------------------------------------------------- 4 --while(FileIsEnding(Handle)==false)// До тех пор, пока файловый ..
{ // ..указатель не в конце файла//--------------------------------------------------------- 5 --
Str_DtTm =FileReadString(Handle);// Дата и время события(дата)
Text =FileReadString(Handle);// Текст описания событияif(FileIsEnding(Handle)==true) // Файловый указатель в концеbreak; // Выход из чтения и рисования//--------------------------------------------------------- 6 --
Dat_DtTm =StrToTime(Str_DtTm); // Преобразование типа данных
Instr =StringSubstr(Text,0,3);// Извлекаем первые 3 символа
One=StringSubstr(Symbol(),0,3);// Извлекаем первые 3 символа
Two=StringSubstr(Symbol(),3,3);// Извлекаем вторые 3 символа
Stl=STYLE_DOT; // Для всех - стиль пунктир
Col=DarkOrange; // Для всех - цвет такойif(Instr==One || Instr==Two) // А для событий по нашему ..
{ // .. финансовому инструменту..
Stl=STYLE_SOLID; // .. такой стиль..
Col=Red; // .. и такой цвет верт. линии
}
//--------------------------------------------------------- 7 --
Obj_Name="News_Line "+Str_DtTm; // Имя объектаObjectCreate(Obj_Name,OBJ_VLINE,0,Dat_DtTm,0);//Создаем объект..ObjectSet(Obj_Name,OBJPROP_COLOR, Col); // ..и его цвет,..ObjectSet(Obj_Name,OBJPROP_STYLE, Stl); // ..стиль..ObjectSetText(Obj_Name,Text,10); // ..и описание
}
//--------------------------------------------------------------- 8 --FileClose( Handle ); // Закрываем файлPlaySound("bulk.wav"); // Звуковое сопровождениеWindowRedraw(); // Перерисовываем объектыreturn; // Выход из start()
}
//--------------------------------------------------------------- 9 --
Unten, bei der Analyse dieses Skripts im Buch über MQL4, wird der folgende Satz angegeben: "Wenn die angegebene Prüfung (die letzten 2 Zeilen in Block 5-6) entfernt wird, wird zur Laufzeit ein zusätzliches Objekt erstellt. Und erst danach wird die Endbedingung der while-Schleife ausgelöst und die Kontrolle an Block 8-9 übergeben".
Verstehe ich das richtig? Ein Dateizeiger wird NICHT DURCH TEXT-Zeichen GEFÜLLT (zum Beispiel: text|, wobei | ein Dateizeiger ist), sondern ist ein Zeiger MIT AUSDRUCK, zum Beispiel: text, wobei k das "bis"-Zeichen ist, k-ter wird durch einen Dateizeiger hervorgehoben. Dies erklärt die Notwendigkeit von Saiten (siehe S. 164):
if(FileIsEnding(Handle)==true) // Файловый указатель в концеbreak; // Выход из чтения и рисования//--------------------------------------------------------- 6 --
In der Tat. Bei der vorletzten Iteration, nach der Erstellung des LAST-Objekts
2007.05.11 18:30;JPY
steht der Dateizeiger an der Position des letzten Objekts, d. h:
2007.05.11 18:30;JPY IndustrielleFertigung
(wobei o für das Zeichen "o" und k für den Dateiindex steht). Wenn dann die Kontrolle an den Kopf der while-Anweisung übergeben wird, gibt die Funktion FileIsEnding(handle) natürlich true zurück , weil der Dateizeiger NICHT am Ende der Datei, sondern am LETZTEN Zeichen dieser Datei steht. Wenn dann die ersten beiden Zeilen ausgeführt werden, bewegt sich der Dateizeiger auf einen leeren Platz, und wenn keine Zeilen vorhanden sind
if(FileIsEnding(Handle)==true) // Файловый указатель в концеbreak; // Выход из чтения и рисования//--------------------------------------------------------- 6 --
wird das Skript eine Grafik (d.h. eine Zeile) mit einer leeren Beschreibung und einer Zeitkoordinate, die 0 entspricht, erstellen. Dies ist mit dem Satz gemeint: "Wenn die angegebene Prüfung (die letzten beiden Zeilen in Block 5-6) entfernt wird, wird zur Laufzeit ein zusätzliches Objekt erstellt. "
Frage: Verstehe ich das richtig?
a) die Definition eines Dateizeigers;
b) die Bedeutung des Satzes "Wenn die angegebene Prüfung (die letzten beiden Zeilen in Block 5-6) gelöscht wird, wird bei der Programmausführungein zusätzliches Objekt erstellt.Und erst danach wird die Endbedingung der while-Schleife ausgelöst und die Kontrolle an Block 8-9 übergeben".
P.S. Um das Forum nicht zu überladen, danke ich Ihnen im Voraus für Ihre Antwort
Leute!!! Bitte gebt mir die Funktion zum Öffnen des Stundenbalkens (ich muss das Open der vorherigen Kerze bestimmen) und wenn (TimeMinute(TimeCurrent())==m && TimeSeconds(TimeCurrent())==n) aus irgendeinem Grund funktioniert es nicht, wenn ich m=1 n=1 setze, aber ich bitte euch, wen interessiert das schon...
stater: Leute!!! Bitte gebt mir die Funktion zum Öffnen des Stundenbalkens (ich muss das Open der vorherigen Kerze bestimmen) und wenn (TimeMinute(TimeCurrent())==m && TimeSeconds(TimeCurrent())==n) aus irgendeinem Grund funktioniert es nicht, wenn ich m=1 n=1 setze, aber ich bitte euch, wen interessiert das schon...
Der Berater gibt immer wieder die Fehlermeldung 0 aus. Können Sie mir sagen, wie ich überprüfen kann, was die Ursache dafür ist, wie ich diese Stelle finden kann?
Hallo.
Können Sie mir sagen, welche Änderungen am Code vorgenommen werden müssen? Ich möchte, dass das Histogramm nur die Werte für bärische Balken anzeigt.
Der Indikator selbst https://www.mql5.com/ru/code/8920
Guten Tag. Frage zu einem Dateizeiger... Im MQL4-Buch, zu finden unter MQL4.community, gibt es im Abschnitt "Standardfunktionen" ein Beispiel für das Skript "Dateioperationen", das für das Lesen von Daten aus einer Datei und die Anzeige von grafischen Objekten in einem Symbolfenster gedacht ist:
Unten, bei der Analyse dieses Skripts im Buch über MQL4, wird der folgende Satz angegeben: "Wenn die angegebene Prüfung (die letzten 2 Zeilen in Block 5-6) entfernt wird, wird zur Laufzeit ein zusätzliches Objekt erstellt. Und erst danach wird die Endbedingung der while-Schleife ausgelöst und die Kontrolle an Block 8-9 übergeben".
Verstehe ich das richtig? Ein Dateizeiger wird NICHT DURCH TEXT-Zeichen GEFÜLLT (zum Beispiel: text|, wobei | ein Dateizeiger ist), sondern ist ein Zeiger MIT AUSDRUCK, zum Beispiel: text, wobei k das "bis"-Zeichen ist, k-ter wird durch einen Dateizeiger hervorgehoben. Dies erklärt die Notwendigkeit von Saiten (siehe S. 164):
In der Tat. Bei der vorletzten Iteration, nach der Erstellung des LAST-Objekts
2007.05.11 18:30;JPY
steht der Dateizeiger an der Position des letzten Objekts, d. h:
2007.05.11 18:30;JPY IndustrielleFertigung
(wobei o für das Zeichen "o" und k für den Dateiindex steht). Wenn dann die Kontrolle an den Kopf der while-Anweisung übergeben wird, gibt die Funktion FileIsEnding(handle) natürlich true zurück , weil der Dateizeiger NICHT am Ende der Datei, sondern am LETZTEN Zeichen dieser Datei steht. Wenn dann die ersten beiden Zeilen ausgeführt werden, bewegt sich der Dateizeiger auf einen leeren Platz, und wenn keine Zeilen vorhanden sind
wird das Skript eine Grafik (d.h. eine Zeile) mit einer leeren Beschreibung und einer Zeitkoordinate, die 0 entspricht, erstellen. Dies ist mit dem Satz gemeint: "Wenn die angegebene Prüfung (die letzten beiden Zeilen in Block 5-6) entfernt wird, wird zur Laufzeit ein zusätzliches Objekt erstellt. "
Frage: Verstehe ich das richtig?
a) die Definition eines Dateizeigers;
b) die Bedeutung des Satzes "Wenn die angegebene Prüfung (die letzten beiden Zeilen in Block 5-6) gelöscht wird, wird bei der Programmausführungein zusätzliches Objekt erstellt.Und erst danach wird die Endbedingung der while-Schleife ausgelöst und die Kontrolle an Block 8-9 übergeben".
P.S. Um das Forum nicht zu überladen, danke ich Ihnen im Voraus für Ihre Antwort
Leute!!! Bitte gebt mir die Funktion zum Öffnen des Stundenbalkens (ich muss das Open der vorherigen Kerze bestimmen) und wenn (TimeMinute(TimeCurrent())==m && TimeSeconds(TimeCurrent())==n) aus irgendeinem Grund funktioniert es nicht, wenn ich m=1 n=1 setze, aber ich bitte euch, wen interessiert das schon...
https://docs.mql4.com/ru/series
Danke für die Antwort, aber ich verstehe nicht, welche Funktion verwendet wird, um zu wissen, ob eine Stundenkerze geöffnet.... hat.
iTime
iTime
EA gibt ständig den Fehler 0 aus. Wie kann ich überprüfen, was die Ursache dafür ist, wie finde ich diese Stelle?
Fehler 0 bedeutet, dass es keine Fehler gibt.
Hören Sie auf zu drucken (alert) =)
Wie kann man die Schreibweise einer Formel abkürzen, wenn eine Gleichung mehrmals wiederholt wird?