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

 
vladmirad:

Danke für den Hinweis, ich bin mir dieser Funktionen bewusst.

Wissen Sie, warum so viele Menschen, Sie eingeschlossen, denjenigen antworten, die mql wie eine Axt kennen? Und sie ignorieren den Rat der Wissenden? Wenn Sie keine haben, lesen Sie diesen Tipp:

Das Forum für Handel, automatisierte Handelssysteme und Strategietests.

Alle Fragen von Anfängern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes

Artyom Trishkin, 2020.06.29 00:03

Hallo.
Beginnen Sie mit der Überwachung des Zustands des Diagramms in OnChartEvent() https://www.mql5.com/ru/docs/event_handlers/onchartevent
Es gibt einige Ereignisse, die Sie benötigen:
CHARTEVENT_OBJECT_CREATE Erstellen eines grafischen Objekts
CHARTEVENT_OBJECT_CHANGE Ändern der Eigenschaften eines grafischen Objekts über den Eigenschaftsdialog
CHARTEVENT_OBJECT_DELETE Löschen eines grafischen Objekts
https://www.mql5.com/ru/docs/constants/chartconstants/enum_chartevents
Protokollieren Sie alle Parameter des OnChartEvent()-Handlers und sehen Sie deren Werte beim Hinzufügen/Ändern/Löschen von grafischen Objekten. Das gibt Ihnen die Richtung vor, in die Sie gehen müssen.

 
vladmirad:

Danke für den Hinweis, ich kenne diese Funktionen.
Aber wie können wir sie verwenden, um ein Objekt auf der Karte automatisch zu finden und seine Parameter zu lesen, wenn wir seinen Namen nicht kennen?
Wenn Sie ein Objekt mit der Maus in ein Diagramm zeichnen, gibt das System seinen Namen an.

Natürlich ist es nicht schwierig, die manuelle Eingabe aller notwendigen Daten des Objekts aus seiner Eigenschaftstabelle zu organisieren, aber warum dann die Automatisierung?
Aber wie man einem EA programmatisch den Namen eines Objekts gibt und dann alle von Ihnen genannten Funktionen nutzen kann, ist mir immer noch nicht klar...

Wie oben erwähnt, arbeiten Sie mit Diagrammereignissen:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool applyObject(const string _objName) {
  if(MessageBox("Сохранить параметры объекта \"" + _objName + "\" для эксперта?", "ObjChange", MB_YESNO) == IDYES) {
    objName = _objName; // Запись имени изменяемого объекта
    // Запись других параметров изменяемого объекта ...
    return true;
  }
  return false;
}

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam
) {
//---
  if(id == CHARTEVENT_OBJECT_CREATE || id == CHARTEVENT_OBJECT_DRAG || id == CHARTEVENT_OBJECT_CHANGE) {
    applyObject(sparam);
  }
}
Dateien:
ObjChange.mq5  5 kb
 
Artyom Trishkin:
Hallo.
Beginnen Sie damit, den Zustand des Diagramms in OnChartEvent() zu verfolgen https://www.mql5.com/ru/docs/event_handlers/onchartevent
Es gibt einige Ereignisse, die Sie benötigen:
CHARTEVENT_OBJECT_CREATE Erstellen Sie ein grafisches Objekt
CHARTEVENT_OBJECT_CHANGE Ändern Sie die Eigenschaften eines grafischen Objekts über den Eigenschaftsdialog
CHARTEVENT_OBJECT_DELETE Löschen Sie ein grafisches Objekt
https://www.mql5.com/ru/docs/constants/chartconstants/enum_chartevents
Protokollieren Sie alle Parameter von OnChartEvent() und sehen Sie deren Werte, wenn Sie grafische Objekte hinzufügen/ändern/löschen. Das gibt Ihnen die Richtung vor, in die Sie gehen müssen.

Vielen Dank, habe Ihren Rat bereits befolgt!

 
Mihail Matkovskij:

Sie können Objekte eines bestimmten Typs mit ihren Koordinaten wie folgt finden und protokollieren:

Sie können beliebige Daten in einer Datei speichern. Und im Expert Advisor erstellen Sie einen Lader, der die entsprechenden Objekte hinzufügt und dann Daten aus der Datei in sie lädt. Aber Sie skizzieren zumindest einen Quellcode für Ihre spezielle Aufgabe und veröffentlichen ihn hier.

Auch Ihnen, Michael, vielen Dank für Ihre praktische Hilfe!
 
Mihail Matkovskij:

Wie oben erwähnt, arbeiten Sie mit den Diagrammereignissen:

Michael, Ihre und die Hilfe von @Artyom Trishkin waren sehr hilfreich!

Jetzt müssen wir herausfinden, wie wir den Kreuzungspunkt zwischen dem Preisdiagramm und dem gefundenen Objekt, in diesem Fall der Trendlinie, finden können.

Der Algorithmus sieht folgendermaßen aus:
1. Anhand der abgelesenen Koordinaten der Trendlinie berechnen wir den Koeffizienten des Trendanstiegs pro 1 Bar der ausgewählten TF.
2. Berechnet die Preiskoordinate der Trendlinie auf dem aktuellen Balken und überwacht die Tatsache der Überschreitung dieses Punktes durch das Diagramm während der ausgewählten TF.
3. Wenn dies der Fall ist, fahren wir mit der Bearbeitung dieses Ereignisses fort, z. B. mit der Eröffnung einer Bestellung. Wenn nicht, wird der Vorgang für den nächsten Takt wiederholt.

Aber vielleicht hat MT4(5), aufgrund der Besonderheiten dieses Systems, eine viel einfachere Lösung?

 
Alexey Viktorov:

Wissen Sie, warum so viele Menschen, auch Sie, auf diejenigen reagieren, die mql wie eine Axt kennen. Und sie ignorieren den Rat derer, die es wissen. In Ihrem Fall ist es dieser Rat:


Mein lieber Alexey, Sie haben absolut Recht, was meine Kenntnisse über MQL angeht. Sie irren sich jedoch, wenn Sie sagen, dass ich den Ratschlägen von Insidern keine Beachtung schenke, denn mein erster Kontakt war mit@Artyom Trishkin, der meiner Meinung nach einer der herausragenden MQL-Profis ist und den Sie gut kennen.

Dank seiner Ratschläge verstand ich sofort, wie ich mein Problem lösen konnte, und er öffnete mir die Augen für weitere Maßnahmen. Und@Mihail Matkovskij hat mein Leben noch einfacher gemacht!

 
vladmirad:

Michael, Ihre und die Hilfe von @Artyom Trishkin waren sehr hilfreich!

Jetzt müssen wir herausfinden, wie wir den Kreuzungspunkt zwischen dem Preisdiagramm und dem gefundenen Objekt, in diesem Fall der Trendlinie, finden können.

Der Algorithmus sieht folgendermaßen aus:
1. Anhand der abgelesenen Koordinaten der Trendlinie berechnen wir den Koeffizienten des Trendanstiegs pro 1 Bar der ausgewählten TF.
2. Berechnet die Preiskoordinate der Trendlinie auf dem aktuellen Balken und überwacht die Tatsache der Überschreitung dieses Punktes durch das Diagramm während der ausgewählten TF.
3. Wenn dies der Fall ist, fahren wir mit der Bearbeitung dieses Ereignisses fort, z. B. mit der Eröffnung einer Bestellung. Wenn nicht, wird der Vorgang für den nächsten Takt wiederholt.

Aber vielleicht hat MT4(5), aufgrund der Besonderheiten dieses Systems, eine viel einfachere Lösung?

Wie ich oben schon sagte, skizzieren Sie einen Quellcode, damit Sie etwas haben, mit dem Sie beginnen können. Außerdem wissen Sie bereits, wie Sie die Daten des Objekts in das Diagramm übertragen können. Niemand will alles von Grund auf für Sie tun. Und auf diese Weise kann das, was für die Arbeit des Experten fehlt, ergänzt werden...

 
vladmirad:

Michael, Ihre und@Artyom Trishkins Hilfe war sehr hilfreich!

Nun müssen wir herausfinden, wie wir den Kreuzungspunkt zwischen dem Preisdiagramm und dem gefundenen Objekt, in diesem Fall der Trendlinie, finden können.

Der Algorithmus sieht folgendermaßen aus:
1. Anhand der abgelesenen Koordinaten der Trendlinie berechnen wir den Koeffizienten des Trendanstiegs pro 1 Bar der ausgewählten TF.
2. Berechnet die Preiskoordinate der Trendlinie auf dem aktuellen Balken und überwacht die Tatsache der Überschreitung dieses Punktes durch das Diagramm während der ausgewählten TF.
3. Wenn dies der Fall ist, fahren wir mit der Bearbeitung dieses Ereignisses fort, z. B. mit der Eröffnung einer Bestellung. Wenn nicht, wird der Vorgang für den nächsten Takt wiederholt.

Vielleicht ist die Lösung in MT4(5) aufgrund der besonderen Merkmale dieses Systems viel einfacher?

Es ist nicht ganz klar, was Sie finden wollen. Sie möchten den Punkt finden, an dem die Trendlinie durch den Preis auf einem bestimmten Balken gekreuzt wird? Dafür gibt es Funktionen, die den Wert der Linie auf einem Balken ermitteln. Aber ich würde die Geradengleichung verwenden:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

FAQ von Anfängern MQL5 MT5 MetaTrader 5

Artyom Trishkin, 2020.05.02 12:27

Verwenden Sie eine Geradengleichung:

//+------------------------------------------------------------------+
//| Уравнение прямой                                                 |
//+------------------------------------------------------------------+
double EquationDirect(const int left_bar,const double left_price,const int right_bar,const double right_price,const int bar_to_search) 
  {
   return(right_bar==left_bar ? left_price : (right_price-left_price)/(right_bar-left_bar)*(bar_to_search-left_bar)+left_price);
  }
//+------------------------------------------------------------------+

Geben Sie die Bar-Nummer und den Preis des Punktes auf der linken Seite an, geben Sie die Bar-Nummer und den Preis des Punktes auf der rechten Seite an (eine virtuelle Linie wird auf diese Punkte gezeichnet) und geben Sie den gesuchten Bar an.
Die Funktion gibt den Preis der gesuchten Bar zurück.


Erfordert nicht das Vorhandensein eines realen Objekts.
 
Artyom Trishkin:

..... Es gibt Funktionen, mit denen der Zeilenwert auf dem Balken ermittelt werden kann. Aber ich würde die Geradengleichung verwenden:

.....

Artyom, hier bitte mehr Details.

Entweder war ich vorher nicht sehr aufmerksam, oder die Dokumentation wurde überarbeitet... Ich weiß es nicht.

Aber ich dachte immer, dass ObjectGetDouble den Linienpreis auf einem bestimmten Balken zurückgibt (ich meine den genauen Preis). Und hier beschloss ich, ein kleines Skript zu erstellen, um es zu überprüfen, und was sah ich?

1. Es gibt keine Taktnummer in den Parametern, an der der Wert abgelesen werden soll.

2. Kennung der Eigenschaft:

OBJPROP_PRICE

Preis koordinieren

modifier=Nummer des Ankerpunkts


es ist nur der Ankerpunkt!

Ja, im Grunde genommen, wenn ich diese Linie im Code zeichne, habe ich diese Punkte bereits! Warum muss ich sie kennen? Worin liegt eigentlich der Sinn der Sache?

Wie kann ich den Preiswert dieser Linie anderswo erhalten?


Es stellt sich heraus, dass dies

ist.

prop_modifier

[in] Modifikator der angegebenen Eigenschaft. Bei der ersten Option ist der Standardwert für den Modifikator 0. Für die meisten Eigenschaften ist kein Modifikator erforderlich. Bezeichnet eine Ebenennummer in denFibonacci-Werkzeugen und im grafischen Objekt Andrews' Pitchfork. Die Nummerierung der Ebenen beginnt bei Null.

Ergibt das überhaupt keinen Sinn? Wird nach Befestigungspunkten für IRGENDEINE Ventilatorleitung gesucht? Das ist Blödsinn. Verzeihung.

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Свойства объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Свойства объектов
  • www.mql5.com
Все объекты, используемые в техническом анализе, имеют привязку на графиках по координатам цены и времени – трендовая линия, каналы, инструменты Фибоначчи и т.д.  Но есть ряд вспомогательных объектов, предназначенных для улучшения интерфейса, которые имеют привязку к видимой всегда части графика (основное окно графика или подокна индикаторов...
 
Сергей Таболин:

Artyom, könnten Sie hier bitte etwas mehr ins Detail gehen?

Entweder war ich vorher nicht sehr aufmerksam, oder die Dokumentation wurde überarbeitet... Ich weiß es nicht.

Aber ich dachte immer, dass ObjectGetDouble den Linienpreis für einen bestimmten Balken (ich meine den Preis) zurückgibt. Und hier beschloss ich, ein kleines Skript zu erstellen, um es zu überprüfen, und was sah ich?

1. Es gibt keine Taktnummer in den Parametern, an der der Wert abgelesen werden soll.

2. Kennung der Eigenschaft:

OBJPROP_PRICE

Preis koordinieren

modifier=Nummer des Ankerpunkts


es ist nur der Ankerpunkt!

Ja, im Grunde genommen, wenn ich diese Linie im Code zeichne, habe ich diese Punkte bereits! Warum muss ich sie kennen? Worin liegt eigentlich der Sinn der Sache?

Wie kann ich den Preiswert dieser Linie anderswo erhalten?


Es stellt sich heraus, dass dies

ist.

prop_modifier

[in] Modifikator der angegebenen Eigenschaft. Bei der ersten Option ist der Standardwert für den Modifikator 0. Für die meisten Eigenschaften ist kein Modifikator erforderlich. Bezeichnet eine Ebenennummer in denFibonacci-Werkzeugen und im grafischen Objekt Andrews' Pitchfork. Die Nummerierung der Ebenen beginnt bei Null.

Ergibt das überhaupt keinen Sinn? Wird nach Befestigungspunkten für JEDE Ventilatorleitung gesucht? Das ist Blödsinn. Entschuldigen Sie bitte.

Ich habe nicht viel mit solchen Objekten gearbeitet. Was liefert diese Funktion für den Trend nach der angegebenen Balkenzeit? Ich habe keine Zeit, das zu überprüfen. Auch wenn es in einer kleinen Schrift geschieht...

ObjectGetValueByTime()

Документация по MQL5: Графические объекты / ObjectGetValueByTime
Документация по MQL5: Графические объекты / ObjectGetValueByTime
  • www.mql5.com
Функция использует синхронный вызов – это означает, что функция дожидается выполнения всех команд, которые были помещены в очередь графика перед её вызовом, и поэтому данная функция может быть затратной по времени. Нужно иметь это обстоятельство в виду...