Fehler, Irrtümer, Fragen - Seite 662

 

Guten Tag!

Bitte überprüfen Sie die Korrektheit der Funktion, die feststellen soll, ob eine offene Position "eingefroren" ist.

Habe ich es insbesondere mit Ask/Bid nicht übertrieben?

bool IsPositionFrozen(const string Symbol) {
  if (!PositionSelect(Symbol)) return false;
  bool FreezTP = true, FreezSL = true;
  double FreezLevel = SymbolInfoInteger(Symbol, SYMBOL_TRADE_FREEZE_LEVEL) * SymbolInfoDouble(Symbol, SYMBOL_POINT);
  switch (PositionGetInteger(POSITION_TYPE)) {
    case POSITION_TYPE_BUY:
        if ((NormalizeDouble(PositionGetDouble(POSITION_TP), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (PositionGetDouble(POSITION_TP) - SymbolInfoDouble(Symbol, SYMBOL_BID) > FreezLevel))
          FreezTP = false;
        if ((NormalizeDouble(PositionGetDouble(POSITION_SL), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (SymbolInfoDouble(Symbol, SYMBOL_BID) - PositionGetDouble(POSITION_SL) > FreezLevel))
          FreezSL = false;
        break;
      case POSITION_TYPE_SELL:
        if ((NormalizeDouble(PositionGetDouble(POSITION_TP), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (SymbolInfoDouble(Symbol, SYMBOL_ASK) - PositionGetDouble(POSITION_TP) > FreezLevel))
          FreezTP = false;
        if ((NormalizeDouble(PositionGetDouble(POSITION_SL), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (PositionGetDouble(POSITION_SL) - SymbolInfoDouble(Symbol, SYMBOL_ASK) > FreezLevel))
          FreezSL = false;
      break;
    default: return false;
  }
  if (FreezTP || FreezSL) return true;
  else return false;
}
 
tol64:

Nein, dort auf dem Server (MQ-Demokonto) hat alles korrekt funktioniert. Das heißt, die Stopps wurden ausgelöst, als ich nicht verbunden war. Aber als ich die Verbindung herstellte, war der Markt bereits geschlossen. Im Market Watch-Fenster wurde die Zeit des letzten Ticks vor der Unterbrechung meiner Verbindung aufgezeichnet. Bei der Abfrage der Historie von Geschäften durch Angabe von TimeCurrent() als zweiten Wert erhielt ich nicht die gesamte Historie. Obwohl die Hilfe für TimeCurrent() das sagt:

Das heißt, ich verstehe, dass diese Funktion den Wert der letzten Ankunft der Notierung eines der Instrumente im Market Watch-Fenster vom Server zurückgeben sollte, auch wenn die Verbindung unterbrochen wurde und die Verbindung geschah, als der Markt bereits geschlossen war. In meinem Fall ist das nicht passiert, und ich habe nicht die ganze Geschichte mitbekommen. Ich weiß nicht, ob Market Watch die Zeit mit dem Server synchronisieren soll, wenn der Markt geschlossen ist oder nicht, es wird in der Hilfe nicht erwähnt.

In diesem Fall können Sie, wenn Sie eine vollständige Historie benötigen, einfach eine weitere Tagesnummer hinzufügen, und es wird garantiert, dass alle Angebote ausgewählt werden. :)

In der Testversion gibt es einen Fehler mit der Funktion HistoryDealsTotal(), der im Visualisierungsmodus auftritt. Die Zeit ist dort korrekt modelliert. In manchen Fällen hilft nur eine Krücke.


Ja, ich habe mir das Wesentliche gemerkt, dass es eine Unterbrechung der Kommunikation gab. Es scheint, als ob das Terminal nur bei Erhalt eines Ticks für ein Instrument mit der Überprüfung und dem Herunterladen der zusätzlichen Historie beginnt und am Wochenende kein Tick vorhanden ist. Sie können die Diagramme natürlich auch manuell aktualisieren, dann wird die letzte Serverzeit aktualisiert. Und wenn im automatischen Modus, dann sollten Sie die Unterbrechung der Verbindung zu beheben und, wenn es während des Wochenendes wiederhergestellt wird, dann starten Sie die Funktion der Überprüfung und das Herunterladen der Geschichte, CheckLoadHistory(). Verwenden Sie eine Zeitschaltuhr.

Im Allgemeinen geschehen manchmal "erstaunliche" Dinge mit dem Terminal. Hier war es gestern, der Laptop funktionierte über das Telefon als Modem. Der Multicurrency Expert Advisor arbeitete im Tracking-Modus (Autotrading deaktiviert). Ich war 15 Minuten mit dem Telefon weg, bin zurückgekommen und habe die Verbindung wiederhergestellt. Terminal hat die Verbindung mit dem Server wiederhergestellt. Es sah so aus, als ob ich die fehlenden Zitate leicht herunterladen könnte. Aber das Terminal begann mit dem Herunterladen des Verlaufs - was sollte man sonst tun? Alles ist eingefroren: Marktübersicht, Handelsreiter, Charts. Das Telefon unterstützt kein 3G, sondern funktioniert über EDGE, so dass sich das Verfahren verzögert hat. Als er 20 MB erreichte, beschloss ich zu prüfen, ob ich in einem solchen Zustand manuell etwas handeln könnte. Beim Versuch, die Position zu schließen, erhielt ich eine Ablehnung wegen mangelnder Verbindung, und damit war das Herunterladen beendet. Nach der Wiederherstellung der Verbindung ging alles gut. Hier ist ein Auszug aus dem Protokoll des Terminals:

OK 0 Netzwerk 09:45:09 '709704': autorisiert auf MetaQuotes-Demo über Access Point Singapore
IR 0 Network 09:45:09 '709704': vorherige erfolgreiche Autorisierung durchgeführt von 77.35.11.181 on 2012.03.04 06:10:12
KP 0 Network 09:45:12 '709704': Terminal synchronisiert mit MetaQuotes Software Corp.
GI 0 Experten 09:45:12 expert Fractals_ (EURUSD,H1) loaded successfully
OI 0 Trades 10:43:29 '709704' : deal #8671794 sell 0.10 GBPJPY bei 129.268 erledigt (basierend auf Bestellung #9494984) // dieser Handel wurde von einem Expert Advisor ausgeführt, der auf einem anderen Computer arbeitet
RM 0 Trades 10:51:22 '709704' : Geschäft #8671842 verkaufen 0.10 USDJPY auf 81.586 erledigt (basierend auf Bestellung #9495037)// Ähnlich
KL 1 Netzwerk 12:00:38 '709704': Verbindung zu MetaQuotes-Demo verloren// Gone
IE 0 Netzwerk 12:16:15 '709704': Autorisiert auf MetaQuotes-Demo über Access Point Hong Kong// Came
IS 0 Netzwerk 12:16:15 '709704': vorherige erfolgreiche Autorisierung von 80 durchgeführt.83.239.67 on 2012.03.04 23:45:03
OS 0 Network 12:16:18 '709704': Terminal synchronisiert mit MetaQuotes Software Corp.// Kommunikation wiederhergestellt
IQ 0 Trades 12:18:12 '709704' : Geschäft #8672388 verkaufen 0.10 GBPCHF bei 1.44540 erledigt (basierend auf Bestellung #9495596) // dieser Handel wurde von einem Expert Advisor ausgeführt, der auf einem anderen Computer arbeitet
DF 0 Trades 12:35:37 '709704' : Sofortkauf 0.10 EURGBP zu 0.83422 // Ich habe versucht, die Position manuell zu schließen, vorher wurde die Historie heruntergeladen
IN 2 Trades 12:35:44 '709704' : fehlgeschlagener Sofortkauf 0.10 EURGBP zu 0.83422 [Anfrage wegen fehlender Netzwerkverbindung abgelehnt] // Verweigert
JP 1 Netzwerk 12:35:44 '709704': Verbindung zu MetaQuotes-Demo verloren
EI 0 Network 12:36:00 '709704': autorisiert auf MetaQuotes-Demo über Access Point Hong Kong
IG 0 Network 12:36:00 '709704': vorherige erfolgreiche Autorisierung durchgeführt von 80.83.239.67 am 2012.03.05 02:16:12
PG 0 Network 12:36:08 '709704': Terminal synchronisiert mit MetaQuotes Software Corp.// Kommunikation wiederhergestellt, weiterer Normalbetrieb
MS

 
Aus dem Protokoll geht hervor, dass das Terminal vor der Unterbrechung mit einem Server zusammenarbeitete, nach der Unterbrechung jedoch eine Verbindung zu einem anderen Server herstellte und mit dem Herunterladen des Verlaufs begann. Daraus lässt sich schließen, dass der Verlauf zwischen verschiedenen Servern nicht synchronisiert ist.
 
Valmars:

Ja, ich habe mir das Wesentliche gemerkt, es gab eine Unterbrechung der Kommunikation. Es sieht so aus, als würde das Terminal den Abgleich und das Herunterladen der Historie nur dann starten , wenn ein Tick für das Instrument empfangen wird, und am Wochenende gibt es keine Ticks. Sie können die Diagramme natürlich auch manuell aktualisieren, dann wird die letzte Serverzeit aktualisiert. Und wenn Sie den automatischen Modus verwenden möchten, dann zeichnen Sie einen Verbindungsausfall auf und starten Sie, wenn die Verbindung über das Wochenende wiederhergestellt ist, die Prüfung und laden Sie die Historie herunter, CheckLoadHistory(). Verwenden Sie eine Zeitschaltuhr.

...

Ja, es sieht so aus, als gäbe es eine Zeitaktualisierung, wenn das Häkchen kommt, aber der Verlauf war bereits vorhanden und konnte visuell betrachtet werden. Danke für die Lösungsmöglichkeiten. Ich werde versuchen, eine ähnliche Situation noch vor dem Wochenende zu reproduzieren, um die Lösungsmöglichkeiten zu testen.
 

Verbunden mit dem AlpariFS-MT5 Server, um den Expert Advisor unter verschiedenen Bedingungen zu testen. Die Ausführungsart war ursprünglich EXECUTION_MARKET - Ausführung von Aufträgen nach Markt. Ich habe erfolgreich Positionen über meine Trading-Panels eröffnet/geschlossen. Dann entdeckte ich, dass die Markttiefe im Kontextmenü des Charts verfügbar war. Ich öffnete es und stellte fest, dass es möglich war, Kauf-/Verkaufsoperationen durchzuführen. Zu Testzwecken habe ich eine Position gekauft und sie in der Tiefe des Marktes geschlossen. Danach wurde die Kontoausführungsart in EXECUTION_EXCHANGE geändert. Dies ist in MQL5 geklärt und es gibt nur zwei Optionen in der Dropdown-Liste des Auftragsfensters (F9): Austauschausführung und Ausstehender Auftrag. Der Versuch, sich erneut anzumelden oder das Terminal neu zu laden, löste das Problem nicht. Und jetzt bleibt die Ausführungsart auf dem Demokonto weiterhin EXECUTION_EXCHANGE.

Ich kontaktierte den Alpari-Support, beschrieb das Problem und klärte es:

//---

Anatoly | 17:55
Verstehe ich das richtig, dass auf Demokonten für MT5 im Moment die Option EXECUTION_MARKET vorhanden sein sollte?

Sergey | 17:56
Ja, richtig.

//---

Es scheint sich um einen Fehler zu handeln.

 

Einige Bezeichner sind in der Hilfe nicht beschrieben:

ORDER_FILLING_FOK, ORDER_FILLING_IOC und ORDER_FILLING_RETURN sind vorhanden,ORDER_FILLING_AON und ORDER_FILLING_CANCEL jedoch nicht, obwohl sie alle zur gleichen Liste mit einer Beschreibung führen.

 
tol64: undORDER_FILLING_AON und ORDER_FILLING_CANCEL sind es nicht, obwohl sie alle zur gleichen Liste mit Beschreibung führen.
Sie sind bereits abgeschafft, wir werden sie auch aus den Verzeichnissen entfernen.
 
Rosh:
Sie wurden bereits abgeschafft, wir werden sie auch aus den Indizes streichen.

Ich danke Ihnen.

//---

Diese Frage hat sich gestellt. Steht der Wettbewerbsserver jetzt für Tests mit den gleichen Einschränkungen wie beim Wettbewerb zur Verfügung(Volume Limit 15 lot / Volume Max 5 lot)? Ich habe versucht, mich mit dem alten Konto zu verbinden, aber es gibt keine Verbindung zum Server. Ich habe auf allen Servern gesucht, auf denen Metatrader 5 für den Handel verfügbar ist, aber ich habe nirgendwo VolumeLimit gefunden, und ich muss es testen. Oder reicht es aus, die Frage anhand eines Beispiels mit Wettbewerbswerten zu beantworten?

Ich habe eine offene Position mit einem Volumen von 14 Lots. Wenn ich versuche, einen schwebenden Auftrag mit einem Volumen von 2 Lots zu platzieren, wird die Anfrage abgelehnt? Oder der Auftrag wird mit der gleichen Größe platziert, aber er wird teilweise ausgeführt, d.h. 1 Lot, vorausgesetzt, die Position bleibt in der gleichen Größe(14 Lots).

Und vice versa. Wir haben einen schwebenden Auftrag über 14 Lose. Wenn ich versuche, eine Position mit 2 Lots zu eröffnen, wird der Antrag abgelehnt?

 

Ich werde mein Glück hier versuchen, denn es ist still auf Kettles...

Bitte klären Sie:https://www.mql5.com/ru/forum/3775/page113#comment_160125. Ich interessiere mich auch für die Software, die die erforderlichen Berechnungen durchführt.

 

Guten Tag.

Wie kann ich auf den Wert des integrierten iADX-Indikators zugreifen? Nämlich auf seinen Wert vor einer bestimmten Anzahl von Takten ? In mql4 wird dies durch die Einstellung des Parameters shift erreicht.

Schon jetzt vielen Dank.

Документация по MQL5: Технические индикаторы / iADX
Документация по MQL5: Технические индикаторы / iADX
  • www.mql5.com
Технические индикаторы / iADX - Документация по MQL5
Grund der Beschwerde: