Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2402

 
Dmitrii Solovei #:

При изменении в нижеследующем вычислении оператора  с "/" на " * " ,  или " + " ,    или " - "  - все работает.

 

 Кто подскажет в чем причина ?

Деление на ноль не ловите?

 
Aleksey Vyazmikin #:

Деление на ноль не ловите?

В случае с делением на ноль и сам "индикатор" не показывал бы значения, а тут при наложении MA  на "индикатор", он отображает кривую изменения показаний, а MA кажет какую-то дребедень.))

 
Aleksey Vyazmikin #:

Деление на ноль не ловите?

Уважаемый, спасибо! Вы были правы где-то ловил я деление на 0.

Таким макаром вышел с положения:

  double divider = (close[i-iPeriod]-open[i-iPeriod]);

         if(divider != 0)

            calc += (close[i]-open[i])/divider;

 
Dmitrii Solovei #:
Уважаемый, спасибо! Вы были правы где-то ловил я деление на 0.

Рад помочь, успехов!

 

Всем привет. 

Помогите пожалуйста. 

Не понимаю что за глюк. 

Неделю назад все работало нормально. Сейчас в функции подсчета ордеров теряется тикет выбраного ордера

void CountOrders()
  {
   NmbBuy=0;
   NmbSell=0;
   int total=PositionsTotal();
   for(int i=total-1; i>=0; i--)
     {
      ulong tick_select=PositionGetTicket(i); // значение tick_select равно 14 (как нужно)
      if(PositionSelectByTicket(tick_select))
         tick_select=PositionGetInteger(POSITION_TICKET); // значение переменной tick_select равно 14 (как нужно)
      if(PositionGetInteger(POSITION_MAGIC)==Magic)
         tick_select=PositionGetInteger(POSITION_TICKET);// Тикет сохраняется
      if(PositionGetSymbol(POSITION_SYMBOL)==Symbol())
        {
         string select_symbol=PositionGetSymbol(POSITION_SYMBOL);
         tick_select=PositionGetInteger(POSITION_TICKET); // значение переменной tick_select изменилось на 2 (ошибка!!!)
         // далее он работает с не той позицеей и считает ордера неправильно.
         ENUM_POSITION_TYPE type_select=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
         if(type_select==POSITION_TYPE_BUY) // PositionGetInteger(POSITION_TYPE)
            NmbBuy++;
         if(type_select==POSITION_TYPE_SELL) // PositionGetInteger(POSITION_TYPE)
            NmbSell++;
        }
     }
  }
 

Здравствуйте, попробуйте сделать так:

void CountOrders()
  {
   NmbBuy=0;
   NmbSell=0;
   int total=PositionsTotal();
   for(int i=total-1; i>=0; i--)
     {
      PositionGetTicket(i);
      if(PositionGetInteger(POSITION_MAGIC)==Magic && PositionGetString(POSITION_SYMBOL)==Symbol())
        {
         ENUM_POSITION_TYPE type_select=(ENUM_POSITION_TYPE) PositionGetInteger(POSITION_TYPE);
         if(type_select==POSITION_TYPE_BUY)
            NmbBuy++;
         if(type_select==POSITION_TYPE_SELL)
            NmbSell++;
        }
     }
  }

Если вы один раз вызвали PositionGetTicket(i), то для всех последующих вызовов функций получения свойств позиции вы уже осуществили выбор нужной позиции. Другая позиция будет выбрана только на следующей итерации цикла. Поскольку для условий подсчёта вам значение тикета не важно, то можно его не запоминать. Нельзя вызывать функцию PositionGetSymbol(), так как она делает не то, чего вы от неё хотите. Она-то и выбирает вам другую позицию с другим тикетом.

 
Yuriy Bykov #:

Здравствуйте, попробуйте сделать так:

Если вы один раз вызвали PositionGetTicket(i), то для всех последующих вызовов функций получения свойств позиции вы уже осуществили выбор нужной позиции. Другая позиция будет выбрана только на следующей итерации цикла. Поскольку для условий подсчёта вам значение тикета не важно, то можно его не запоминать. Нельзя вызывать функцию PositionGetSymbol(), так как она делает не то, чего вы от неё хотите. Она-то и выбирает вам другую позицию с другим тикетом

Я вам очень благодарен. Теперь понятно, в чем прблема. Еще раз большое спасибо

 
не подключается к демо счету. может кто сталкивался с такой проблемой ? просто перестало подключаться и все. удалил установил , не помогло
 
Sergei Momentum #:
не подключается к демо счету. может кто сталкивался с такой проблемой ? просто перестало подключаться и все. удалил установил , не помогло

MetaQuotes-Demo?
Этот сервер в оснорном используется для апдейта МТ5 на новый билд (например - бета билд), и для бета тесторования билдов.
И для торговли лучше использовать аккаунты (демо например), открытые у брокеров.

Кроме того, демо аккаунты у многих брокеров предоставляются на ограниченное время, и потом опять надо открывать демо аккаунт.
-------------------

Кстати, у меня сейчас МТ5 подключился к MetaQuotes-Demo. Я этот счет открывал месяц назад (прямо с Метатрейдера), и чтобы он не "самоликвидировался" - открыл там позицию по EUR/USD ... но если "самоликвидируется - открою еще раз.

Билд 4272

 
Sergei Momentum #:
не подключается к демо счету. может кто сталкивался с такой проблемой ? просто перестало подключаться и все. удалил установил , не помогло
Долго не заходили на счёт? 
Заведите новый - этот удалён. 
Причина обращения: