[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 429

 
Escapee: Bitte weisen Sie auf die Lösung hin;
Ich benötige das Skript, um automatisch den minimalen Server-Stop-Loss für das aktuelle Symbol zu setzen, wenn ich eine Order eröffne. Was soll hier geschrieben werden? OrderSend(Symbol(),OP_BUY,0.01,Ask,10,?,0);

Lesen Sie

Wenn Sie einen schwebenden Auftrag einstellen, darf der Eröffnungskurs nicht zu nahe am Markt liegen. Der Mindestabstand des schwebenden Preises zum aktuellen Marktpreis in Punkten kann auch mit der Funktion MarketInfo() mit dem Parameter MODE_STOPLEVEL ermittelt werden. Wenn der schwebende Auftrag zu einem falschen Preis eröffnet wird, wird der Fehler 130 (ERR_INVALID_STOPS) erzeugt.
Siehe
OrderSend(Symbol(),OP_BUY,0.01,Ask,10, Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point, 0);
 

В документации есть 2 момента касательно индикаторов.

In speziellen Konstanten sind dies:

"indicator_buffers Anzahl der Puffer für die Berechnung des Indikators, bis zu maximal 8

Unter benutzerdefinierte Indikatoren:

"Weist Speicher für Puffer zu, die für benutzerdefinierte Indikatorberechnungen verwendet werden. Die Anzahl der Puffer darf 8 nicht überschreiten und nicht kleiner sein als der in der Eigenschaft indicator_buffers angegebene Wert. Wenn der benutzerdefinierte Indikator zusätzliche Puffer für die Zählung benötigt, sollten Sie diese Funktion verwenden, um die Gesamtzahl der Puffer anzugeben. "

Wenn die Anzahl der Puffer angegeben wird, bedeutet dies meines Erachtens bereits die Zuweisung von Speicher für Puffer. Bitte korrigieren Sie mich, wenn Sie hier etwas anderes meinen.

 

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

 

Bitte sagen Sie mir, ich habe keine Erfahrung, wenn mein Programm zwischen zwei Ticks mehrere Befehle an den Server sendet, werden sie alle ausgeführt, oder nur der erste Befehl? Wo kann ich Informationen zu diesem Thema finden?

 
cubus:

Bitte sagen Sie mir, ich habe keine Erfahrung, wenn mein Programm zwischen zwei Ticks mehrere Befehle an den Server sendet, werden sie alle ausgeführt, oder nur der erste Befehl? Wo kann ich Informationen zu diesem Thema finden?


Lesen:

https://book.mql4.com/ru/basics/common

 
Herzlichen Dank!
 
Vladero:

Hallo! Ich habe eine Frage zu den Indikatoren in MQL4 und werde nicht schlau daraus... Ich habe zum Beispiel einen einfachen Fraktal-Indikator:

Wenn ich es in dieser Form kompiliere, fängt es beim Erweitern des linken Randes des Diagramms und beim Laden der Historie an zu stören und zeigt Markierungen an, wo sie nicht sein sollten (siehe Screenshot im Anhang). Wenn wir einen Teil des Codes auskommentieren:

Dann verschwinden diese Pannen... Die gleichen Probleme treten beim Laden der Historie auf, wenn Sie nur "nicht leere" Elemente des Indikator-Arrays füllen und den Indikatorwert nicht zurücksetzen, wenn keine Beschriftungen vorhanden sind...

Warum ist das so? Warum, so stellt sich heraus, ist es notwendig, den gesamten Indikator beim Laden der Historie neu zu berechnen? Und warum muss ich die Werte von "leeren" Elementen des Arrays löschen?

Wenn die Balken von links nach rechts indiziert wären, würden sich beim Laden der Geschichte die Indizes der Balken ändern, und der Indikator würde ohne Neuberechnung falsch angezeigt werden, dann würden wir diese Störung verstehen ... Aber in MT4 Balken sind von rechts nach links indiziert, so dass beim Laden der Geschichte, die Indizes der Balken, die indiziert wurden, sollten die gleichen bleiben (und die Indikator-Werte, auch), warum dann neu berechnen den Indikator und woher kommen diese Marke Verschiebungen?


Warum muss beim Laden der Historie der gesamte Indikator neu berechnet werden? Und warum sollten die Werte von "leeren" Elementen des Arrays auf Null gesetzt werden? Und wenn Sie das nicht tun, werden die Indikatoren falsch angezeigt...
 
hoz:
#property indicator_buffers gibt die Anzahl der anzuzeigenden Puffer an.
IndicatorBuffers gibt die Gesamtzahl der verwendeten Puffer an.

Beispiel.
#Eigenschaft indicator_buffers 2
.......... .................................
Indikatorpuffer 3

Zeichnet zwei Linien, der dritte Puffer wird nicht angezeigt, sondern für Zwischenberechnungen verwendet.
 
Können Sie mir bitte sagen, wie ich 1 Wert und einen bereits neu gezeichneten Indikatorwert als 2 Zeilen ausgeben kann, der in einem separaten Indikator neu gezeichnet wird? Ich kann es nicht herausfinden, es wird immer der letzte neu gezeichnete Wert ausgegeben.
 
Leider hat niemand auf den Fehler geantwortet, der bei der Installation des 438er Builds auftritt https://www.mql5.com/ru/forum/138609/page425