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

 
Roni Iron:

Guten Morgen zusammen!


Frage: Wie kann man am einfachsten die Höchst- und Tiefstwerte eines Balkens ermitteln?

DieÖffnungs-/Schließungszeit der Bar ist uninteressant.

Auf MT4.

Ich danke Ihnen!

hat dies

veröffentlicht in KBhttps://www.mql5.com/ru/code/25897

 

Bitte sagen Sie mir, in MT4 gab es eine vordefinierte Variable double Ask, und wie ich verstehe, innerhalb void OnTick() ohne gezwungen

RereshRates würde sich sein Wert NICHT ändern.

In MT5 wird Ask durch MqlTick last_tick ersetzt; SymbolInfoTick(_Symbol,last_tick); double Ask=last_tick.ask ; sein Wert wird immer durch einen neuen Tick aktualisiert.

Mein Problem ist, dass ich brauche, um die Linie Koordinate durch den Wert von Ask + X zu setzen, aber ich kann es nicht in MT5 tun, weil die Linie seine Koordinaten ändert, nachdem der Wert ändert

Ask=last_tick.ask. Was ist Ihr Rat?

Документация по MQL5: Предопределенные переменные
Документация по MQL5: Предопределенные переменные
  • www.mql5.com
Для каждой выполняющейся mql5-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql5-программы на выполнение...
 
WinProject:

Bitte sagen Sie mir, in MT4 gab es eine vordefinierte Variable double Ask, und wie ich verstehe, innerhalb void OnTick() ohne gezwungen

RereshRates würde sich sein Wert NICHT ändern.

In MT5 wird Ask durch MqlTick last_tick ersetzt; SymbolInfoTick(_Symbol,last_tick); double Ask=last_tick.ask ; sein Wert wird immer durch einen neuen Tick aktualisiert.

Mein Problem ist, dass ich brauche, um die Linie Koordinate durch den Wert von Ask + X zu setzen, aber ich kann es nicht in MT5 tun, weil die Linie seine Koordinaten ändert, nachdem der Wert ändert

Ask=last_tick.ask. Was ist Ihr Rat?

Wie hat sie sich nicht verändert? Sie änderte sich mit jedem Ticken. Aber in der Schleife hat sich das nicht geändert. Vielleicht sind Sie damit ein wenig durcheinander gekommen?

Aber in mql5 können Sie den aktuellen Preis vor der Schleife bestimmen und er wird sich nicht ändern, bis Sie die Schleife verlassen.

 
Leute, entschuldigt die dumme Frage. Im mt4-Terminal wird der Gewinn einschließlich Provisionen, Swaps usw. angezeigt. In mt5 wird "nackt" angezeigt. Ich kann es nicht finden, gibt es eine Einstellung für mt5, um es als mt4 zu zeigen? Oder ist sie dazu nicht in der Lage?
 

Gibt es eine Möglichkeit, die Breite des in OBJ_TEXT geschriebenen Textes in Pixeln zu messen?

 
Alexey Viktorov:

Wie konnte sich das nicht ändern? Sie änderte sich mit jedem Ticken. Aber in diesem Zyklus war das nicht der Fall. Vielleicht sind Sie damit ein wenig durcheinander gekommen?

Aber in mql5 können Sie den aktuellen Preis vor der Schleife bestimmen und er wird sich nicht ändern, bis Sie die Schleife verlassen.

Ja, danke, meine Vermutung hat sich als falsch herausgestellt, aber die Frage ist etwas anders. Ich habe einen Code, auchfür MT4 und MT5:

 void OnTick()
              {
              string S=Symbol();
              double LastAsk= SymbolInfoDouble(S,SYMBOL_ASK);
              ObjectCreate(0,"hLine",OBJ_HLINE,0,0,LastAsk +500*Point());
              }

Die Frage ist, dass in MT4 die erstellte Linie auf den Preis fixiert wird, zu dem sie erstellt wurde, aber in MT5 wird die Linie jedes Mal bei einem neuen Tick auf einen neuen Wert von LastAsk gezogen und ihre Position ändert sich zusammen mit dem Preis. Wie kann ich das im MT5 vermeiden?

 
WinProject:

Ja, danke, meine Vermutung war falsch, aber die Frage ist etwas anders. Es gibt einen Code,auch für MT4 und MT5:

Die Frage ist, dass in MT4 die Linie erstellt wird stationär auf den Preis, bei dem es erstellt wurde, aber in MT5 jedes Mal auf einen neuen Tick die Linie auf einem neuen LastAsk Wert gezeichnet werden und seine Position wird zusammen mit dem Preis ändern. Wie kann ich das im MT5 vermeiden?

Prüfen Sie die Verfügbarkeit von Leitungen nach Namen. Wenn es keins gibt, erstellen Sie eines. Dies sind die Grundlagen im Allgemeinen
 
Artyom Trishkin:
Suchen Sie nach einer Zeile mit Namen. Wenn es keine Zeile gibt, erstellen Sie eine. Dies sind die Grundlagen im Allgemeinen.

Danke, was kann ich noch über diese Grundlagen der Programmierlogik lesen? Das scheint einfach zu sein, aber es ist schwer, das von Grund auf zu verstehen.

 if(ObjectFind(0,"hLine"))

Ich habe eine Bedingung hinzugefügt und alles hat funktioniert.

 
WinProject:

Danke, was kann ich noch über diese Grundlagen der Programmierlogik lesen? Das scheint einfach zu sein, aber es ist schwer, das von Grund auf zu verstehen.

Ich habe eine Bedingung hinzugefügt und alles hat funktioniert.

Plötzlich funktioniert (wie üblich) ObjectGetInteger(0,objectName,OBJPROP_TYPE) schneller.

ObjectFind ist ein synchroner Befehl, d.h. er wartet auf eine vollständige Aktualisierung (und Verfügbarkeit) der Diagrammobjekte.

Wenn Sie mit Ihren eigenen Objekten arbeiten (d.h. in Ihrem eigenen Bestand erstellt), sollten Sie ObjectFind nicht verwenden - Sie wissen bereits, in welchem Fenster das Objekt erstellt wurde und dass es höchstwahrscheinlich existiert und vom richtigen Typ ist.
Das Schlimmste, was passieren kann, ist, dass der Benutzer das Objekt löscht oder die Eigenschaft ändert

 
WinProject:

Ja, danke, meine Vermutung war falsch, aber die Frage ist etwas anders. Es gibt einen Code,auch für MT4 und MT5:

Die Frage ist, dass in MT4 die Linie erstellt wird stationär auf den Preis, bei dem es erstellt wurde, aber in MT5 jedes Mal auf einen neuen Tick die Linie auf einem neuen LastAsk Wert gezeichnet werden und seine Position wird zusammen mit dem Preis ändern. Wie kann ich das im MT5 vermeiden?

Ich erinnere mich nicht daran, ich muss es nachprüfen, aber ich will es nicht. Vielleicht wurde in mql4 bei dem Versuch, ein Objekt zu erstellen, das nach einem bereits existierenden Objekt benannt ist, einfach ein Fehler zurückgegeben, während es in mql5 kein Fehler ist, sondern eine Parameteränderung, wenn die Koordinaten unterschiedlich sind.

Wie Artem sagte - prüfen Sie die Existenz des Objekts

int  ObjectFind( 
   long    chart_id,     // идентификатор графика 
   string  name          // имя объекта 
   );
Grund der Beschwerde: