Der große und schreckliche MT4 für immer (oder wie man einen Übergang strategisch plant) - Seite 19

 
fxsaber:

Die Begriffe MT4 und MT5 sind gleich.

Seit so vielen Jahren kennt jeder das Hinterland und kommt nach... Schlaf. Weil es SEHR kompliziert ist. Viele der Funktionen der Handels-API, die im Forum angesprochen wurden, sind den Entwicklern nicht bekannt oder wurden nicht kommentiert.


Niemand kritisiert MT5. Ich habe Ihnen anhand von Beispielen einige Probleme aufgezeigt, die beim Lösen der grundlegenden Aufgaben auftreten.

Warum sind sie gleich? Sie haben meine Frage immer noch nicht beantwortet.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

The Great and Horrible MT4 Forever (oder wie man effektiv eine Migrationsstrategie festlegt)

Alexey Viktorov, 2021.05.09 09:15

... Und wenn ich mich von einem anderen Computer aus mit meinem Konto verbinde und ein paar Aufträge erteile ... was wird MQL4 öffnen?

Niemand kritisiert MT5. Ich habe einige Probleme beim Lösen elementarer Probleme anhand von Beispielen aufgezeigt.

Sie müssen nur das Ergebnis der OrderSend()-Funktion korrekt verarbeiten, und Sie können sich nicht von der Einfachheit von mql4 lösen. Sie haben Ihr eigenes Ziel, nämlich Mikrosekunden zu fangen, nicht zu handeln... Ein DT hat Probleme und Sie geben diese Probleme als MT-Fehler aus. Zeigen Sie die Positionsumkehr im MQ-Konto an, dann werden die Entwickler darauf achten. Ich habe Ihren Code in der Robo-Demo ausgeführt und konnte kein Backtracking feststellen.

Einige Ihrer Fehlerberichte verdienen wirklich Respekt, aber andere... sorry, so ein Unsinn, ich bin sprachlos.

Das ist alles... Fröhlichen Tag des Sieges. Frieden. Arbeit. Mai.

 
Alexey Viktorov:

Warum sind sie gleich? Sie haben die Frage immer noch nicht beantwortet.

Auch hier gelten die gleichen Bedingungen wie für MT4/5. Sie müssen am Ende der Skriptausführung 100 offene Positionen auf einem leeren Konto haben. Es ist erlaubt, einige Positionen in einem beliebigen Terminal während der Laufzeit des Skripts zu schließen. Dieses "Eingreifen" ist nur notwendig, um dumme Entscheidungen zu vermeiden.

for (int i = 0; i < 100; i += OrderSend(Request, Result))
  ;

Das Ergebnis der Funktion OrderSend() muss korrekt verarbeitet werden, aber man kommt von der Einfachheit von mql4 nicht los. Sie haben Ihr eigenes Ziel, Mikrosekunden zu fangen, nicht zu handeln... Ein dtz hat Probleme und Sie geben diese Probleme als MT-Bugs aus. Zeigen Sie die Positionsumkehr im MQ-Konto an, dann werden die Entwickler darauf achten. Ich habe Ihren Code in der Robo-Demo ausgeführt und konnte kein Backtracking feststellen.

Einige Ihrer Fehlerberichte verdienen wirklich Respekt, aber andere... sorry, so ein Unsinn, da fehlen einem die Worte.

Nur weil Sie keine Probleme sehen, heißt das nicht, dass es keine gibt. Die MQ-Demo ist ein ekelhafter Ort, was das Debugging angeht. Es gibt eine Ausführungsart, bei der OrderSend für Marktaufträge nur dann true zurückgibt, wenn eine Position eröffnet wird. In Wirklichkeit gibt es nichts dergleichen auf den ECN-Konten. true - Market Order wird akzeptiert. Es ist wichtig zu beobachten, was als nächstes passiert. Nur die Küchen-DCs verwenden ein anderes Ausführungsschema (wie in MQ-Demo).

Das ist alles... Fröhlichen Tag des Sieges. Frieden. Arbeit. Mai.

Gleichermaßen.

 
fxsaber:

Ich muss ein Skript auf einem MT5 schreiben, das 100 Positionen auf einem leeren Konto eröffnet.


Auf MT4 habe ich das so gelöst.

void OnStart()
{
  while (OrdersTotal() < 100)
    OrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, 0);
    
  Print(OrdersTotal());
}

Wer hat eine Lösung für MT5?

Ich habe den kürzesten Code erhalten, den ich je für MT5 geschrieben habe:

MqlTradeRequest BuyRequest = {0};
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   static bool run = false;
   if(run) return;
   BuyRequest.action = TRADE_ACTION_DEAL;
   BuyRequest.type = ORDER_TYPE_BUY;
   BuyRequest.symbol = _Symbol;
   BuyRequest.volume = 0.1;
   BuyRequest.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   BuyRequest.type_filling = GetFilling();
   MqlTradeResult result;
   run = OrderSend(BuyRequest, result);
}
//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade()
{
   MqlTradeResult result;
   while(PositionsTotal() < 10 &&
         SymbolInfoDouble(_Symbol, SYMBOL_ASK, BuyRequest.price) &&
         OrderSend(BuyRequest, result))
   {}
}
//+------------------------------------------------------------------+
ENUM_ORDER_TYPE_FILLING GetFilling(const uint Type = ORDER_FILLING_FOK)
{
   const ENUM_SYMBOL_TRADE_EXECUTION ExeMode = (ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE);
   const int FillingMode = (int)::SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);

   return((FillingMode == 0 || (Type >= ORDER_FILLING_RETURN) || ((FillingMode & (Type + 1)) != Type + 1)) ?
          (((ExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE) || (ExeMode == SYMBOL_TRADE_EXECUTION_INSTANT)) ?
           ORDER_FILLING_RETURN : ((FillingMode == SYMBOL_FILLING_IOC) ? ORDER_FILLING_IOC : ORDER_FILLING_FOK)) :
          (ENUM_ORDER_TYPE_FILLING)Type);
}
//+------------------------------------------------------------------+

ohneGetFilling() - funktioniert nicht bei Krypto (((

Aber auch mit diesem Code wurden 11 Stellen eröffnet:


 
Igor Makanu:

den kürzesten Code, den ich auf MT5 schreiben konnte:

Der Kürze halber könnte ich SB machen.

Aber selbst in diesem Code habe ich 11 Positionen offen:

Denn die Logik des Codes ist die folgende.

 
fxsaber:

Der Kürze halber können Sie SB verwenden

Denn die Logik des Codes ist die folgende.

das Problem wird auch mit PositionsTotal() nicht gelöst:

void OnTrade()
{
   if(PositionsTotal() >= 10) return;
   MqlTradeResult result;
   BuyRequest.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   OrderSend(BuyRequest, result);
}

öffnet sich, wenn es 10 Positionen gibt, wenn es sogar 13 sind

Die einzige Möglichkeit, das Problem zu lösen, besteht darin, die Ticketbestellung aus dem Ergebnis von MqlTradeResult zu speichern und auf das Erscheinen einer offenen Position zu warten; dann wird die angegebene Anzahl von Positionen geöffnet.

 
Igor Makanu:

PositionsTotal() wird auch auf diese Weise nicht gelöst:

er öffnet sich, wenn es 10 Stellen gibt, wenn es sogar 13 sind

Es bleibt nichts anderes übrig, als sich die Ticketbestellung aus dem MqlTradeResult-Ergebnis zu merken und auf das Erscheinen einer offenen Position zu warten. Dann wird die angegebene Anzahl von Positionen mit Sicherheit geöffnet

Also einfach abwarten!!! Denn mql4 wartet, und du nimmst es ihm nicht übel. Und in MQL5 haben Sie beschlossen, dass Sie einfach eine Anfrage senden können und davon ausgehen, dass sie ausgeführt werden muss............

 
Igor Makanu:

PositionsTotal() ist auch so nicht gelöst:

er öffnet sich, wenn es 10 Stellen gibt, wenn es sogar 13 sind

Es gibt nicht viel zu tun, außer das Orderticket aus dem MqlTradeResult-Ergebnis zu speichern und auf die geöffneten Positionen zu warten; dann wird die angegebene Anzahl von Positionen mit Sicherheit geöffnet werden

Bitte beachten Sie, dass es sich nicht um ein Skript/einen Dienst, sondern um einen EA handelt. Aber selbst mit einem EA wäre es sehr mühsam, eine so einfache Zweizeilenaufgabe zu lösen.

 
Alexey Viktorov:

Also warten!!! Schließlich wartet mql4 und Sie nehmen es ihm nicht übel. Und in MQL5 haben Sie beschlossen, dass Sie einfach eine Anfrage senden können und davon ausgehen, dass sie ausgeführt werden muss............

Mehrere Personen haben hier erklärt, dass es keine Schwierigkeiten gibt. Sie haben jedoch keine Lösung angeboten.

 
fxsaber:

Mehrere Personen haben hier zum Ausdruck gebracht, dass es keine Schwierigkeiten gibt. Eine Lösung haben sie jedoch nicht vorgelegt.

Ich werde auch keine zur Verfügung stellen, und zwar aus dem einfachsten Grund. Ich möchte keine ...Programmierer (nicht Sie) belehren, aber wenn nötig, werde ich das Problem lösen, ohne zu viel nachzudenken. Und das alles aus demselben Grund, weil schon seit langem in CodeBase ausschließlich Codes von Tumblr auftauchen. Alle anderen sind still...

 
Alexey Viktorov:

Ich werde beides nicht zur Verfügung stellen, und zwar aus dem einfachsten Grund. Ich will nicht unterrichten ...coders (es geht nicht um Sie), aber wenn nötig werde ich das Problem lösen, ohne zu viel denken. Und das alles aus dem gleichen Grund, weil seit langem Codes ausschließlich von Tumblr zu CodeBase kommen. Alle anderen sind still...

Mit der Zunge zu reden ist nicht wie mit einem Sack zu reden. Du solltest mich unterrichten. Mich, bitte.

Es gibt ein Problem, und zwar nicht nur bei diesem Makler.
Und das Problem besteht nicht darin, dass ich auf die Ausführung eines bestimmten Auftrags warte (das ist ein anderes Thema), sondern darin, dass der Auftrag während seiner Ausführung für eine Weile aus allen Listen (offene, geschlossene, Geschäfte, Positionen) verschwindet.

Wir könnten natürlich eine weitere Stütze gebrauchen. Aber wir wollen eine menschliche Lösung finden. Und genau daran arbeitet fxsaber öffentlich und lauscht dem Gebell der vorbeikommenden Gratulanten.

Grund der Beschwerde: