Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 321

 
C-4:

Noch einmal (sorgfältig lesen):

Im MetaTrader4 können Sie Aufträge nur sequentiell schließen: Senden Sie einen Auftrag, um einen Auftrag zu schließen, warten Sie auf seine Ausführung, gehen Sie zum nächsten Auftrag über usw. Aus diesem Grund ist die Zeit für das Schließen eines Stapels von Aufträgen in MetaTrader4 beträchtlich und kann nicht mit trivialen Mitteln reduziert werden. Sie können jedoch mehrere Expert Advisors auf Ihre eigenen Charts hochladen und dafür sorgen, dass sie Informationen untereinander austauschen und Aufträge mit einem gemeinsamen Befehl schließen. Jeder Experte schließt Aufträge nur zu seinem Symbol ab. Da es in MetaTrader4 mehrere Handelsstränge gibt, würden sie sich nicht gegenseitig blockieren und Aufträge aneinander senden. Die Organisation eines solchen Expertenpools ist jedoch kompliziert, und nach Ihrem Wissensstand zu urteilen, würde ich Ihnen von so etwas abraten.

Wenn Sie immer noch der Meinung sind, dass ich zu viele Worte geschrieben habe, hier eine kurze Zusammenfassung:

1 Die Antwort auf Ihre Frage lautet: Nein, Sie können kein Skript von einem Expert Advisor aus ausführen.

2. Sie können die Ausführungsgeschwindigkeit von Handelsaufträgen im MetaTrader4 nicht erhöhen, ohne komplexe Methoden anzuwenden.

Die einzige Möglichkeit, Ihre Frage zu lösen, ist normalerweise die Funktion OrderSendAsync, die es im MetaTrader4 nicht gibt.

Herzlichen Dank für Ihre ausführliche Antwort! Wenn Sie nichts dagegen haben, teilen Sie uns bitte Ihre Meinung zu dieser Idee mit:

Fügen Sie 2 Parameter zum Expert Advisor hinzu, der alle Aufträge mit Gesamtgewinn schließt, um die Aufträge zu sortieren:
(1 Parameter - 1-Sortierung nach Mag in absteigender Reihenfolge oder 2 - aufsteigende Reihenfolge und 2 - 0-Verkauf und Kauf, 1-Verkaufsaufträge, 2-Kaufaufträge)
Öffnen Sie 4 Terminals mit einem Konto und einem gemeinsamen Chart desselben Paares, so dass die Ticks übereinstimmen, und stellen Sie verschiedene Parameter wie 1-1, 1-2, 2-1, 2-2 ein.
die sie in 4 Ströme aufteilt: Minimum Magier verkaufen, Minimum Magier kaufen, Maximum Magier verkaufen, Maximum Magier kaufen

Oder bin ich schon wieder dumm? Und ja, Sie haben Recht, was meinen Wissensstand angeht!

 
Novikov:

Herzlichen Dank für die ausführliche Antwort! Wenn Sie nichts dagegen haben, teilen Sie uns bitte Ihre Meinung zu dieser Idee mit:

Fügen Sie 2 Parameter zum Expert Advisor hinzu, der alle Aufträge mit Gesamtgewinn schließt, um die Aufträge zu sortieren:
(1 Parameter - 1-Sortierung nach Mag in absteigender Reihenfolge oder 2 - aufsteigende Reihenfolge und 2 - 0-Verkauf und Kauf, 1-Verkaufsaufträge, 2-Kaufaufträge)
Öffnen Sie 4 Terminals mit einem Konto und einem gemeinsamen Chart desselben Paares, so dass die Ticks übereinstimmen, und stellen Sie verschiedene Parameter wie 1-1, 1-2, 2-1, 2-2 ein.
die sie in 4 Ströme aufteilt: Minimum Magier verkaufen, Minimum Magier kaufen, Maximum Magier verkaufen, Maximum Magier kaufen

Oder bin ich schon wieder dumm? Und ja, Sie haben Recht, was meinen Wissensstand angeht!

Ja, so kann man es machen. Es ist jedoch nicht notwendig, mehrere Terminals zu betreiben. Führen Sie ein Terminal aus, und es hat 4 Fenster. Setzen Sie einen Roboter auf jedes Fenster. Verwenden Sie Zahlen als einen der Parameter dieses Roboters: 1-4. Mit anderen Worten, Sie sollten den Roboter mit dem Parameter 1 dem ersten Fenster zuordnen, mit dem Parameter 2 dem zweiten Fenster und so weiter. Wenn es an der Zeit ist, die Aufträge zu schließen, vergleicht jeder der Roboter die magische Zahl des ausgewählten Auftrags mit der magischen Zahl des Parameters und schließt ihn. Aufträge mit anderen Majicks werden an andere Expert Advisors zum Schließen weitergegeben.
 
C-4:
Ja, wir können das tun. Es ist jedoch nicht notwendig, mehrere Terminals zu betreiben. Sie müssen ein Terminal starten, das 4 Fenster hat. Setzen Sie einen Roboter auf jedes Fenster. Verwenden Sie Zahlen als einen der Parameter dieses Roboters: 1-4. Mit anderen Worten, Sie sollten den Roboter mit dem Parameter 1 dem ersten Fenster zuordnen, mit dem Parameter 2 dem zweiten Fenster und so weiter. Wenn es an der Zeit ist, die Aufträge zu schließen, vergleicht jeder der Roboter die magische Zahl des ausgewählten Auftrags mit der magischen Zahl des Parameters und schließt ihn. Aufträge mit anderen Majicks werden an andere Expert Advisors zum Schließen weitergegeben.

Als ich im mt5-Forum zunächst 4 Fenster in Betracht zog, wie Sie vorschlagen, antwortete ein Programmierer: "Das Terminal ist eines. Das bedeutet, dass es nur ein "Loch" gibt, d.h. es gibt nur ein kleines "Loch" im Terminal für den Zugriff auf den Server in der Größe einer Anfrage, das von allen EAs und Skripten, die im Terminal laufen, genutzt wird. Niemand kann auf den Server zugreifen, bis die einzelne Anfrage bearbeitet wurde.

Was ist also besser und wahrheitsgetreuer - 4 Karten in 1 Terminal oder 4 Terminals?

 
Novikov:

Als ich im mt5-Forum zunächst 4 Fenster in Betracht zog, wie Sie vorschlagen, antwortete ein Programmierer: "Das Terminal ist eines. Das bedeutet, dass es nur ein "Loch" gibt, d.h. es gibt nur ein kleines "Loch" im Terminal für den Zugriff auf den Server in der Größe einer Anfrage, das von allen EAs und Skripten, die im Terminal laufen, genutzt wird. Solange eine Anfrage nicht bearbeitet wird, kann kein anderer Zugriff auf den Server erfolgen.

Was ist also besser und wahrheitsgetreuer - 4 Karten in 1 Terminal oder 4 Terminals?

Denken Sie selbst über die Antwort dieses "Programmierers" nach. Wäre es so, wäre es unmöglich, mit mehreren Expert Advisors in einem Terminal zu handeln. Sie waren ständig mit dem Kontext beschäftigt, d. h. sie blockierten sich gegenseitig. Früher gab es in den zotteligen Versionen von MT4 tatsächlich einen solchen Fehler, und man konnte darauf stoßen, aber jetzt wurde er, soweit ich weiß, sogar entfernt, weil er nicht mehr relevant ist. Das Multithreading bei der Orderausführung im MT4 wurde stark erweitert und ist schon seit langem vorhanden.

In jedem Fall sollten Sie meinen Rat befolgen, und wenn etwas schief geht, wird es nicht schwierig sein, einige EAs auf ein anderes Terminal zu verschieben.

 
Novikov:

Als ich im mt5-Forum zunächst 4 Fenster in Betracht zog, wie Sie vorschlagen, antwortete ein Programmierer: "Das Terminal ist eines. Das bedeutet, dass es nur ein "Loch" gibt, d.h. es gibt nur ein kleines "Loch" im Terminal für den Zugriff auf den Server in der Größe einer Anfrage, das von allen EAs und Skripten, die im Terminal laufen, genutzt wird. Niemand kann auf den Server zugreifen, bis die einzelne Anfrage bearbeitet wurde.

Was ist also besser und wahrheitsgetreuer - 4 Karten in 1 Terminal oder 4 Terminals?

Wo finden Sie solche "Programmierer"?
 

Noch eine Frage: Würde die Funktion OrderCloseBy helfen, das Schließen eines großen Auftragsstapels zu beschleunigen?

Zum Beispiel: Wenn ein bestimmter Gewinn erreicht ist, eröffnen Sie 1 weitere Order für das/die Paar(e), um die Losgröße der Kauf- und Verkaufsorders auszugleichen, und führen Sie dann "Überlappende Orders schließen" aus.

Anführungszeichen sind 5-stellig.

 

Leute, könnt ihr mir bei dieser Frage helfen, sie könnte organisatorischer Natur sein. Ich kann Ihnen den Code des Indikators nicht zeigen. Es ist kompetent geschrieben, alles ist vorher getestet worden.

Beginnen Sie die Frage von hier aus: https://www.mql5.com/ru/forum/6343/page323

Ich installierte das Terminal von der MQ-Website, auf der standardmäßig ein Alp-Demoserver angeboten wurde. Am Ende wurde der Test mit Eurobucks durchgeführt:

Meines Erachtens wartet sie auf die Daten des Pfund-Dollars. Nirgendwo wird ein Handel eröffnet.

Als Nächstes heißt es, wenn man auf die Pfund-Bucks läuft:

anstehende Daten für USDJPY.

 

Und nur wenn es auf USDJPY läuft - es gibt keine Daten, die warten - aber immer noch keine offenen Trades.

Ich habe im Code nicht explizit ein Paar zur Eröffnung von Geschäften angegeben, d.h. zum Beispiel

Alle für ein beliebiges Symbol _Symbol. Und es geht nicht um die Eröffnung von Aufträgen... Was könnte der Grund dafür sein? Danke.

 for(int i=0;i<10;i++)
     {
      volume=NormalizeDouble(volume,1);
      if(volume<=0) break;
      if(Type==POSITION_TYPE_SELL)
        {
         request.type=ORDER_TYPE_SELL;
         request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
         if(TP!=0) takeprofit = request.price-TP*_Point;
         if(SL!=0) stoploss = request.price+SL*_Point;
        }
      if(Type==POSITION_TYPE_BUY)
        {
         request.type=ORDER_TYPE_BUY;
         request.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
         if(TP!=0) takeprofit = request.price+TP*_Point;
         if(SL!=0) stoploss = request.price-SL*_Point;
        }
      request.action = TRADE_ACTION_DEAL;
      request.symbol = _Symbol;
      request.volume = MathMin(volume,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX));
      request.sl = stoploss;
      request.tp = takeprofit;
      request.deviation=SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
      request.type_filling=ORDER_FILLING_FOK;
      request.comment=" ";//DoubleToString(Money,2)+"$";
      if(!OrderCheck(request,check))
        {
         if(check.margin_level<100) volume-=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
 

Der Indikator ordnet jedem Instrument ein Gewicht zu, was zu einer Art Clusteranalyse führt. Im Testgerät will es nicht funktionieren. Was könnte der Grund dafür sein? Ich danke Ihnen.

Und die Agenten funktionieren einwandfrei, alles ist aufgeladen und einsatzbereit...


 
R0MAN:

Der Indikator ordnet jedem Instrument ein Gewicht zu, was zu einer Art Clusteranalyse führt. Im Testgerät will es nicht funktionieren. Was könnte der Grund dafür sein? Ich danke Ihnen.

Und die Agenten funktionieren einwandfrei, alles ist aufgeladen und einsatzbereit...


Schreiben Sie an servicedesk. Sie müssen Ihnen allerdings den Code geben.