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

 
Ihor Herasko:

OrderSelect() wird innerhalb des Terminals ausgeführt, es erfolgt keine Anfrage an den Server. Es spricht also nichts dagegen, die Liste der Aufträge bei jedem Tick abzurufen. Die meisten Expert Advisors tun dies.

Und Ihre Frage nach dem Array hängt mit der Architektur des Programms zusammen. Im Falle eines komplexen EA, der mit einer großen Anzahl von Aufträgen arbeitet, ist dies absolut notwendig. Wenn der Expert Advisor mit einem einzigen Auftrag mit einfacher Logik arbeitet, ist das Array eine Redundanz.

Es ist nur erwähnenswert, dass wir, auch wenn wir ein Array von Aufträgen haben, immer noch OrderSelect() berücksichtigen müssen. Schließlich müssen wir bei jedem Tick prüfen, ob der Auftrag noch besteht oder nicht. Auch seine Parameter können geändert werden.

Ich danke Ihnen.
 
Rustam Bikbulatov:

Leute, sagt mir, wie ich vorgehen und wo ich anfangen soll!

Beispiel: Ich habe 15 Aufträge mit 0,01 Lot. Irgendwann muss ich einen oder mehrere Abschlüsse mit 0,07 Lotgröße schließen.

Meine Frage ist, wie kann ich 7 Aufträge oder 0,07 in einem OrderClose(...) schließen?

Wenn ich 0,07 auf einmal setze, sieht er keine Geschäfte mit Volumen 0,01.

Ich bin neu im Programmieren.


    int countS = 3;
   if(LastTime!=iTime(NULL,1,0)){
      for(int i=OrdersTotal()-1; i>=0; i--){
       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
        if(OrderSymbol()==Symbol() && OrderMagicNumber()==321){ 
         if(OrderType()==OP_SELL){
           irvb=OrderClose(OrderTicket(),0.01,Ask,3,CLR_NONE);
           LastTime=iTime(NULL,1,0); countS--; if(countS==0)break;   
          }}}}} 

Ich habe einen Tipp erhalten, wie man einen Zähler in Form voncountS erstellen kann.

Es sollten drei Geschäfte von 0,01 Lots pro Minute abgeschlossen werden. Nun stellt sich die Frage, wie man sie umwandeln kann, damit alle Aufträge der Reihe nach berechnet werden.

Wenn wirfor(int i=OrdersTotal()-1; i>=0; i--){ einstellen, werden die letzten Bestellungen der Reihe nach gezählt,

If for(int p=0; p<OrdersTotal(); p++){ dann von der ersten bis zur letzten Bestellung gehen.

Der Zähler funktioniert, aber wenn die Losgröße z. B. 0,15 beträgt, schließt er nicht 0,03 Lose, sondern jede Minute 0,01 Lose.

Was würden Sie empfehlen, hinzuzufügen?

Wie kann ich es ermöglichen, einen Teil des Gesamtloses unabhängig von der Anzahl und Größe der Aufträge zu schließen?
 
Rustam Bikbulatov:


Ein Tipp, wie man einenCountS-Zähler erstellt.

Pro Minute sollten drei Geschäfte zu 0,01 Lots abgeschlossen werden. Jetzt habe ich eine Frage, wie ich es umwandeln kann, damit alle Bestellungen in der Reihenfolge gezählt werden.

Wenn wirfor(int i=OrdersTotal()-1; i>=0; i--){ einstellen, werden die letzten Bestellungen der Reihe nach gezählt,

If for(int p=0; p<OrdersTotal(); p++){ dann von der ersten bis zur letzten Bestellung gehen.

Der Zähler funktioniert, aber wenn die Losgröße z. B. 0,15 beträgt, schließt er nicht 0,03 Lose, sondern jede Minute 0,01 Lose.

Was würden Sie empfehlen, hinzuzufügen?

Wie kann ich es ermöglichen, einen Teil des Gesamtloses unabhängig von der Anzahl und Größe der Aufträge zu schließen?

Bei der Einstellung dieses Problems (übrigens sehr seltsam), müssen Sie mit der Liste der "Account History" arbeiten. Bei jeder neuen Iteration sollten wir diese Liste durchgehen und die Aufträge finden, die in der aktuellen Minute geschlossen wurden, und deren Volumen zusammenzählen. Wenn das Volumen nicht ausreicht, sortieren Sie es nach Bedarf (fragen Sie nicht, wie, das ist Ihre Sache) und nehmen Sie eine einzige Bestellung auf. Schließen Sie sie bei 0,01. Beginnen Sie bei der nächsten Iteration erneut.

 
Ihor Herasko:

Beim Einstellen einer solchen Aufgabe (die übrigens sehr merkwürdig ist) müssen Sie mit der Liste "Kontoverlauf" arbeiten. Gehen Sie bei jeder neuen Iteration durch diese Liste und suchen Sie die Aufträge, die in der laufenden Minute geschlossen wurden, und addieren Sie deren Volumen. Wenn das Volumen nicht ausreicht, sortieren Sie es nach Bedarf (fragen Sie nicht, wie, das ist Ihre Sache) und nehmen Sie eine einzige Bestellung auf. Um es bei 0,01 zu schließen. Bei der nächsten Iteration wieder von vorne.

Ich werde es versuchen! Danke!

 
harbor:
kann den Mailversand nicht über das Terminal konfigurieren
Ich kann es nicht mit myl.ru zum Laufen bringen, aber jetzt habe ich es auf dieselbe Weise konfiguriert und es sendet die Testnachricht nicht.
hat sich jemand damit befasst?

wenn für sich selbst (nicht zum Verkauf), dann ist die richtige Behandlung für Mail-Probleme:

1) einen Mailer auf localhost einrichten, der die Weiterleitung übernimmt, die Zustellung garantiert und nicht mit Autorisierung und Spamschutz herumspielt. Andernfalls werden die EAs sehr schnell auf allen möglichen schwarzen Listen landen.
Das ist nicht schwierig - es gibt ein eingebautes Win-Smtp und kostenlos mit einfachen Einstellungen, in einer Prise können Sie selbst Skript :-)

2) Verwenden Sie eine Alternative zu SendMail() . Zur Kontrolle des gesamten Prozesses, zum Versenden intelligenter Berichte, mit Tags, Flaggen, optional in HTML und mit Bildern.

Wenn man 1+2 kombiniert, erhält man insgesamt 3 :-), es ist also eine vernünftige und stabile Lösung.

mehr über das Versenden von E-Mails : https://www.mql5.com/ru/blogs/post/718364

-----

Wenn Sie Hilfe zu den Besonderheiten von SendMail und der MT-Einrichtung benötigen, dann fügen Sie bitte Screenshots, Quellcode-Auszüge, Fehlerdiagnosen usw. bei.
Es ist also nicht nur ein "unterirdisches Klopfen".

TradeBiff - отправка почты со скриншотами
TradeBiff - отправка почты со скриншотами
  • 2018.05.19
  • Maxim Kuznetsov
  • www.mql5.com
Очень важно получать детальные оповещения о действиях любого робота. Универсальный способ оповещений - это отправка почты. TradeBiff будет следить за изменениями и отправлять вам необходимые отчёты. Таким образом у вас в почтовом ящике получится хороший торговый журнал. Постановка задачи Ставим себя на место заказчика и формулируем задачу...
 
Verstehe ich das richtig, dass"TimeCurrent()" die Zeit des letzten Ticks zurückgibt, wenn es von einer Benutzerfunktion aufgerufen wird?
 
Asa saas:
Verstehe ich das richtig, dass "TimeCurrent()" die Zeit des letzten Ticks zurückgibt, wenn es von einer Benutzerfunktion aufgerufen wird?

Ja

 

Grüße!


Ein Auftrag kann mit dem BefehlOrderSelect über seine Nummer aufgerufen werden.

Frage: Ist es möglich, die Anzahl der vorhandenen Aufträge im Voraus zu kennen, um nicht alle Aufträge durchzugehen? Wir können uns diese Nummer zum Beispiel merken, wenn wir einen neuen Auftrag eröffnen.

Mir ist bekannt, dass diese Nummer in der Reihenfolge von 1 an vergeben wird. Was sind die möglichen Nuancen?

Ich danke Ihnen vielmals.

 
Decromor:

Grüße!


Ein Auftrag kann mit dem Befehl OrderSelect über seine Nummer aufgerufen werden.

Frage: Ist es möglich, die Anzahl der vorhandenen Aufträge im Voraus zu kennen, um nicht alle Aufträge durchzugehen? Wir können uns diese Nummer zum Beispiel merken, wenn wir einen neuen Auftrag eröffnen.

Mir ist bekannt, dass diese Nummer in der Reihenfolge von 1 an vergeben wird. Was sind die möglichen Nuancen?

Ich danke Ihnen vielmals.

BestellungSenden
BestellungAuswählen

 

Mein Gehirn ist kaputt, Hilfe bitte!

Ich habe eine Korrelationsberechnungseinheit geschrieben. Aber OANDA und investing.com liefern völlig unterschiedliche Ergebnisse! Komisch, sie passen auch nicht zueinander!

Wo liege ich falsch?


Das aktuelle Währungspaar - EURUSD, ich prüfe die Korrelation mit GBPUSD.


externer String SubSymbol = "GBPUSD";

extern int correlation_time = 24; // wie viele Stunden die Korrelation der ausgewählten Währungspaare geprüft werden soll

.....

------------------------ Block der Korrelationsberechnung --------------------------------------

int period = 15;

int bars_number = MathRound(correlation_time*60/period);

double symbol_avg = 0;

double symbol_avg = 0;

double symbol_price[], double subsymbol_price[];

double x,y;

int j;

int shift = 0;

ArrayResize(symbol_price, bars_number);

ArrayResize(subsymbol_price, bars_number);

for (j=0; j < Balken_Anzahl; j++)

{

symbol_price[j] = (iHigh(NULL,period,j+shift) - iLow(NULL,period,j+shift))/2;

subsymbol_price[j] = (iHigh(SubSymbol,period,j+shift) - iLow(SubSymbol,period,j+shift))/2;

symbol_avg = symbol_avg + symbol_price[j];

subsymbol_avg = subsymbol_avg + subsymbol_price[j];

}

symbol_avg = symbol_avg/bars_number;

subsymbol_avg = subsymbol_avg/bars_number;

double ss_xx = 0;

double ss_xy = 0;

double ss_yy = 0;

for (j=0; j < Balken_Anzahl; j++)

{

x = symbol_price[j] - symbol_avg;

y = subsymbol_price[j] - subsymbol_avg;

ss_xy = ss_xy + x*y;

ss_xx = ss_xx + x*x;

ss_yyy = ss_yy + y*y;

}

double correlation = ss_xy/MathSqrt(ss_xx*ss_yyy);

Alert(Korrelation, " ", bars_number);

ArrayFree(symbol_price);

ArrayFree(subsymbol_price);

// ------------------------ Ende des Korrelationsberechnungsblocks ---------------------------------

Grund der Beschwerde: