Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 186

 
GeschichteWählen.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

MT5 und Geschwindigkeit in Aktion

fxsaber, 2020.09.02 00:32

Wenn jemand versucht, gemeinsam genutzte Bibliotheken zu verwenden, bei denen der from-input-Parameter nicht übereinstimmt, kommt es zu Verzögerungen.


Der andere HistorySelect.

Forum für Handel, automatisierte Handelssysteme und Strategietests

MT5 und Geschwindigkeit in Aktion

fxsaber, 2020.09.02 00:52

HistoryDealSelect und HistoryOrderSelect sollten unbedingt so geschrieben werden.

  static bool HistorySelectOrder( const ulong Ticket )
  {
    return((::HistoryOrderGetInteger(Ticket, ORDER_TICKET) == Ticket) || ::HistoryOrderSelect(Ticket));
  }

  static bool HistorySelectDeal( const ulong &Ticket )
  {
    return((::HistoryDealGetInteger(Ticket, DEAL_TICKET) == Ticket) || ::HistoryDealSelect(Ticket));
  }

Andernfalls werden Sie garantiert auf Verzögerungen stoßen.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

MT5 und Geschwindigkeit in Aktion

Renat Fatkhullin, 2020.09.02 00:40

Wenn Sie mit großen Volumina arbeiten (und Sie haben nicht umsonst Tausende und Zehntausende von Geschäften in der Historie gezeigt), die einen atomaren/Snapshot-Zugriff erfordern, müssen Sie deren Kosten verstehen.

 
Wenn der EA MessageBox in OnInit hat, gibt es eine Reihe von Möglichkeiten, das potentielle Problem der erneuten Protokollierung zu umgehen.
 
Es ist ratsam, die Anzahl der Aufrufe interner Funktionen zu minimieren, um die Wahrscheinlichkeit zu verringern, dass die nicht seltenen Verzögerungen auftreten.
 

Kann nicht gewinnen

2020.04.01 11:49:34 fehlgeschlagener Sofortverkauf 0,32 EURUSD zu 1,09539 [Ungültiges Volumen]

Ich habe eine Überprüfung der Gesamtvolumengrenze auf dem Markt.

Ich weiß nicht, warum ich eine solche Fehlermeldung bekomme

Im Marktplatz-Validator
 
Vladimir Pastushak:

Kann nicht gewinnen

2020.04.01 11:49:34 fehlgeschlagener Sofortverkauf 0,32 EURUSD zu 1,09539 [Ungültiges Volumen]

Ich habe eine Überprüfung der Gesamtvolumengrenze auf dem Markt.

Ich verstehe nicht, warum ich eine solche Fehlermeldung erhalte.

Im Marktplatz-Validator

Sie konnten das Auftragslimit nicht erreichen? Ich glaube, es war so.

 
Edgar Akhmadeev:

Könnte es sein, dass Sie auf ein Limit für Haftbefehle gestoßen sind? Ich glaube, das habe ich.

Er sagt, dass das Volumen falsch ist, die Verfügbarkeit von Geldmitteln wird geprüft, die Überschreitung der Losgrenze wird ebenfalls geprüft. Graben Sie weiter...

 
Vladimir Pastushak:

Da steht nicht die richtige Lautstärke.

Edgar Achmadeev:

Ich scheine es gehabt zu haben.

...dass ein kleines Volumen nicht mit einer großen Einlage eröffnet wurde. Ich erinnere mich nicht mehr an die Einzelheiten, aber einer der Makler auf dem Cent hatte ein sehr kleines Orderlimit für das Instrument.

 

Im MT5 gibt es folgendes Problem. Ich muss die Funktion des Handelsbereichs im Strategietester im visuellen Modus testen. Das Handelsfeld verfügt über Eingabefelder (OBJ_EDIT). Wenn Sie den Text im Eingabefeld ändern und ENTER drücken, erscheint nicht der neue Text, sondern der ursprüngliche Text, der bei der Erstellung des Eingabefelds festgelegt wurde. Das heißt, es ist nicht möglich, den Text im Eingabefeld während der visuellen Prüfung des Panels zu ändern.

Wie kann dies gelöst werden?

Beispiel-Code:

void OnTick()
  {
   string name="EDIT";
   if(ObjectFind(0,name)==-1)
     {
      ObjectCreate(0,name,OBJ_EDIT,0,0,0);
      ObjectSetString(0,name,OBJPROP_TEXT,"EURUSD");
      ObjectSetInteger(0,name,OBJPROP_XDISTANCE,50);
      ObjectSetInteger(0,name,OBJPROP_YDISTANCE,50);
      ObjectSetInteger(0,name,OBJPROP_XSIZE,50);
      ObjectSetInteger(0,name,OBJPROP_YSIZE,20);
      ObjectSetInteger(0,name,OBJPROP_READONLY,false);
      ObjectSetInteger(0,name,OBJPROP_COLOR,clrBlack);
      ObjectSetInteger(0,name,OBJPROP_BGCOLOR,clrWhite);
     }
  }
 

Ich habe dieses Auto-Hotkey-Skript erstellt, um die Titelleisten während der Codierung auszublenden. Es funktioniert für alle Fenster unter Windows. Bei anderen Plattformen bin ich mir nicht sicher.



; 
Hide borders, title bar 









#IfWinNotActive ahk_class Progman 









#IfWinNotActive ahk_class Shell_TrayWnd 









^] :: 









WinGet Style, Style, A 









if (Style & 0xC40000) { 









WinSet, Style, -0xC40000, A 









WinMaximize, A 













} 









else { 









WinSet, Style, + 0xC40000, A 









WinRestore, A 









} 









return 

Das Ergebnis ist ein perfekt ausgefüllter Desktop-Bildschirm.

Speichern Sie die Datei einfach als Dateiname.ahk. Speichern Sie es in Ihrem bevorzugten Verzeichnis, laden Sie es herunter und installieren Sie https://www.autohotkey.com.

Erstellen Sie eine Verknüpfung mit dem Skript und schneiden Sie es aus. Drücken Sie win + r

Geben Sie shell: startup ein und fügen Sie die Verknüpfung in das Pop-up-Fenster ein.

Auf diese Weise wird das Skript nach dem Neustart mit Windows gestartet. Um das Skript jetzt zu starten, doppelklicken Sie darauf, dann können Sie die Fenstertitelleisten mit ctrl +]

Stellen Sie sicher, dass das Fenster nicht maximiert ist, während Sie die Verknüpfung verwenden. Es macht keinen Sinn, ein maximiertes Fenster zu maximieren, und ich habe für diesen Fall nicht gehandelt.

Genießen Sie

bearbeiten:

Der Code-Formatierer verhält sich seltsam. Der Code wird immer wieder auf riesige Zeilenabstände erweitert. Lol!

AutoHotkey
  • www.autohotkey.com
AutoHotkey provides a simple, flexible syntax allowing you to focus more on the task at hand rather than every single little technicality. It supports not only the popular imperative-procedural paradigm, but also...
Dateien:
 

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Bibliotheken: Benchmark

fxsaber, 2020.10.01 23:49

// Возвращает true в некоторых ситуациях, когда чарт не виден.
bool IsInvisible( long chartID = 0 )
{
  bool Res = ::ChartGetInteger(chartID, CHART_IS_MINIMIZED);
  
  if (!Res && !::ChartGetInteger(chartID, CHART_IS_MAXIMIZED) && ::ChartGetInteger(chartID, CHART_IS_DOCKED))
  {
    if (!chartID)
      chartID = ::ChartID();

    for (long Chart = ::ChartFirst(); (Chart != -1) && !Res; Chart = ::ChartNext(Chart))
      Res = (Chart != chartID) && ::ChartGetInteger(Chart, CHART_IS_MAXIMIZED);
  }
  
  return(Res);
}

Handelspanels und andere Informationen auf Charts werden nicht aktualisiert, wenn "true" zurückgegeben wird.