Domande da un "manichino" - pagina 216

 
2 Yedelkin, ti ho detto che l'EA si addormenta e smette di funzionare. L'unico modo per svegliarlo è riavviare il terminale e funziona.

2 sergeev, In MQL5, quando l'orologio si ferma, significa che si è addormentato.

 
Yedelkin: ...E il pensiero torna di nuovo al ciclo infinito come l'esempio più semplice di gestione esplicita di eventi ritardati.

Ecco una domanda: quale funzione usate per inviare richieste di scambio?

G001 : 2 Yedelkin, ti ho detto che l'Expert Advisor semplicemente si addormenta e smette di funzionare. E si sveglia solo ricaricando il terminale e funziona.

Tutto deve avere una ragione e una spiegazione, compreso il fenomeno che sembra "smettere di funzionare" per ora.

 
G001:
2 Yedelkin, ti ho detto che l'Expert Advisor si addormenta, smette di funzionare. L'unico modo per svegliarlo è riavviare il terminale e funziona.

2 sergeev, In MQL5, quando l'orologio si ferma, significa che si è addormentato.

In quale evento MQL (quale funzione nel tuo EA) lo "catturi quando si addormenta"?
 
Yedelkin:

Questa è una domanda: che funzione usate per inviare richieste commerciali?

Ci deve essere una ragione e una spiegazione per tutto, compreso il fenomeno che finora sembra aver "smesso di funzionare".

//+------------------------------------------------------------------+
//| 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 quale evento MQL (quale funzione nel tuo EA) lo "catturi quando va a dormire"?

Scusa, non so davvero cosa stai chiedendo... :(

L'orologio è subito dopovoid OnTick()

void OnTick()
{
  Comment("Local Time: "+TimeToString(TimeLocal(),TIME_MINUTES|TIME_SECONDS));
 
sergeev:
In quale evento MQL (quale funzione nel tuo EA) lo "catturi quando si addormenta"?
Sì, rileva visivamente che l'Expert Advisor si è "addormentato". Confronta il tempo nei commenti sul grafico con il proprio tempo. Non utilizza alcun evento.
 

Qualcuno può aiutare con una condizione per un EA?

Voglio fare un EA che dopo aver chiuso una posizione apra immediatamente la stessa posizione con la posizione opposta

Per esempio, c'erano aperte solo 2 posizioni 1 Sell e 1 Buy. Uno di loro è chiuso, ad esempio comprare a TP o SL, vorrei che l'EA riaprisse una posizione di acquisto e una nuova posizione di vendita con essa

Ci sono 2 posizioni Sell e 1 posizione Buy

Che qualcuno trovi una formula che apra una posizione chiusa con una opposta.

o qualsiasi altro modo... Ho provato tutto quello che so(((( non funziona :, (

File:
SellBuY.mq4  3 kb
 
Yedelkin:
Sì, rileva visivamente che l'esperto si è "addormentato". Confronta l'ora del commento sul grafico con l'ora del suo computer. Non utilizza alcun evento.
Giusto. Questa era la mia richiesta, come scoprire programmaticamente quando l'EA smette di funzionare.
 

G001 ResBear = OrderSend(request,result);

Capito. Si usa la funzioneOrderSend(). La versione è che il ritardo nell'elaborazione dell'evento OnTick() da parte della funzione NewTick( ) può essere causato dalla mancanza di risposta del server, perché la funzioneOrderSend() deve aspettare questa risposta. Se è interessante, provate ausare la sua copia asincrona invece della funzioneOrderSend() che non aspetta la risposta del server.Questo farà sì che l'Expert Advisor smetta di funzionare?
 
Yedelkin:
Capito. State usando la funzioneOrderSend(). La versione è che il ritardo può essere dovuto alla mancata risposta del server, perché la funzioneOrderSend() deve aspettare questa risposta. Se siete interessati, provate ausare la sua copia asincrona invece della funzioneOrderSend(), che non aspetta la risposta del server.Sarà appeso anche in questo caso?

Grazie. Ho anche pensato di usare la versione asincrona, ma non so se il broker non prenderà in considerazione gli scambi. Ma ci proverò.