Вылетает терминал..

 

Бот чётко работает во всех смыслах этого слова. Добавляю одно единственное условие и после запуска терминал клинит и вылетает. 

Как понять почему? В  логах никакой информации нет.. Вступить в клуб телепатов, раз уже терминал не предоставляет никакой информации почему он не может обработать код бота?

По сути, вот мой код функции OnTradeTransaction():

void OnTradeTransaction(const MqlTradeTransaction& transaction,    // транзакция
                        const MqlTradeRequest& request,            // запрос
                        const MqlTradeResult& result) {            // ответ

//---
  if (prEvent.isOrderTransformToPosition(transaction, sym, g_magic) == DEAL_TYPE_SELL || prEvent.isOrderTransformToPosition(transaction, sym, g_magic) == DEAL_TYPE_BUY) {
    g_curFulfilledNetPrice = transaction.price;
    Print(__FUNCTION__, " : g_curFulfilledNetPrice = ", g_curFulfilledNetPrice);
  }
  
  double priceToBuy = transaction.price + step;
  double priceToSell = transaction.price - step;

  // Установливаем очередной ордер, если предыдущяя позиция, порождённая стоповым ордером, закрыта по тейку
  if (prEvent.isPositionAcquireTP(transaction, sym, g_magic)) {
    if (transaction.deal_type == DEAL_TYPE_BUY) {
      if (prPosInfo.isPriceTooCloseToExistentPosition(sym.getName(), g_magic, POSITION_TYPE_SELL, priceToSell, step))
        putOrder(ORDER_TYPE_SELL_STOP, transaction.price - step);
//      if (prPositionsHandling.info.isPriceTooCloseToExistentPosition(sym.getName(), g_magic, POSITION_TYPE_BUY, transaction.price + step, step))
        putOrder(ORDER_TYPE_BUY_STOP, transaction.price + step);
    } else if (transaction.deal_type == DEAL_TYPE_SELL) {
//      if (prPositionsHandling.info.isPriceTooCloseToExistentPosition(sym.getName(), g_magic, POSITION_TYPE_BUY, transaction.price + step, step))
        putOrder(ORDER_TYPE_BUY_STOP, transaction.price + step);
//      if (prPositionsHandling.info.isPriceTooCloseToExistentPosition(sym.getName(), g_magic, POSITION_TYPE_SELL, transaction.price - step, step))
        putOrder(ORDER_TYPE_SELL_STOP, transaction.price - step);
    }
  }

}

Косяк происходит лишь тогда, когда раскомментирована строка:

if (prPosInfo.isPriceTooCloseToExistentPosition(sym.getName(), g_magic, POSITION_TYPE_SELL, priceToSell, step))

Но этот код уже проверен ни один раз в различных роботах и ни разу не было никаких вопросов. Кроме того, ошибок тоже нет..

Запуск платформы - Для продвинутых пользователей - Начало работы - Справка по MetaTrader 5
  • www.metatrader5.com
По завершении установки в меню "Пуск" создается группа программ торговой платформы, а на рабочем столе дополнительно помещается ярлык...
 

Другие боты подобные норм работают?

Проверяли нагрузку в диспетчере задач после запуска советника? Помониторьте. В оконном режиме, за уголок, уменьшите окно терминала, и также диспетчер задач рядом. Чтобы оба было видно. В окне терминала накиньте советник и посмотрите что выдаст диспетчер задач.

От себя ещё добавлю. Я не кодер какой-то особый. Возможно ли как-то эту строчку иначе прописать. Или весь мини блок, который под фразой "// Установливаем очередной ордер, если предыдущяя позиция, порождённая стоповым ордером, закрыта по тейку" ?

Ещё в самом низу стоит лишняя фигурная } скобка, судя по коду. Может в ней дело?

 
Похоже на обращение к битому указателю. Я правильно понимаю, что 
prPosInfo

является указателем?