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

 
Igor Makanu:

in der PM hat den Server verlassen

Dieser Server (oder vielmehr die Software des Brokers) verfügt über einen Spamschutz. Die Aktualisierung ist für nächste Woche geplant, und dann wird die Verlangsamung behoben sein.

 
fxsaber:

Ich werde mir diesen Server ansehen müssen. Es wäre gut, die hier vorgeschlagene Krücke zu prüfen, für wen sie wichtig zu sein scheint.

Ich würde es hassen, nach einer Weile wieder auf dieses Thema zurückzukommen. Es wäre besser, auf Fehler hinzuweisen, falls es welche gibt.

Es gibt noch keine Option im MT4-Stil?

Einfach das Skript ausführen und 100 Positionen auf verschiedenen Servern öffnen?

 
Andrey Khatimlianskii:

Noch keine Option im MT4-Stil?

Es hat noch nicht begonnen. Höchstwahrscheinlich wird der Benutzer nichts am Code ändern. Die zusätzlichen Funktionen werden durch ein Makro aktiviert.

Einfach das Skript ausführen und 100 Positionen auf verschiedenen Servern öffnen?

Ja, auf verschiedenen Servern, aber nur ein anderes Skript. Tritt während der einminütigen Laufzeit keine Verdoppelung auf, so hat er die Prüfung erfolgreich bestanden. Andernfalls - Fehlschlag.

Библиотеки: TradesID
Библиотеки: TradesID
  • 2021.03.29
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: TradesID
 
fxsaber:

Es hat noch nicht begonnen. Höchstwahrscheinlich wird der Benutzer nichts am Code ändern. Die zusätzlichen Funktionen werden über ein Makro aktiviert.

Ich hab's.

Библиотеки: MT4Orders
Библиотеки: MT4Orders
  • 2021.02.09
  • www.mql5.com
MT4Orders: Автор: fxsaber...
 

Das war es.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Der große und der schreckliche MT4 für immer (oder wie man eine intelligente Migrationsstrategie entwickelt)

fxsaber, 2021.05.11 09:05

Ohne auf eine Position zu warten - Ergebnisse sofort.

#include <fxsaber\TradesID\ByPass.mqh>
#include <MT4Orders.mqh>

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnStart()
{
  BYPASS ByPass;
  
  MT4ORDERS::OrderSend_MaxPause = 0; // Запрет на ожидание позиции после OrderSend
  
  while (OrdersTotal() < 30)
    if (ByPass.Is())
      ByPass += OrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, 0);      
    
  Print(OrdersTotal());
}

Das stimmt.

#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // Максимальное время (в мкс.) на ожидание синхронизации торгового окружения
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnStart()
{
  MT4ORDERS::OrderSend_MaxPause = 0; // Запрет на ожидание позиции после OrderSend
  
  while (OrdersTotal() < 30)
    OrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, 0);      
    
  Print(OrdersTotal());
}


Jetzt nicht anders als die MT4-Variante, einschließlich der Zuverlässigkeit.

Alle Beispiele, die in MT5 so schwer zu schreiben sind, sind nun leicht zu implementieren, so wie sie sein sollten.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Der große und der schreckliche MT4 für immer (oder wie Sie Ihre Migrationsstrategie aufbauen)

Igor Makanu, 2021.05.10 10:28

es scheint zu funktionieren:

#include <Trade\Trade.mqh>
void OnStart()
{
   CTrade Trade;
   while(PositionsTotal() < 10)
   {
      if(OrdersTotal() > 0) continue;
      if(!Trade.Buy(0.01)) continue;
      if(OrdersTotal() == 0 && PositionsTotal() >= 10) return;
   }
}

aber sehr langsam, und die Lösung ist mäßig.

Was passiert, wenn nach dem Auftrag zur Eröffnung der 10. Position bei der nächsten Iteration der

while(PositionsTotal() < 10)

PositionTotal hatte noch keine Zeit, sich zu aktualisieren (=9), und der Auftrag hat es bereits geschafft, in die Historie einzugehen, und OrdersTotal()==0.

Wird es in diesem Fall ein weiteres Trade.Buy() geben?

Theoretisch kann das mehrmals hintereinander passieren?

Oder habe ich etwas übersehen?

 
mktr8591:

Was passiert, wenn nach dem Auftrag zur Eröffnung der 10. Position bei der nächsten Iteration der

PositionTotal hatte noch keine Zeit, sich zu aktualisieren (=9), und der Auftrag hat es bereits geschafft, in die Historie zu gelangen, und OrdersTotal()==0.

Wird es in diesem Fall ein weiteres Trade.Buy() geben?

Theoretisch kann das mehrmals hintereinander passieren?

Oder übersehe ich etwas?

es ist sein hochfrequentes Interesse, der Rest hat genug Auszeiten und kein Problem mit einem zweiten Anlauf

Ich bin sicher, dass es so in MT4 eingebaut ist, abwarten und sehen
 
mktr8591:

Was passiert, wenn nach dem Auftrag zur Eröffnung der 10. Position bei der nächsten Iteration der

PositionTotal hatte noch keine Zeit, sich zu aktualisieren (=9), und der Auftrag hat es bereits geschafft, in die Historie zu gelangen, und OrdersTotal()==0.

Wird es in diesem Fall ein weiteres Trade.Buy() geben?

Natürlich wird es das. Die Argumentation im Code ist genau dieselbe.

Theoretisch kann es mehrere aufeinanderfolgende Iterationen geben?

Wenn Kaufen wahr ist, ist die Wahrscheinlichkeit, dass bei der nächsten Iteration OrdersTotal() == 0 ist, nahezu null. D.h. die Eröffnung von 12 Stellen ist in der Praxis unmöglich.


Dies ist ein sehr primitiver Fall. Eine doppelte Iteration sieht oft wie folgt aus:

  1. Limit OrdersTotal = 1, PositionsTotal = 0.
  2. Begrenzer werden ausgeführt. OrdersTotal = 0, PositionsTotal = 0.
  3. Die Stellen sind geöffnet. OrdersTotal = 0, PositionsTotal = 1.

Im zweiten Schritt sieht der Expert Advisor, dass es nichts gibt und setzt ein Limit. Infolgedessen haben wir zwei offene Stellen.

Der zweite Punkt ist das Überschwingen des MT5. Und jetzt umgeht die Krücke sie.

 

Ich danke Ihnen.

Das ist es:

fxsaber:

Die Verdoppelung ist keine Schwierigkeit des MT5, sondern ein Architekturfehler, wenn die Total()-Funktionen falsch positive Ergebnisse anzeigen.

Sie können sagen, dass es ein Fehler ist, oder Sie können es anders darstellen :-)

PositionsTotal() ist nicht die Anzahl der offenen Positionen, sondern die Größe der Tabelle der offenen Positionen. Die Tabelle der Positionen - ist in der Tat ein Cache, wie der Cache der Geschichte der Geschäfte, nur ist es nicht auf Anfrage aktualisiert, sondern automatisch, aber nicht sofort, und mit einer leichten Verzögerung. Aus diesem Grund darf sie keine bereits geöffneten oder geschlossenen Positionen enthalten.

Dasselbe gilt für OrdersTotal().

Wenn wir die Hilfe auf diese Weise erklären, wird es weniger Fragen, Beschwerden und Missverständnisse geben.

Und im Artikel "Orders, Positions and Trades in MetaTrader 5" können Sie darauf achten (jetzt ist es zweideutig - "Das Ergebnis der Funktion PositionsTotal() hängt nicht davon ab, ob der Positions-Cache voll ist - sie gibt immer die tatsächliche Anzahl der offenen Positionen im Basisterminal für alle Symbole zurück").


P.S. Aber dann stellt sich eine berechtigte Frage: Warum nicht eine Systemfunktion/ein Flag zur Bestimmung des Synchronisationsstatus der Tabellen mit Live-Aufträgen, Positionen, Geschäften und ausgeführten Aufträgen einrichten, um keine Krücken zu schaffen?
 
mktr8591:

P.S. Aber dann stellt sich die berechtigte Frage, warum nicht ein System fi/flag zur Bestimmung des Synchronisationsstatus der Tabellen mit Live-Aufträgen, Positionen, Geschäften und ausgeführten Aufträgen erstellt wird, um keine Krücken zu schaffen.

Höchstwahrscheinlich gibt es im Inneren keine solche Flagge.