Вопросы от "чайника" - страница 216

 
2 Yedelkin, Я же говорил, что советник просто засыпает, перестает работать. Получается его разбудить только перезагрузкой терминала, и это работает.

2 sergeev, В MQL5, когда часы останавливаются, значит заснул.

 
Yedelkin: ..И мысль опять возвращается к бесконечному циклу как к самому простому примеру явной задержки обработки события.

Вот такой вопрос возник: а с помощью какой функции отправляете торговые запросы

G001: 2 Yedelkin, Я же говорил, что советник просто засыпает, перестает работать. Получается его разбудить только перезагрузкой терминала, и это работает.

Всему должна быть причина и объяснение. В том числе и тому явлению, которое пока кажется как "перестаёт работать". 

 
G001:
2 Yedelkin, Я же говорил, что советник просто засыпает, перестает работать. Получается его разбудить только перезагрузкой терминала, и это работает.

2 sergeev, В MQL5, когда часы останавливаются, значит заснул.

В каклм MQL-смобытии (в какой функции в вашем эксперта)  вы "ловите его когда засыпает"  ??
 
Yedelkin:

Вот такой вопрос возник: а с помощью какой функции отправляете торговые запросы

Всему должна быть причина и объяснение. В том числе и тому явлению, которое пока кажется как "перестаёт работать".  

//+------------------------------------------------------------------+
//| 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:
В каклм MQL-смобытии (в какой функции в вашем эксперта)  вы "ловите его когда засыпает"  ??

Извините не очень понимаю о чем Вы спрашиваете.. :(

Часы стоят сразу после void OnTick()

void OnTick()
{
  Comment("Local Time: "+TimeToString(TimeLocal(),TIME_MINUTES|TIME_SECONDS));
 
sergeev:
В каклм MQL-смобытии (в какой функции в вашем эксперта)  вы "ловите его когда засыпает"  ??
Да он визуально определяет, что эксперт" уснул". Сравнивает время в комментарии на графике и  время своего компа. Никаких событий не использует.
 

Может кто помоч с условием для советника? 

Хочу заставить советника что бы после закрытия позиции  он сразу открыл такую же позицию с противоположной позицией 

Например было открыто всего 2 позиции 1 Sell и 1 Buy.       закрылась  одна из них например Buy  по TP или  SL ,  хочу что бы советник открыл заного позицию Buy и с ней новую Sell 

Получается 2 позиции Sell 1  позиция Buy 

 

Может кто придумает какую нибудь  формулу по которой будит открыватся закрытая сделка, с противоположной.

или ещё какой есть способ.. я уже всё перепробовал что знал(((( не получается :, ( 

Файлы:
SellBuY.mq4  3 kb
 
Yedelkin:
Да он визуально определяет, что эксперт" уснул". Сравнивает время в комментарии на графике и  время своего компа. Никаких событий не использует.
Правильно. В этом и заключалась моя просьба, как программно узнать когда советник перестает работать.
 

G001ResBear = OrderSend(request,result);

Понятно. Используете функцию OrderSend(). Версия такая появилась, что задержка в обработке функцией OnTick() события NewTick может быть связана с отсутствием ответа сервера, ведь функция OrderSend() должна дожидаться этого ответа. Если интересно, попробуйте вместо функции OrderSend() использовать её асинхронную копию, которая ответа от сервера не дожидается. Будет ли и в этом случае подвисать работа эксперта?
 
Yedelkin:
Понятно. Используете функцию OrderSend(). Версия такая появилась, что задержка может быть связана с отсутствием ответа сервера, ведь функция OrderSend() должна дожидаться этого ответа. Если интересно, попробуйте вместо функции OrderSend() использовать её асинхронную копию, которая ответа от сервера не ждёт. Будет ли и в этом случае подвисать работа эксперта?

Спасибо. Тоже думал использовать асинхронный вариант, но не знаю если брокер не засчитает сделки. Но попробую.