Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1191

 

Wie kann eine Verbindung zu Meta Quotes-Servern hergestellt werden, damit die dll-Bibliothek Aufträge senden und Daten austauschen kann, so dass die C++-Sprache und nicht mql4 so weit wie möglich an der EA-Implementierung beteiligt ist?


Ist es möglich, Objekte in MT4 mit der dll-Bibliothek zu zeichnen, was kann man darüber lernen?

 
Mihail Matkovskij:

Aber warum erweist sich die Geschichte bei iBars(Symbol, Zeitrahmen) als unvollständig, während sie bei iBars(Symbol(), Periode()) ganz normal ist? Und es passiert nur, wenn das Terminal neu gestartet wird, nicht immer. Und die Variablen Symbol und Zeitrahmen werden im Initialisierungsabschnitt korrekt initialisiert (ich habe es selbst überprüft).

Versuchen Sie, mein Beispiel auszupressen:https://c.mql5.com/3/324/Test.mq5

Abfolge der Aktionen:

1. werfen Sie die kompilierte Datei in die Tabelle. Die Nachrichten, die Sie erhalten, wenn Sie dies tun:

2. Beenden Sie das Terminal und starten Sie es erneut. Die Meldungen im Protokoll lauten wie folgt:

Gelöst.

Anstelle dieses Codes

public:  
  Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe)); // Данный вызов iBars() даёт 0 при перезапуске терминала
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); // Этот же вызов iBars() работает нормально
  }

Ich habe Folgendes geschrieben

public:  
  Loader(): symbol(NULL), timeframe(PERIOD_CURRENT) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe));
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); 
  }

Jetzt treten beim Neustart des Terminals keine Fehler mehr auf. Aber Symbol und Zeitrahmen müssen nur mit leeren Werten initialisiert werden.

Hier sind zwei Versionen des Quellcodes, eine mit dem Fehler und eine funktionierende. Ich erinnere Sie daran, dass die Reihenfolge der Prüfungen wie folgt ist:https://www.mql5.com/ru/forum/160683/page1189#comment_17047032

Dateien:
Bug.mq5  7 kb
Correct.mq5  6 kb
 
Seric29:

Wie kann eine Verbindung zu Meta Quotes-Servern hergestellt werden, so dass die dll-Bibliothek Aufträge senden und Daten austauschen kann, so dass die Implementierung des Expert Advisors so weit wie möglich die Sprache C++ und nicht mql4 verwendet?

Das ist nicht möglich. Das Protokoll ist geschlossen.

Ist es möglich, Objekte in MT4 mit der dll-Bibliothek zu zeichnen? Was kann ich darüber lernen?

Nein, das können Sie nicht.

 
Seric29:

Wow, das werde ich mir ansehen. Ich weiß, dass man Variablen mit Array-Elementen mit Funktionen initialisieren kann, aber ich wusste nicht, dass sich das automatisch ändert, ich glaube auch nicht, dass es so etwas in C++ gibt, ich werde das später überprüfen.

Ich habe einen Fehler gemacht (

Wenn Sie das Lot vor Handelsoperationen neu berechnen müssen, sollten Sie die Lot-Definition am Anfang von OnTick

oder (wie ich es geändert habe) OnTimer

 

Hallo! Bitte helfen Sie mir, alle Werte auszugeben, ich kann nur die letzten Werte ausgeben. Und die zweite Frage, wie man diese Werte mit einer Verschiebung nach rechts ausgibt (jede Verschiebung kann eingestellt werden). Ich danke Ihnen!

   for(int p = 0; p < 4; p++)
      for(int c = 0; c < 4; c++)
         for(int ps = 0; ps < 4; ps++)
            Comment(StringFormat("Выводим значения\nP = %G\nC = %G\nPS = %d", p, c, ps));
 

Wo kann ich etwas über Begrenzungszeichen im Druck lesen? Entweder sind es Pluszeichen oder Kommas, ich verstehe das nicht, es ist ein Chaos.

Print(a, b + "abc") ;

 
Koldun Zloy:

Negativ. Das Protokoll ist geschlossen.

Das können Sie nicht.

Was meinen Sie damit, dass das Protokoll geschlossen ist? In mql4 gibt es Funktionen zum Öffnen von Aufträgen, es ist im Wesentlichen nur Code. Das Gleiche gilt für grafische Objekte. Ich habe gehört, dass mql4 ein kommerzielles Produkt ist und dass es deshalb keinen Quellcode oder eingebettete Funktionen (z.B. Arrayresize/Range etc.) gibt. Ich fühle mich zum Beispiel nicht wohl bei der Verwendung von mql4, um ein Programm zu schreiben, es ist eine zu tote Sprache, sehr begrenzt. Was ist mit der Sprache Win API 32, kann sie nichts über meine Fragen tun? Ich vermute, dass auch für Win API 32 alles geschlossen ist.

 
Seric29:

Was meinen Sie damit, dass das Protokoll geschlossen ist? In mql4 gibt es Funktionen zum Öffnen von Aufträgen, es ist im Grunde nur einfacher Code. Das Gleiche gilt für grafische Objekte. Ich habe gehört, dass mql4 ein kommerzielles Produkt ist und dass es deshalb keinen Quellcode oder eingebettete Funktionen (z.B. Arrayresize/Range etc.) gibt. Ich fühle mich zum Beispiel nicht wohl bei der Verwendung von mql4, um ein Programm zu schreiben, es ist eine zu tote Sprache, sehr begrenzt. Was ist mit der Sprache Win API 32, kann sie nichts über meine Fragen tun? Wahrscheinlich ist auch alles für Win API 32 gesperrt.

Es wäre besser, ein separates Thema zu machen, das wird lebendiger sein)

 
MakarFX:

Ich habe einen Fehler gemacht(

Wenn Sie das Lot neu berechnen müssen, bevor Sie einen Handel durchführen, ist es besser, die Lot-Definition am Anfang von OnTick

oder (wie ich es geändert habe) OnTimer

Was ich meine, ist, dass Sie die Variable "lot" mit einem Ausdruck initialisiert haben und dieser Ausdruck nicht automatisch ausgefüllt werden kann. Sie können es sogar überprüfen, indem Sie einen einfachen Zähler nehmen, den Zählerwert während der Initialisierung zuweisen und dann den Zähler ändern und der Wert von Lot wird sich nicht ändern, es sei denn, Sie ändern ihn selbst. Es funktioniert in C++.

int Pomidor=9;
int Pomidor1(int q=Pomidor){return q;}//при инициализации
Вызов
Print(Pomidor());// результат будет автоматически равен Pomidor и это будет регулярная смена значений 

Aber es funktioniert nicht in mql4, es funktioniert nur wie folgt

int Pomidor1(int q=67){return q;}

Ergebnis 67.

 
Valeriy Yastremskiy:

Machen Sie lieber ein eigenes Thema, das ist lebendiger)

Ich habe auch gedacht, das Thema ist relevant, aber natürlich nicht so, dass es sich lohnt, das Forum zu verstopfen, vielleicht ist es für viele Leute nicht interessant. Ich bin interessiert, ich schreibe gerne Code in C++.

Grund der Beschwerde: