Perguntas de um "boneco" - página 216

 
2 Yedelkin, eu disse-te que o Conselheiro Especialista apenas adormece, deixa de trabalhar. A única forma de o acordar é reiniciar o terminal e funciona.

2 sergeev, Em MQL5, quando o relógio pára, significa que adormeceu.

 
Yedelkin: ... E o pensamento volta novamente ao loop infinito como o exemplo mais simples de tratamento explícito de eventos atrasados.

Eis uma pergunta: que função usa para enviar pedidos comerciais?

G001 : 2 Yedelkin, eu disse-lhe que o Conselheiro Especialista simplesmente adormece e deixa de trabalhar. E só acorda ao recarregar o terminal e funciona.

Tudo deve ter uma razão e uma explicação, incluindo o fenómeno que parece "deixar de funcionar" por agora.

 
G001:
2 Yedelkin, eu disse-te que o Conselheiro Especialista apenas adormece, deixa de trabalhar. A única forma de o acordar é reiniciar o terminal e funciona.

2 sergeev, Em MQL5, quando o relógio pára, significa que adormeceu.

Em que evento MQL (que função no seu EA) o "apanha quando adormece" ?
 
Yedelkin:

Esta é uma questão: que função usa para enviar pedidos de comércio?

Deve haver uma razão e uma explicação para tudo, incluindo o fenómeno que até agora parece ter "deixado de funcionar".

//+------------------------------------------------------------------+
//| 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:
Em que evento MQL (que função no seu EA) "apanha-o quando vai dormir" ?

Desculpe, não sei bem o que está a pedir... :(

O relógio está logo a seguir a OnTick()nulo

void OnTick()
{
  Comment("Local Time: "+TimeToString(TimeLocal(),TIME_MINUTES|TIME_SECONDS));
 
sergeev:
Em que evento MQL (que função no seu EA) o "apanha quando adormece" ?
Sim, detecta visualmente que o Conselheiro Especialista "adormeceu". Compara o tempo nos comentários sobre o gráfico com o seu próprio tempo. Não utiliza quaisquer eventos.
 

Qualquer pessoa pode ajudar com uma condição para uma EA?

Quero fazer uma EA que depois de fechar uma posição abra imediatamente a mesma posição com a posição oposta

Por exemplo, estavam abertas apenas 2 posições 1 Vender e 1 Comprar. Um deles está fechado, por exemplo Comprar na TP ou SL , eu gostaria que a EA reabrisse uma posição Comprar e uma nova posição Vender com ele

Existem 2 posições de Venda e 1 posição de Compra

Que alguém possa inventar alguma fórmula que abra uma posição fechada com uma posição oposta.

ou de qualquer outra forma... Já tentei tudo o que sei(((( não funciona :, (

Arquivos anexados:
SellBuY.mq4  3 kb
 
Yedelkin:
Sim, detecta visualmente que o perito "adormeceu". Compara o tempo no comentário do gráfico com o seu tempo de computador. Não utiliza quaisquer eventos.
Certo. Foi esse o meu pedido, como saber programticamente quando a EA deixa de funcionar.
 

G001 ResBear = OrderSend(request,result);

Estou a ver. Utiliza a funçãoOrderSend(). A versão é que o atraso no processamento de eventos OnTick() pela função NewTick() pode ser causado pela falta de resposta do servidor, porque a funçãoOrderSend() deve esperar por esta resposta. Se for interessante, tenteusar a sua cópia assíncrona em vez da funçãoOrderSend() que não espera pela resposta do servidor.Irá fazer com que o Conselheiro Especialista deixe de trabalhar?
 
Yedelkin:
Já está. Está a utilizar a funçãoOrderSend(). A versão é que o atraso pode ser devido à ausência de resposta do servidor, porque a funçãoOrderSend() tem de esperar por esta resposta. Se estiver interessado, tenteusar a sua cópia assíncrona em vez da funçãoOrderSend(), que não espera pela resposta do servidor.Será que também será enforcado neste caso?

Obrigado. Também pensei em utilizar a versão assíncrona, mas não sei se o corretor não irá considerar as transacções. Mas vou tentar.
Razão: