Bibliotheken: MT4Orders - Seite 22

 
fxsaber:

Es sollte keine Auswirkungen auf die Echtzeit haben.

Leider ist das bei mir der Fall.

Es gibt eine Schaltfläche, mit der man die Historie der Angebote anzeigen/ausblenden kann. Natürlich macht es keinen Sinn, alle anzuzeigen, aber oft muss man mehrere Dutzend "eigene" Angebote nach Symbolen, Magiern oder Kommentaren aus mehreren Tausend anderen auswählen. Das ist der Zeitpunkt, an dem die Bremsen beginnen. Die Idee ist, die Liste der "Eigenen" zwischenzuspeichern und sie nur bei neuen historischen Geschäften zu aktualisieren.

Ich habe auch schon einen fehlerhaften Broker gesehen, der Marktaufträge umgeschrieben hat, und ein funktionierender Expert Advisor konnte in einer Stunde hunderttausend umgeschriebene Aufträge in die Historie generieren. Dann wurde das Terminal selbst aufgehängt....

 
fxsaber:

Ich brauche ein Beispiel für einen TS, bei dem die Handelshistorie (nicht die Preishistorie) die Backtest-Zeit signifikant beeinflusst.

Als Fantasie: Erstellen einer Gleichgewichtskurve auf der Grundlage historischer Abschlüsse und Berechnung der Menge neuer Abschlüsse in Abhängigkeit von der Steigung der Kurve.

Wenn Sie Ihren Cache nicht aufbewahren, müssen Sie die Historie vor jedem Geschäft komplett durchkämmen. Aber hier ist es natürlich einfacher, die Saldenwerte in einem Array zu sammeln, man braucht nicht alle Geschäfte zu speichern.

 
Andrey Khatimlianskii:

Ich habe leider eine Wirkung.

Es gibt eine Schaltfläche, auf die man drücken kann, um den Verlauf der Geschäfte anzuzeigen/auszublenden. Natürlich macht es keinen Sinn, alle anzuzeigen, aber oft muss man mehrere Dutzend "eigene" nach Symbolen, Magiern oder Kommentaren aus mehreren tausend anderen auswählen. Das ist der Zeitpunkt, an dem die Bremsen beginnen. Die Idee ist, die Liste der "eigenen" in den Zwischenspeicher zu legen und sie nur bei neuen historischen Geschäften zu aktualisieren.

Ich verstehe das Problem. Ja, ein vollwertiges, in das biblische System integriertes Caching ist überfällig. Ich werde darüber nachdenken müssen, wie ich es implementieren kann.

Ich habe auch schon einen fehlerhaften Broker gesehen, der Marktaufträge wieder zurückgenommen hat, und ein funktionierender Expert Advisor konnte in einer Stunde hunderttausend zurückgenommene Aufträge in der Historie erzeugen. Dann wurde das Terminal selbst aufgehängt....

Ich würde gerne diesen wunderbaren Broker sehen.

 
Andrey Khatimlianskii:

Als Phantasie: Konstruktion der Gleichgewichtskurve durch historische Geschäfte und Berechnung des Loses der neuen Geschäfte in Abhängigkeit von der Steigung der Kurve.

Wenn Sie keinen eigenen Zwischenspeicher haben, müssen Sie die Historie vor jedem Geschäft komplett durchkämmen. Aber hier ist es natürlich einfacher, die Saldenwerte in einem Array zu sammeln, man braucht nicht alle Geschäfte zu speichern.

Ich habe über so etwas nachgedacht, aber das ist der Punkt, an dem der Saldo-VR sofort vorgeschlagen wird. Paradoxerweise scheint es, dass die Zwischenspeicherung des Handelsverlaufs nur für den Kampfeinsatz erforderlich ist (nicht für den Tester).

 
fxsaber:

Ich verstehe das Problem. Ja, eine vollwertige, in die Biblah integrierte Zwischenspeicherung ist immer noch notwendig. Wir werden uns überlegen müssen, wie wir das implementieren.

Im Idealfall reicht es aus, ein DEAL_ENTRY_IN-Ticket für jeden Trade zu speichern, da GetPositionDealIn (und HistorySelectByPosition darin) zu 99% der Zeit ausgeführt wird.


fxsaber:

Würde gerne diesen tollen Broker sehen.

PrimeXM-LiveUK.

Dies ist eine Krücke Brücke zu saxo Bank.

 
Andrey Khatimlianskii:

Im Idealfall reicht es aus, das DEAL_ENTRY_IN-Ticket für jeden Trade zu speichern, da in 99% der Fälle GetPositionDealIn (und darin HistorySelectByPosition) ausgeführt wird.

Der Hash-Abgleich mit der Trading-Historie wurde schon vor langer Zeit durchgeführt. Daher ist es wahrscheinlich optimal, sich mit der generischen Seite zu beschäftigen.

Als Motivation, diese Methode zu erlernen, reicht es aber allemal! Irgendwann im Sommer in einer ruhigen Umgebung....

Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
  • 2017.12.08
  • www.mql5.com
С 6 декабря 2017 года в стандартную поставку MetaTrader 5 стали входить так называемые Generic-классы, реализующие эффективные алгоритмы для хранен...
 

Update von fxsaber:

// 30.05.2018
// Hinzufügen: Beschleunigte Arbeit mit der Handelshistorie, Auswahl einer goldenen Mitte der Realisierungen zwischen Leistung und
// Speicherverbrauch - wichtig für VPS. Es wird die generische Standardbibliothek verwendet.
// Wenn Sie die generische Bibliothek nicht verwenden möchten, steht Ihnen die alte Methode der Arbeit mit der Historie zur Verfügung.
// Dazu müssen Sie die folgende Zeile in die MT4Orders-Bibliothek VOR die MT4Orders-Bibliothek schreiben
//
// #define MT4ORDERS_FASTHISTORY_OFF // Schalten Sie die Implementierung der schnellen Handelshistorie aus - verwenden Sie die generische Bibliothek nicht.

Das Arbeiten mit langer Historie klappt jetzt wie am Schnürchen!

Moderatoren, wenn Sie die Möglichkeit haben, laden Sie bitte den Code in die Datenbank hoch.

Dateien:
MT4orders.mqh  77 kb
 
Andrey Khatimlianskii:

Update von fxsaber:

Das Arbeiten mit der langen Historie klappt jetzt wie am Schnürchen!

Moderatoren, wenn Sie können, laden Sie bitte den Code in die Datenbank hoch.

Danke, aktualisiert in allen Sprachen

 

Ich verwende diese Bibliothek in meinen MT4 Expert Advisors.


Ich habe einen seltsamen Moment gefunden:

Wenn der Test auf den Metaquotes-Servern - Demo - durchgeführt wird, funktioniert die Bibliothek einwandfrei. (zum Beispiel, wenn eine Bestellung öffnen)

Wenn Sie für Tests Broker fhtm Demo- dann die Funktion OrderSend öffnet ein Geschäft, sondern gibt einen Fehler.

      int ticket=OrderSend(_Symbol,type,lot,price,0,0,0,comment_,magic,0,clrDarkSlateBlue);

Nach der Fehlersuche ist Ticket = -1;

Der Text des Protokolls steht unten:

Gleichzeitig zeigt das Protokoll auch eine Meldung an, dass alles normal ist.

Warum kann es ein solches Problem geben?

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) ::AccountInfoString(ACCOUNT_SERVER) = ForexTimeFXTM-Demo01

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) (bool)::TerminalInfoInteger(TERMINAL_CONNECTED) = true

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) ::TerminalInfoInteger(TERMINAL_PING_LAST) = 55335

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) ::TerminalInfoDouble(TERMINAL_RETRANSMISSION) = 0.8875739644970414

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) ::TerminalInfoInteger(TERMINAL_BUILD) = 1835

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) (bool)::TerminalInfoInteger(TERMINAL_X64) = true

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Res = false

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) MT4ORDERS::OrderSendBug = true

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.action = TRADE_ACTION_DEAL (1)

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.magic = 0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.order = 0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.symbol = EURUSD

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.volume = 0.01

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.price = 1.17681

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.stoplimit = 0.0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.sl = 0.0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.tp = 0.0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.deviation = 0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.type = ORDER_TYPE_BUY (0)

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.type_filling = ORDER_FILLING_FOK (0)

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.type_time = ORDER_TIME_GTC (0)

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.expiration = 1970.01.01 00:00:00

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.comment =

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.position = 2210821620

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.position_by = 0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.retcode = 10009

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Ergebnis.deal = 0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.order = 2210821775

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Ergebnis.Volumen = 0.01

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Ergebnis.Preis = 0.0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Ergebnis.Geld = 0.0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Ergebnis.ask = 0.0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.comment = Request ausgeführt 190.826 + 1000.396 ms

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.request_id = 154

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Ergebnis.retcode_external = 0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) MT4ORDERS: not Sync with History! please send logs to fxsaber!

2018.06.08 22:55:47.197 EA MT5 (EURUSD,M1) OrderSend mit Fehler 4754



[Gelöscht]  
Rashid Umarov:

Danke, in allen Sprachen aktualisiert

Es wäre schön, wenn auch fxsaber wieder dabei wäre.