Fehler, Irrtümer, Fragen - Seite 734

 
Vitya:
Vielleicht brauchen wir PositionTotal()?

Und was hat das mit der Position zu tun, wenn ich OrdersTotal() frage, wie viele Aufträge derzeit erteilt werden?

Und ich fordere diese Informationen in OnTrade() an, der Moment, in dem der Auftrag existiert, darf nicht verpasst werden.

Tatsächlich stellt sich aber heraus, dass dieser Zeitpunkt ohnehin verpasst wird und die Anträge entweder bearbeitet werden, wenn der Auftrag noch nicht vorliegt oder wenn er bereits vorliegt.

Aber der Moment, in dem er existiert, wird in OnTrade() nicht erkannt, oder aber, die OrdersTotal() liegt.

 

Um sich nicht über die Unvollkommenheit des Codes zu beschweren, hier der MetaQuotes-Code mit meiner Verbesserung des Skripts im Expert Advisor.

Die Funktion OnTrade() wurde hinzugefügt und der Skriptcode in OnInit() eingefügt.

Kein einziger Ausdruck zeigt eine Meldung an, dass ein Auftrag vorliegt.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 

Ich kann dies nur mit einem Artikel Handelsereignisse in MetaTrader 5 beantworten:

Заключение

Da alle Vorgänge in der MetaTrader 5 Handels- und Analyseplattform asynchron ablaufen und alle Änderungen auf dem Handelskonto unabhängig voneinander gemeldet werden, sollten Sie nicht versuchen, ein einzelnes Ereignis nach der Regel "Eine Anfrage - ein Handelsereignis" zu verfolgen. Wenn wir genau feststellen wollen, was sich nach dem Trade-Ereignis geändert hat, müssen wir bei jedem Aufruf des Handlers OnTrade alle Geschäfte, Positionen und Orders analysieren und sie mit dem Zustand vor dem Auftreten des Ereignisses vergleichen.
Das bedeutet, dass der Auftrag, den Sie zu erfassen versuchen, wahrscheinlich bereits mit HistoryOrdersTotal durchsucht werden muss
 
Rosh:

Ich kann dies nur mit dem Artikel Trading Events in MetaTrader 5 beantworten:

Das bedeutet, dass der Auftrag, den Sie zu erfassen versuchen, wahrscheinlich bereits mit HistoryOrdersTotal durchsucht werden sollte

Ich lasse mich von diesem Artikel leiten. Ich möchte eine Antwort auf die Frage finden: Wie ist es möglich, dass ein Handelsereignis den Zeitpunkt verpasst, zu dem ein Auftrag erteilt, aber noch nicht ausgeführt wurde?

Handelsereignisse werden vom Server in den folgenden Fällen erzeugt

  • Änderungen bei aktiven Aufträgen,
  • Änderungen der Positionen,
  • Veränderungen in den Berufen,
  • Änderungen in der Handelsgeschichte.

Ich vermute, dass OrderTotal() fehlschlägt. Aber ich kann es mit dieser Funktionalität nicht beweisen.

Obwohl als eine Option, die ich nicht ablehnen, dass OrderTotal() nimmt Daten nicht, wo ich denke, es ist (d.h. nicht auf dem Server).

 
Urain:

Ich verfolge diesen Artikel. Ich möchte eine Antwort auf die Frage finden: Wie kommt es, dass ein Handelsereignis den Zeitpunkt verpasst, zu dem ein Auftrag erteilt, aber noch nicht ausgeführt wurde?

Wenn ein Handelsereignis eintritt, ist der Auftrag bereits erteilt und ausgeführt worden. Deshalb steht sie nicht in der Geschichte und ist bereits in Kraft.
 
Rosh:
Wenn das Handelsereignis eintrifft, ist der Auftrag bereits erteilt und ausgeführt worden. Daher wurde dieser Auftrag noch nicht zu den aktiven Aufträgen gezählt und erscheint bereits in der Historie.

Ja, ja, meine Gedanken kreisen um diese Antwort.

Ich würde wie folgt antworten: Zum Zeitpunkt der Auftragserteilung erzeugt der Server ein "Trades"-Ereignis und sendet es an das Terminal. Wenn das Terminal es empfängt, wird im Code eine Anfrage nach der Anzahl der Aufträge gestellt, aber zu dem Zeitpunkt, an dem diese Anfrage beim Server eingeht, hat der Server den Auftrag bereits ausgeführt.

Eine andere Erklärung habe ich nicht.

 
Urain:

Handelsereignisse werden in den folgenden Fällen vom Server erzeugt:

  • Veränderung der aktiven Aufträge,
  • Änderungen der Positionen,
  • Veränderungen in den Berufen,
  • Änderungen in der Handelsgeschichte.

Ich vermute, dass OrderTotal() fehlschlägt. Aber ich kann es mit dieser Funktionalität nicht beweisen.

Verstehe ich das richtig, dass die Liste der aktiven Aufträge sowohl aktive schwebende Aufträge als auch Aufträge zur Eröffnung einer Position enthält?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
papaklass:

Was bedeutet das?

Etwas wie "Kein Teil des verwendeten Speichers wurde nach dem Beenden des Programms freigegeben". Insbesondere tritt eine ähnliche Meldung auf, wenn ein Programm ein dynamisches Objekt mit dem new-Operator erstellt, es aber anschließend nichtmit dem delete-Operator löscht.
 
papaklass:
... in der Registerkarte "Experten" erscheint diese Meldung. Es handelt sich nicht um einen Fehler, sondern um eine Warnung. Eine Warnung vor was?

Nun, ich habe nicht "Fehler" gesagt. Es soll eine "Warnung" sein. Ich habe meine Version bereits anhand eines Beispiels erläutert. Schauen Sie sich noch einmal die Diskussion von hier an (über Leitungslecks - lesen Sie bis zum Ende der Seite): https://www.mql5.com/ru/forum/1111/page345#comment_54616

Möglicherweise müssen Sie sich mit Einzelheiten zu Ihrer Situation an den Verwaltungsrat wenden.

 

Ich habe eine "Verwechslung" gefunden.

Warum mag der Compiler die zweite b-Variablendefinition nicht?

Und ganz allgemein: Wie gehe ich mit dieser Situation um?

#property script_show_inputs

// m[a].Column[b]
input int A=11;
input int B=3;

#define a A
//#define b B // тут раскоментировать
#define b 3   // тут закоментировать

// размер одного элемента 4 байта
struct ArrWe
{
  float Column [b];
};

void OnStart()
{
  ArrWe m[11]; // тут вместо "11" хочу использовать "a"
  Print("Размер структуры ArrWe ",sizeof(ArrWe));
  Print("Количество элементов 1-го измерения ",sizeof(m)/sizeof(ArrWe));
  Print("Количество элементов 2-го измерения ",sizeof(ArrWe)/4);   
  Print("Размер массива из 11 ArrWe ",sizeof(m));
}