Bibliotheken: MT4Orders - Seite 64

 
fxsaber:

Ich hatte schon Aufträge, die das achthundert erreichten. Im aktiven Handel kommt das bei neuen Aufträgen häufig vor. In einem solchen Fall sollten Sie mehrere hundert Aufträge hashmappen.

Aber das passiert doch nicht alle 15 Minuten, oder?
 
mktr8591:
Aber das passiert doch nicht alle 15 Minuten, oder?

Ja.

 

Für diejenigen, die dieses Bündel verwenden.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Bibliotheken: MT4Orders

fxsaber, 2021.05.12 21:58

#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // Maximale Wartezeit (in µs) für die Synchronisierung der Handelsumgebung
#include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006

Ich empfehle, den Synchronisator zu aktualisieren.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien.

Bibliotheken: TradesID

fxsaber, 2021.06.30 15:53

ByPass.mqh ist aktualisiert worden. Es arbeitet korrekt in der Situation des Löschens einer teilweise ausgeführten Order. Logging bei Problemen wurde hinzugefügt.

Bis das Problem behoben ist, empfehle ich, an b2958 zu arbeiten.

 
fxsaber:

Bitte klären Sie einige Punkte im MT4Orders.mqh Code (ab 2021.06.01):

1. Zeile 1413 HistoryDealSelect2():
else if (::HistoryDealGetInteger(DealTicket, DEAL_TIME_MSC) < OrderTimeFill)
            break;

Hier wird der History-Zyklus unterbrochen, wenn der Zeitpunkt des Trades kleiner ist als der Zeitpunkt der Order.

Kommt es in der Praxis nicht vor, dass der Zeitpunkt eines Geschäfts in mqh kleiner ist als der Zeitpunkt der Order, die das Geschäft ausgeführt hat (ich meine nicht Situationen, in denen die Order von mehreren Geschäften gleichzeitig ausgeführt wurde) ?

2. Zeile 2259 MT4OrderSend():

return((arrow_color == INT_MAX) ? (MT4ORDERS::NewOrderCheck() ? 0 : -1) :
           ((((int)arrow_color != INT_MIN) || MT4ORDERS::NewOrderCheck()) &&
            MT4ORDERS::OrderSend(MT4ORDERS::LastTradeRequest, MT4ORDERS::LastTradeResult)
          #ifdef  MT4ORDERS_BYPASS_MAXTIME
            && (!MT4ORDERS::IsHedging || _B2(MT4ORDERS::ByPass += MT4ORDERS::LastTradeResult.order))
          #endif // #ifdef MT4ORDERS_BYPASS_MAXTIME
                                                                                          ?
            (MT4ORDERS::IsHedging ? (long)MT4ORDERS::LastTradeResult.order : // PositionID == Ergebnis.Auftrag - MT5-Hedge-Funktion
             ((MT4ORDERS::LastTradeRequest.action == TRADE_ACTION_DEAL) ?
              (MT4ORDERS::IsTester ? (_B2(::PositionSelect(MT4ORDERS::LastTradeRequest.symbol)) ? PositionGetInteger(POSITION_TICKET) : 0) :
                                      // HistoryDealSelect in MT4ORDERS::OrderSend
                                      ::HistoryDealGetInteger(MT4ORDERS::LastTradeResult.deal, DEAL_POSITION_ID)) :
              (long)MT4ORDERS::LastTradeResult.order)) : -1));

Warum wird die Order beim Netting nicht zu MT4ORDERS::ByPass+= hinzugefügt?

3: In einigen Funktionen verwenden Sie das WHILE(A) Makro: Zeile 1088

#define  WHILE(A) while ((!(Res = (A))) && MT4ORDERS::Waiting())

Warum prüfen Sie nicht auf IsStopped(), um die Zeit zu optimieren? Was ist, wenn der Benutzer OrderSend_MaxPause auf mehrere Sekunden setzt?

4 Ich habe bemerkt, dass Sie vor OrderSend(LastTradeRequest, LastTradeResult) das LastTradeResult nicht löschen. Wird dies von der Funktion selbst durchgeführt? Ist das eine undokumentierte Funktion?

 
mktr8591:

Bitte klären Sie einige Punkte im MT4Orders.mqh Code (ab 2021.06.01):

1. Zeile 1413 HistoryDealSelect2():

Hier wird der History-Zyklus unterbrochen, wenn der Zeitpunkt des Trades kleiner ist als der Zeitpunkt der Order.

Kommt es in der Praxis nicht vor, dass der Zeitpunkt eines Geschäfts in mqh kleiner ist als der Zeitpunkt der Order, die das Geschäft ausgeführt hat (ich meine nicht Situationen, in denen die Order von mehreren Geschäften gleichzeitig ausgeführt wurde) ?

Das ist sehr aus dem Zusammenhang gerissen. Schauen Sie, wo HistoryDealSelect2 aufgerufen wird. Result.deal befindet sich dort, wenn es bei vollständig ausgeführter Result.order null ist. Es gibt ein Zeitlimit für die Speicherung. schleife durchlaufen. Wahrscheinlich an einer großen History-Ausgabe getestet. Ich erinnere mich nicht mehr. Ich selbst benutze den eingebauten Synchronisierer in OrderSend nicht, weil ich die Null MT4ORDERS::OrderSend_MaxPause nehme .

 
mktr8591:

2. Zeile 2259 MT4OrderSend():

Warum wird die Order nicht zu MT4ORDERS::ByPass+= hinzugefügt?

Ich habe nicht an ByPass für Netting gedacht. Ich schreibe es für mich selbst.
 
mktr8591:

3. in einigen Funktionen verwenden Sie das Makro WHILE(A) : Zeile 1088

Warum prüfen Sie nicht auf IsStopped(), um die Zeit zu optimieren? Was ist, wenn der Benutzer OrderSend_MaxPause auf mehrere Sekunden einstellt?

In der Praxis sehe ich hier kein Problem. Ich habe es definitiv nicht aus Vergesslichkeit hinzugefügt.

 
mktr8591:

Mir ist aufgefallen, dass Sie vor OrderSend(LastTradeRequest, LastTradeResult) das LastTradeResult nicht löschen. Wird dies von der Funktion selbst durchgeführt? Wie eine undokumentierte Funktion?

Es scheint, dass alle MqlTradeResult-Felder von OrderSend gefüllt werden, so dass ich mir die Reinigung spare.

 
fxsaber:


Ich danke Ihnen!

Die Bibliothek ist großartig.

 
fxsaber:
Ich habe ByPass nicht für Netze entwickelt. Ich schreibe es für mich selbst.
Ich habe mir den ByPass-Code aus der Sicht des Netzes angesehen - alles sollte gut funktionieren. (Natürlich sollten Sie es testen).