Fragen von einem "Dummy" - Seite 216

 
2 Yedelkin, ich habe Ihnen gesagt, dass der Expert Advisor einfach einschläft und nicht mehr funktioniert. Die einzige Möglichkeit, es wieder aufzuwecken, ist ein Neustart des Terminals, und es funktioniert.

2 sergeev, In MQL5, wenn die Uhr anhält, bedeutet es, dass sie eingeschlafen ist.

 
Yedelkin: Und der Gedanke kommt wieder auf die Endlosschleife zurück, die das einfachste Beispiel für eine explizit verzögerte Ereignisbehandlung ist.

Ich habe eine Frage: Welche Funktion verwenden Sie, um Handelsanfragen zu senden?

G001 : 2 Yedelkin, ich habe Ihnen gesagt, dass der Expert Advisor einfach einschläft und nicht mehr funktioniert. Und es wacht nur auf, wenn das Terminal neu geladen wird, und es funktioniert.

Für alles muss es einen Grund und eine Erklärung geben, auch für das Phänomen, das im Moment nicht zu funktionieren scheint.

 
G001:
2 Yedelkin, ich habe Ihnen gesagt, dass der Expert Advisor einfach einschläft und nicht mehr funktioniert. Die einzige Möglichkeit, es wieder aufzuwecken, ist ein Neustart des Terminals, und es funktioniert.

2 sergeev, In MQL5, wenn die Uhr anhält, bedeutet es, dass sie eingeschlafen ist.

In welcher MQL-Ereignis (welche Funktion in Ihrem EA) tun Sie "fangen es, wenn es einschläft" ?
 
Yedelkin:

Eine Frage: Welche Funktion verwenden Sie, um Handelsanfragen zu senden?

Es muss für alles einen Grund und eine Erklärung geben, auch für das Phänomen, das bisher "nicht mehr zu funktionieren scheint".

//+------------------------------------------------------------------+
//| Open Orders                                                      |
//+------------------------------------------------------------------+
// Perform analysis and open orders on new candle/bar 
  if((TradeNewBar != true)||(IsNewBar() == true))
  {
//----- Open BUY_STOP
    if(TrendDetection() == BULL && TotalBullStopOrders() < 1 && TotalBullPositions() < 1)
    {
      request.action = TRADE_ACTION_PENDING;
      request.magic = Magic;
      request.symbol = Symbol();
      request.volume = Volume();
      request.price=NormalizeDouble(Ask+OrderDrive*_Point,_Digits);
      request.sl = NormalizeDouble(request.price - StopLoss*_Point,_Digits);
      request.tp = NormalizeDouble(request.price + TakeProfit*_Point,_Digits);
      request.type=ORDER_TYPE_BUY_STOP;
      request.type_filling=ORDER_FILLING_RETURN;
      request.comment=Coments;
      int ResBull = -1;
      while(ResBull < 1)
      {
        if(OrderCheck(request,check))
        {
          ResBull = OrderSend(request,result);
        }
        if((MQL5InfoInteger(MQL5_TESTING)||MQL5InfoInteger(MQL5_OPTIMIZATION)))break;
      }
      Print("BuyStop Order Set ");
      if(UseSound == true){PlaySound(OrderSound);}
      Print(ResultRetcodeDescription(result.retcode));
    }
//----- Open SELL_STOP
    if(TrendDetection() == BEAR && TotalBearStopOrders() < 1 && TotalBearPositions() < 1)
    {
      request.action = TRADE_ACTION_PENDING;
      request.magic = Magic;
      request.symbol = Symbol();
      request.volume = Volume();
      request.price=NormalizeDouble(Bid-OrderDrive*_Point,_Digits);
      request.sl = NormalizeDouble(request.price + StopLoss*_Point,_Digits);
      request.tp = NormalizeDouble(request.price - TakeProfit*_Point,_Digits);
      request.type=ORDER_TYPE_SELL_STOP;
      request.type_filling=ORDER_FILLING_RETURN;
      request.comment=Coments;
      int ResBear = -1;
      while(ResBear < 1)
      {
        if(OrderCheck(request,check))
        {
          ResBear = OrderSend(request,result);
        }
        if((MQL5InfoInteger(MQL5_TESTING)||MQL5InfoInteger(MQL5_OPTIMIZATION)))break;
      }
      Print("SellStop Order Set ");
      if(UseSound == true){PlaySound(OrderSound);}
      Print(ResultRetcodeDescription(result.retcode));                             
    }
  }
 
sergeev:
In welcher MQL-Ereignis (welche Funktion in Ihrem EA) tun Sie "fangen es, wenn es schlafen geht"?

Tut mir leid, ich weiß nicht wirklich, was Sie fragen... :(

Die Uhr steht direkt nachvoid OnTick()

void OnTick()
{
  Comment("Local Time: "+TimeToString(TimeLocal(),TIME_MINUTES|TIME_SECONDS));
 
sergeev:
In welcher MQL-Ereignis (welche Funktion in Ihrem EA) tun Sie "fangen es, wenn es einschläft" ?
Ja, er erkennt visuell, dass der Expert Advisor "eingeschlafen" ist. Er vergleicht die Zeit in den Kommentaren auf dem Diagramm mit seiner eigenen Zeit. Es werden keine Ereignisse verwendet.
 

Kann jemand mit einer Bedingung für einen EA helfen?

Ich möchte ein EA, dass nach dem Schließen einer Position würde es sofort öffnen Sie die gleiche Position mit der entgegengesetzten Position zu machen

Es waren zum Beispiel nur 2 Positionen offen, 1 Verkauf und 1 Kauf. Einer von ihnen ist geschlossen, z.B. Buy at TP oder SL, ich möchte, dass der EA eine Buy-Position und eine neue Sell-Position damit wieder öffnet

Es gibt 2 Verkaufspositionen und 1 Kaufposition

Kann jemand eine Formel finden, mit der eine geschlossene Position durch eine entgegengesetzte geöffnet wird?

oder eine andere Möglichkeit... Ich habe alles versucht, was ich weiß(((( funktioniert nicht :, (

Dateien:
SellBuY.mq4  3 kb
 
Yedelkin:
Ja, es erkennt visuell, dass der Experte "eingeschlafen" ist. Es vergleicht die Zeit in den Kommentaren auf dem Diagramm mit seiner Computerzeit. Es werden keine Ereignisse verwendet.
Richtig. Das war meine Frage, wie man programmatisch herausfinden kann, wann der EA nicht mehr funktioniert.
 

G001 ResBear = OrderSend(request,result);

Ich hab's. Sie verwenden die FunktionOrderSend(). Die Version ist, dass die Verzögerung bei der Verarbeitung des OnTick()-Ereignisses durch die NewTick( )-Funktion durch das Ausbleiben der Antwort des Servers verursacht werden kann, da dieOrderSend()-Funktion auf diese Antwort warten muss. Bei Interesse sollten Sie dieasynchrone Kopie anstelle der FunktionOrderSend() verwenden, die nicht auf die Antwort des Servers wartet. Wird dies dazu führen, dass der Expert Advisor nicht mehr funktioniert?
 
Yedelkin:
Ich hab's. Sie verwenden die FunktionOrderSend(). Die Version ist, dass die Verzögerung darauf zurückzuführen sein kann, dass der Server nicht antwortet, weil die FunktionOrderSend() auf diese Antwort warten muss. Wenn Sie daran interessiert sind, versuchen Sie, dieasynchrone Kopie anstelle der FunktionOrderSend() zu verwenden, die nicht auf die Antwort des Servers wartet.Wird es auch in diesem Fall hängen?

Ich danke Ihnen. Ich habe auch daran gedacht, die asynchrone Version zu verwenden, aber ich weiß nicht, ob der Broker die Geschäfte nicht berücksichtigen wird. Aber ich werde es versuchen.
Grund der Beschwerde: