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

 

Forum für Handel, automatisierte Handelssysteme und Strategietests

Alle Fragen von Neulingen zu MQL4 und MQL5, Tipps und Diskussionen zu Algorithmen und Codes

Dmitry Custurov, 2020.08.27 13:10

Grüße.

Ich habe die folgende Sache in MT4:

#import "user32.dll"
   int SendMessageA(int hWnd, int Msg, int wParam, char &lParam[]);
   int RegisterWindowMessageA(uchar &lParam[]);
#import

string IndiName="TestBot";

void OnStart()
  {
   char buf[];
   StringToCharArray("MetaTrader4_Internal_Message", buf);
   int MT4InternalMsg=RegisterWindowMessageA(buf);
   StringToCharArray(IndiName, buf);
   long handle=ChartGetInteger(0, CHART_WINDOW_HANDLE);
   Print(MT4InternalMsg);
   bool res=SendMessageA((int)handle, MT4InternalMsg, 14, buf);
   Print("Функция SendMessageA завершила работу с результатом: ",res);
  }

Dieser Code sendet einen Befehl an das Terminalfenster, um einen bestimmten EA zu starten.

Gibt es eine ähnliche Funktionalität für MT5?

Ich habe es auf diese Weise versucht:

#import "user32.dll"
   int SendMessageA(long hWnd, long Msg, uint wParam, uchar &lParam[]);
   int RegisterWindowMessageA(uchar &lParam[]);
#import

string IndiName="TestBot";

void OnStart()
  {
   uchar buf[];
   StringToCharArray("MetaTrader5_Internal_Message", buf);
   long MT5InternalMsg=RegisterWindowMessageA(buf);
   StringToCharArray(IndiName, buf);
   long handle=ChartGetInteger(0, CHART_WINDOW_HANDLE);
   Print("Window handle: ", handle);
   Print("Message: ",MT5InternalMsg);
   for(int i = 0; i<100; i++){
      bool res=SendMessageA(handle, MT5InternalMsg, i , buf);
      printf("Функция SendMessageA завершила работу с результатом: %d, номер: %d ",res, i);
   }
  }

Funktioniert nicht.

Ich habe versucht, nach Spy++ zu suchen, aber im Gegensatz zu MT4 gibt es im MT5 keine Meldungen.

Ich muss genau das Fenster mit den Einstellungen des Expert Advisors öffnen.


Ich muss in der Lage sein, das Skript über WinAPI auszuführen. Gibt es eine Lösung für 5?

 
Hey! Leute, helft mir mal! Ich kann mich nicht an eine Funktion erinnern. Der Expert Advisor eröffnet eine Position pro Tag (zwischen 00:00 und 23:59), d.h. ein Tag, ein Auftrag. Die Aufgabe besteht darin, die Serie der kontinuierlichen Verluste zu finden und sie im Protokoll anzuzeigen (mit dem Befehl Print(), um einmal zu drucken). Die Anzahl der Elemente in der Reihe wird über die Tastatur eingegeben (wenn Sie z. B. 5 über die Tastatur eingeben und die Reihe 4 Tage verliert, ignorieren wir sie --> warten auf das Auftreten von 5 oder mehr Tagen). Eine Serie wird berücksichtigt, wenn die Verlusttage aufeinander folgen oder die Aufträge am selben Tag geschlossen werden (sie werden einmal pro Tag eröffnet, und Marktaufträge können mehr als einen Tag lang "hängen"). Im Protokoll sollte zum Beispiel folgende Information stehen: "Die Verliererserie an den folgenden Daten: 01.05, 02.05, 03.05, 04.05, 05.05". Wichtige Bedingung: Reihe erkennen (und folglich ins Protokoll ausgeben), die größer oder gleich dem über die Tastatur eingegebenen Wert ist (extern).
//
Persönlich habe ich folgende Idee:
1. Fiya füllt das Array der Verlustaufträge mit ihren Schlusswerten ( Mass[i] = OrderCloseTime();). Das heißt, das Array speichert nur die Schlussdaten und -zeiten der Verlustaufträge
2. Wir beginnen mit dem Vergleich des Elements an der Position i und an der Position i-1 (2 benachbarte Elemente)
2.1 wir vergleichen sie, indem wir die Zellendaten in den Tag des Jahres umwandeln ( TimeDayOfYear(Mass[i]) und TimeDayOfYear(Mass[i-1])
2.(Angenommen, der erste Verlierertag ist 178 und der vorhergehende 176 --> keine Serie, weil sie nicht aufeinander folgen, bzw. wenn der erste 178 und der zweite 177 ist --> haben wir eine Serie)
2.3 Mit der for-Schleife gehen wir alle Zellen des Arrays durch und vergleichen ihre Nachbarn. Wenn es eine Serie von Verlusten an benachbartenElementen des Arraysgibt--> beginnen wir mit der Komprimierung, bis wir die erforderlicheMindestanzahl von Verlusttagennicht erreicht haben, um sie als Serie zu betrachten. 2. (wenn Punkt 1 erfüllt ist), BEVOR die Serie stoppt.
2.4 DIE SERIE STOPP --> Merken Sie sich den Index des Array-Elements, an dem sie endete, und merken Sie sich die Anzahl der Elemente in der Serie (die Serie kann == ODER größer sein als der über die Tastatur eingegebene Wert)
3. ----hier beginnt das Problem der Umsetzung---
3.1 Wir sollten irgendwie durch die Reihe der verlorenen Tage "zurückgehen", das Datum jedes Elements kennen, das Datum von datetime --> string übersetzen,
3.11 string füllen (ich weiß nicht, vielleicht durch StringAdd()?), und es in die LOG-Datei ausgeben (nicht millionenfach, nur einmal)

Der Algorithmus des Expert Advisors ist nicht wichtig, wichtig ist die Funktion des Benutzers selbst

Um Himmels willen, Hilfe!))
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов массива...
Dateien:
 

Hallo.
Ich benötige einen Rat zu einem Algorithmus.
Ich versuche, vor der Verarbeitung eines Blocks offener Aufträge die folgende Anforderung zu erfüllen:

Wenn es bereits Kauf-/Verkaufsaufträge gibt und der Eröffnungskurs des letzten Auftrags um X Punkte niedriger ist als der aktuelle Kurs, dann werden blockierte/nicht offene Aufträge ignoriert.

Welches sind die Optionen für die Implementierung in den Code?

 

Hat jemand für mt 5 von dem Moment an eine Bestellung gesendet wird, um eine Position zu öffnen, bis es tatsächlich erscheint, wie lange kann es dauern, gemessen?

Ich bin mehr daran interessiert, wenn eine Bestellung gesendet wird und ein Handel empfohlen wird, von dem Moment der Bestellung gesendet wird, bis der Handel erscheint, wie lange kann es dauern?

 
Сергей Таболин:

k = {1,2,4,8,16,......}

cn = k[c]

Lustige Lösung))))

 
Vladimir Baskakov:
Plant MQ, der mobilen Plattform benutzerdefinierte Indikatoren hinzuzufügen?

Nach den Reaktionen auf das neue mobile Terminal zu urteilen, nicht in naher Zukunft. Nur Stifte.

 
Valeriy Yastremskiy:

Ausgefallene Lösung))))

Nun, wenn die Koeffizienten im Voraus bekannt sind, warum sollte man sie dann berechnen? )))

 
Сергей Таболин:

Nun, wenn die Koeffizienten im Voraus bekannt sind, warum sollte man sie dann berechnen? )))

Es ist universeller, wenn Sie sie berechnen.

 

Liebe Kolleginnen und Kollegen, guten Tag an alle - intuitiv verstehe ich die Lösung, ich würde gerne von Ihnen hören.

Wie lassen sich Teile des Loses für den späteren Abschluss am besten zuordnen (Teilabschluss des gesamten Loses - in Teilen - 5 Teileinheiten)?

Meines Erachtens zum Beispiel das Los 2.58. Ich teile durch 5, das Ergebnis ist 0,51 Lot, um 4 Teile zu schließen und der fünfte Teil ist 0,54 Lot.

Wie lässt sich dies am besten im Code darstellen? Welche mathematische Funktion nimmt den Rest der Division um 0,54 zu schließen?

 
Roman Shiredchenko:

Liebe Kolleginnen und Kollegen, guten Tag an alle - intuitiv verstehe ich die Lösung, ich würde gerne von Ihnen hören.

Wie lassen sich Teile des Loses für den späteren Abschluss am besten zuordnen (teilweiser Abschluss des gesamten Loses - in Teilen - 5 Einheiten von Teilen).

Meines Erachtens zum Beispiel das Los 2.58. Ich teile durch 5, das Ergebnis ist 0,51 Lot, um 4 Teile zu schließen und der fünfte Teil ist 0,54 Lot.

Wie lässt sich dies am besten im Code darstellen? Welche Funktion nimmt den Rest der Division um 0,54 zu schließen?

Kann ich die Dokumentation lesen?


Grund der Beschwerde: