Nützliche Funktionen von KimIV - Seite 74

 
allarkoms писал(а) >>

Hallo Igor!

Ich versuche, MQL4 zu lernen, und aufgrund der fehlenden Beschreibung der Sprachoperatoren hat mich ein Problem ratlos zurückgelassen. Ich habe einen Indikator mit 8 Puffern mit akkumulierten Daten, der mit der Periode des nächsten Zeitrahmens zu einem von mir gewählten Zeitrahmen angezeigt werden soll. Zu diesem Zweck verwendet sie den Operator iCustom(). Aber es gibt einen doppelten Wert zurück und ich weiß nicht, wie und ob iCustom in diesem Fall verwendet werden kann und sollte.

Ich hoffe wirklich auf Ihre Hilfe.

Hallo, Alexey!

Sie sollten einen neuen Indikator erstellen, der die Funktion iCustom() verwendet. Weisen Sie die von dieser Funktion zurückgegebenen Werte den Puffern des neuen Indikators zu.

 
ProfitTrader писал(а) >>

Hallo Igor und guten Tag an alle!

Ich interessiere mich für den Code, der eingegeben werden sollte, damit der Expert Advisor keine weiteren Geschäfte an diesem Tag tätigt, wenn er ein Geschäft schließt...

Ich habe es gefunden, aber es funktioniert nicht in der Strategie-Tester, ich möchte es zu testen, welchen Code sollte ich stattdessen verwenden?

Dann sollte ich es in die Eingabebedingung aufnehmen.

Hallo, Sergiy!

Ich sehe nicht einmal, warum die von Ihnen angegebene Verwendung meiner Funktion im Strategietester nicht funktionieren kann. Wenn es für Sie noch relevant ist, schlage ich vor, dass Sie den gesamten Code des EA posten. Versuchen wir, es herauszufinden...

 

Es gibt Fragen zu den Unterschieden und Besonderheiten der Funktionen SetOrder() und OpenPosition() bei der Fehlerbehandlung.


SetOrder():

      if ( err==8 || err==141) Sleep(1000*100);
      if ( err!=135 && err!=138) Sleep(1000*7.7);
      if ( err==139 || err==140 || err==148) break;

OpenPositions(): Die Fehler 8 (ERR_TOO_FREQUENT_REQUESTS), 138 (ERR_REQUOTE) und 139 (ERR_ORDER_LOCKED) werden im Gegensatz zu SetOrder() nicht behandelt:

      if ( err==141) Sleep(1000*100);
      if ( err!=135) Sleep(1000*7.7);
      if ( err==140 || err==148 || err==4110 || err==4111) break;

In SetOrder() wird der Fehler 130 (ERR_INVALID_STOPS) durch die Stop-Korrektur behandelt, aber in OpenPositions() wird er in keiner Weise behandelt.

In der OpenPositions()-Verarbeitung ist 145 (ERR_TRADE_MODIFY_DENIED) vorhanden. Der Sinn der Verarbeitung ist hier nicht klar.

Außerdem wird auf der ersten Seite dieser Diskussion die Fehlerbehandlung erwähnt, die in beiden Funktionen fehlt:

KimIV >>:

На паузу 7.7 секунды нарвутся ошибки 129 (Неправильная цена bid или ask), 130 (Неправильные стопы), 134 (Недостаточно денег), 136 (Нет цен).

Außerdem werden andere (in diesem Fall wahrscheinlich wichtige) Fehler nicht verarbeitet, zum Beispiel 3 (ERR_INVALID_TRADE_PARAMETERS), 6 (ERR_NO_CONNECTION), 7 (ERR_NOT_ENOUGH_RIGHTS), 9 ERR_MALFUNCTIONAL_TRADE, 137 (ERR_BROKER_BUSY), 144(!), 4067 (ERR_TRADE_ERROR), 4106 (ERR_UNKNOWN_SYMBOL), 4107 (ERR_INVALID_PRICE_PARAM)


Igor, bitte kommentieren Sie die beschriebenen Punkte.

Die Funktionen SetOrder() und OpenPositions(), die ich erwähnt habe, stammen aus der Bibliothek b-Orders vom 05.11.2008 und b-Positions vom 29.10.2008 von der Website kimiv.ru.


Ich möchte noch etwas hinzufügen. Wenn der Fehler 5 ERR_OLD_VERSION auftritt, kann er wie 2, 64, 65, 133 behandelt werden; 4109 ERR_TRADE_NOT_ALLOWED wie 4110, 4111

 
Was bedeutet der Fehler 142? Ich konnte es nicht in den Fehlercodes finden. Ich würde auch gerne wissen, ob es möglich ist, die Verzögerungen für den Pipsator irgendwo zu reduzieren?
 
khorosh >> :
Was bedeutet der Fehler 142? Ich habe es nicht in den Fehlercodes gefunden.

https://docs.mql4.com/ru/trading/errors

142 Ein Auftrag wurde in die Warteschlange gestellt. Dabei handelt es sich nicht um einen Fehler, sondern um einen der Kommunikationscodes zwischen dem Kundenterminal und dem Handelsserver. Dieser Code kann in einem seltenen Fall empfangen werden, wenn während der Durchführung des Handelsvorgangs eine Unterbrechung der Verbindung auftrat und die Verbindung danach wiederhergestellt wurde. Er ist genauso zu behandeln wie der Fehler 128.

 
Здравствуйте Игорь! И всем Добрый день!

Ich interessiere mich für eine Frage zu GEPs, die in dem Buch nicht beschrieben werden, und es gibt viel Neues zu diesem Thema. Ich würde gerne wissen, wie ich einen Handel jedes Mal öffnen kann, wenn ein GEP erscheint. Ich möchte wissen, wie ich Aufträge eröffnen kann, wenn GEP erscheint. Ich habe es, aber aus irgendeinem Grund dieser Algorithmus nicht funktionieren, was ist der Fehler hier?

extern int     Magic                = 777;
extern int       TP                 = 6;
extern int       SL                 = 2;
extern double  Lots                 = 0.01;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
if(  iClose(NULL,0,1)>iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>1*Point )
   { //покупаем
  OrderSend(Symbol(),OP_BUY, Lots,Ask,2,Bid- SL*Point,Bid+ TP*Point,
                                               NULL, Magic,0,CLR_NONE);}
                                                  
if(  iClose(NULL,0,1)<iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>1*Point )
   { //продаем
 OrderSend(Symbol(),OP_SELL, Lots,Bid,2,Ask+ SL*Point,Ask- TP*Point,
                                              NULL, Magic,0,CLR_NONE);}

   return(0);
  }
//+------------------------------------------------------------------+
 
Bei der ersten Bedingung ist die erste Unterbedingung überflüssig, die zweite Bedingung für den Verkauf ist überhaupt nicht machbar. Ist ein Punkt eine Lücke? Sie haben einen Slippage von 2 und einen Stop von 2, es könnte Überschneidungen geben.
 
Roger >> :
Bei der ersten Bedingung ist die erste Unterbedingung überflüssig, die zweite Bedingung für den Verkauf ist unmöglich. Ist ein Punkt eine Lücke? Ihr Slippage ist 2 und der Stop ist 2.

Danke, aber warum ist das erste Vorwort überflüssig? Sie möchten, dass eine Kaufposition eröffnet wird, wenn ein neuer Balken über dem Schlusskurs des vorherigen Balkens liegt und umgekehrt. >> Ist das der richtige Weg?

if(  iClose(NULL,0,1)<iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>2*Point )
   { //покупаем
  OrderSend(Symbol(),OP_BUY, Lots,Ask,2,Bid- SL*Point,Bid+ TP*Point,
                                               NULL, Magic,0,CLR_NONE);}
                                                  
if(  iClose(NULL,0,1)>iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>2*Point )
   { //продаем
 OrderSend(Symbol(),OP_SELL, Lots,Bid,2,Ask+ SL*Point,Ask- TP*Point,
                                              NULL, Magic,0,CLR_NONE);}
 
Das ist richtig
if(  iClose(NULL,0,1)-iOpen(NULL,0,0)>10*Point )
   { //покупаем
  OrderSend(Symbol(),OP_BUY, Lots,Ask,2,Bid- SL*Point,Bid+ TP*Point,
                                               NULL, Magic,0,CLR_NONE);}
                                                  
if( iOpen(NULL,0,0)- iClose(NULL,0,1)>10*Point )
   { //продаем
OrderSend(Symbol(),OP_SELL, Lots,Bid,2,Ask+ SL*Point,Ask- TP*Point,
                                              NULL, Magic,0,CLR_NONE);}
 
Roger >> :
>> Das ist richtig.

Soweit ich weiß, setzt die erste Bedingung automatisch voraus, dass der Schlusskurs größer ist als der Eröffnungskurs. Im zweiten Fall ist es genau umgekehrt??????