Questions d'un "mannequin - page 216

 
2 Yedelkin, je vous ai dit que l'EA s'endort et arrête de fonctionner. La seule façon de le réveiller est de redémarrer le terminal et ça marche.

2 sergeev, Dans MQL5, quand l'horloge s'arrête, cela signifie qu'elle s'est endormie.

 
Yedelkin: ... Et la pensée revient à la boucle infinie comme l'exemple le plus simple de traitement explicite d'événements retardés.

Voici une question : quelle fonction utilisez-vous pour envoyer des demandes d'échange?

G001 : 2 Yedelkin, je vous ai dit que le conseiller expert s'endort tout simplement et cesse de fonctionner. Et il ne se réveille qu'en rechargeant le terminal et ça marche.

Tout doit avoir une raison et une explication, y compris le phénomène qui semble "ne plus fonctionner" pour l'instant.

 
G001:
2 Yedelkin, je vous ai dit que le conseiller expert s'endort, cesse de fonctionner. La seule façon de le réveiller est de redémarrer le terminal et ça marche.

2 sergeev, Dans MQL5, quand l'horloge s'arrête, cela signifie qu'elle s'est endormie.

Dans quel événement MQL (quelle fonction dans votre EA) faites-vous "l'attraper quand il s'endort" ?
 
Yedelkin:

Il s'agit d'une question : quelle fonction utilisez-vous pour envoyer des demandes d'échange?

Il doit y avoir une raison et une explication à tout, y compris au phénomène qui, jusqu'à présent, semble avoir "cessé de fonctionner".

//+------------------------------------------------------------------+
//| 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:
Dans quel événement MQL (quelle fonction dans votre EA) faites-vous "l'attraper quand il se met en veille" ?

Désolé, je ne sais pas vraiment ce que vous demandez... :(

L'horloge est juste aprèsvoid OnTick()

void OnTick()
{
  Comment("Local Time: "+TimeToString(TimeLocal(),TIME_MINUTES|TIME_SECONDS));
 
sergeev:
Dans quel événement MQL (quelle fonction dans votre EA) faites-vous "l'attraper quand il s'endort" ?
Oui, il détecte visuellement que le conseiller expert s'est "endormi". Il compare l'heure des commentaires sur le graphique avec sa propre heure. Il n'utilise pas d'événements.
 

Quelqu'un peut-il m'aider à trouver une condition pour un EA ?

Je veux créer un EA qui, après avoir fermé une position, ouvre immédiatement la même position avec la position opposée.

Par exemple, il n'y avait que 2 positions ouvertes, 1 vente et 1 achat. L'une d'entre elles est fermée, par exemple Achat au TP ou SL, je voudrais que l'EA rouvre une position d'Achat et une nouvelle position de Vente avec elle.

Il y a 2 positions de vente et 1 position d'achat

Que quelqu'un trouve une formule qui permette d'ouvrir une position fermée avec une position opposée.

ou tout autre moyen... J'ai essayé tout ce que je sais(((( ne fonctionne pas :, (

Dossiers :
SellBuY.mq4  3 kb
 
Yedelkin:
Oui, il détecte visuellement que l'expert s'est "endormi". Il compare l'heure du commentaire sur le graphique avec l'heure de son ordinateur. Il n'utilise pas d'événements.
Bien. C'était ma demande, comment savoir par programme quand l'EA cesse de fonctionner.
 

G001 ResBear = OrderSend(request,result);

Je l'ai. Vous utilisez la fonctionOrderSend(). La version est que le retard dans le traitement de l'événement OnTick() par la fonction NewTick( ) peut être causé par l'absence de réponse du serveur, car la fonctionOrderSend() doit attendre cette réponse. Si cela est intéressant, essayez d'utiliser sa copie asynchrone au lieu de la fonctionOrderSend() qui n'attend pas la réponse du serveur. Le conseiller expert cessera-t-il de fonctionner ?
 
Yedelkin:
Je l'ai. Vous utilisez la fonctionOrderSend(). La version est que le retard peut être dû à l'absence de réponse du serveur, car la fonctionOrderSend() doit attendre cette réponse. Si vous êtes intéressé, essayez d'utiliser sa copie asynchrone au lieu de la fonctionOrderSend(), qui n'attend pas la réponse du serveur.Est-ce qu'il sera accroché dans ce cas aussi ?

Merci. J'ai également pensé à utiliser la version asynchrone, mais je ne sais pas si le courtier ne prendra pas en compte les transactions. Mais je vais essayer.