Ошибки, баги, вопросы - страница 2853

 

Добрый всем день. Помогите решить следующую проблему. 

На виртуальной машине стоит два терминала МТ5. Один работает с брокером А, другой с брокером Б. На обоих терминалах работает один и тот же бот. Все было отлично до вчерашнего дня, пока не обновился до версии  2615.

Терминал работающий с брокером А как работал так и работает, а вот терминал с брокером Б стал работать с зависанием. То есть после запуска работает какое то время нормально, потом зависает. В логах после зависания следующая запись:

PJ      1       11:18:36.886    Network '67003410': connection to RoboForex-ECN lost
MP      0       11:18:37.656    Network '67003410': authorized on RoboForex-ECN through Europe #2 (ping: 98.08 ms, build 2560)
RN      0       11:18:37.656    Network '67003410': previous successful authorization performed from 91.217.110.2 on 2020.09.22 07:16:34
DR      0       11:18:37.768    Network '67003410': terminal synchronized with RoboMarkets Ltd: 2 positions, 0 orders, 121 symbols, 0 spreads
IM      0       11:18:37.768    Network '67003410': trading has been enabled - hedging mode
EK      1       11:20:38.099    Network '67003410': connection to RoboForex-ECN lost
ES      0       11:20:38.674    Network '67003410': authorized on RoboForex-ECN through Europe #2 (ping: 98.08 ms, build 2560)
FQ      0       11:20:38.674    Network '67003410': previous successful authorization performed from 91.217.110.2 on 2020.09.22 07:18:36
FM      0       11:20:38.784    Network '67003410': terminal synchronized with RoboMarkets Ltd: 2 positions, 0 orders, 121 symbols, 0 spreads
GR      0       11:20:38.784    Network '67003410': trading has been enabled - hedging mode
OH      1       11:22:39.328    Network '67003410': connection to RoboForex-ECN lost
CR      3       11:22:55.243    NetDispatcher   thread timeout reached possible deadlock [15]


 

почему возникает ошибка компиляции?

int j = 1e3;         // OK
if(j % 1000 == 0);   // OK
if(j % 1e3 == 0);    // '%' - illegal operation use
 
Igor Makanu:

почему возникает ошибка компиляции?

double

 
Vladimir Simakov:

double

ОК.  спасибо 

проверил, так и есть

Print(typename(1e3)); //        double
 
Выпустили бету 2617 с экспериментальными поправками работы с историей чартов в MQL5.
 
ЛС на сайте снова не пашут.
 

Подскажите, разработчики терминала Метатрейдер 5 сломали в последнем обновлении индикаторные буферы? Или это у меня уже что-то с головой?

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

Помогает только полный пересчет индикатора на новом баре.


//+------------------------------------------------------------------+
//|                                                   test_arrow.mq5 |
//|                                               Efremov Konstantin |
//|                          https://www.mql5.com/ru/users/leonardo4 |
//+------------------------------------------------------------------+
#property copyright "Efremov Konstantin"
#property link      "https://www.mql5.com/ru/users/leonardo4"
#property version   "1.00"
#property indicator_chart_window
//--- init indicator buffers
#property indicator_buffers 1
#property indicator_plots   1

#property indicator_label1  "Arrows"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrLawnGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

input int      History  = 10;             // История, дней  

double   Arrows[];
int      cnt_bars;
int      HistoryCandle;
bool     FirstStartFlag;
int bar, limit;
datetime counted_bar;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer       (0,Arrows,INDICATOR_DATA);
   ArraySetAsSeries     (Arrows,true);
   PlotIndexSetInteger  (0,PLOT_DRAW_TYPE,DRAW_ARROW);
   PlotIndexSetInteger  (0,PLOT_LINE_COLOR,clrDodgerBlue);
   PlotIndexSetString   (0,PLOT_LABEL,"Arrows");
   PlotIndexSetInteger  (0,PLOT_ARROW,233);
   
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);

//--- Рассчитываем количество свечей истории текущего таймфрейма от настройки "дней"
   HistoryCandle           = History*24*60*60/PeriodSeconds(PERIOD_CURRENT);
   cnt_bars                = HistoryCandle;  // Кол-во баров для подсчета сигналов
   FirstStartFlag          = true;
   
//---
   return(INIT_SUCCEEDED);
  }
 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ChartRedraw(0);
  }
  
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

      ArraySetAsSeries(close,true);
      ArraySetAsSeries(open,true);
      ArraySetAsSeries(low,true);
      
     if(HistoryCandle>=rates_total) cnt_bars=rates_total-1;
     else cnt_bars=HistoryCandle;
     
//----+ проверка количества баров на достаточность для корректного расчёта индикатора
      if(rates_total<=cnt_bars)
         {
            Print("Недостаточно истории. Есть "+IntegerToString(rates_total-1)+" надо "+IntegerToString(cnt_bars));                                                                                                                                                                                                                                                                                                              
            return(0);
         }
         
//--- инициализация индикаторного буфера  
     if(FirstStartFlag) 
      {
//--- обнулим все буферы стрелок и времени от мусора                                                             
         for(int x=cnt_bars; x>=0 && !IsStopped(); x--) Arrows[x] = EMPTY_VALUE;
         FirstStartFlag = false;
         ChartRedraw(0);
      }
      
   if(prev_calculated>rates_total || prev_calculated<=0) // проверка на первый старт расчёта индикатора
      {
         limit=cnt_bars-1; // стартовый номер для расчёта всех баров
      }
   else limit=rates_total-prev_calculated; // стартовый номер для расчёта новых баров
   
   if(rates_total != prev_calculated) Arrows[0] = EMPTY_VALUE;
   

   
   for(bar=limit; bar>=0 && !IsStopped(); bar--)
      {
         if(close[bar+1]>open[bar]+5*_Point)  {Arrows[bar]=NormalizeDouble(low[bar]-5*_Point,_Digits);}
      }
      
   MqlRates rates[];
   MqlTick tick;
   SymbolInfoTick(Symbol(),tick);
   CopyRates(Symbol(),PERIOD_CURRENT,0,1,rates);
   double i;
   long m,s;
   m=rates[0].time+GetMinute()*60-tick.time;
   i=m/60.0;
   s=m%60;
   m=(m-m%60)/60;
            
   Comment(" Candle: "+IntegerToString(m,0,' ')+" m "+IntegerToString(s,0,' ')+" s left");
   
   if(iTime( _Symbol, PERIOD_M1, 0 ) > counted_bar ) 
      {
         counted_bar = iTime( _Symbol, PERIOD_M1, 0 );
         ChartRedraw(0);
      }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

int GetMinute()
  {
   switch(Period())
     {
      case PERIOD_M1: return(1);
      case PERIOD_M2: return(2);
      case PERIOD_M3: return(3);
      case PERIOD_M4: return(4);
      case PERIOD_M5: return(5);
      case PERIOD_M6: return(6);
      case PERIOD_M10: return(10);
      case PERIOD_M12: return(12);
      case PERIOD_M15: return(15);
      case PERIOD_M20: return(20);
      case PERIOD_M30: return(30);
      case PERIOD_H1: return(60);
      case PERIOD_H2: return(120);
      case PERIOD_H3: return(180);
      case PERIOD_H4: return(240);
      case PERIOD_H6: return(360);
      case PERIOD_H8: return(480);
      case PERIOD_H12: return(720);
      case PERIOD_D1: return(1440);
      case PERIOD_W1: return(10080);
      case PERIOD_MN1: return(43200);
     }
   return(1);
  }
Файлы:
test_arrow.mq5  12 kb
 
Konstantin Efremov:

Подскажите, разработчики терминала Метатрейдер 5 сломали в последнем обновлении индикаторные буферы? Или это у меня уже что-то с головой?

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

Помогает только полный пересчет индикатора на новом баре.


Замените вот этот бред

//--- инициализация индикаторного буфера  
     if(FirstStartFlag) 
      {
//--- обнулим все буферы стрелок и времени от мусора                                                             
         for(int x=cnt_bars; x>=0 && !IsStopped(); x--) Arrows[x] = EMPTY_VALUE;
         FirstStartFlag = false;
         ChartRedraw(0);
      }

таким бредом

  if(prev_calculated == 0)
    ArrayInitialize(Arrows, 0.0);
 

>>На виртуальной машине стоит два терминала МТ5. Один работает с брокером А, другой с брокером Б. На обоих терминалах работает >>один и тот же бот. Все было отлично до вчерашнего дня, пока не обновился до версии  2615.


Вернул версию 2560, все работает отлично, ни каких зависаний и деад - локов.

Разработчики вообще реагируют на сообщения?

Виртуальный хостинг для MetaTrader 5
Виртуальный хостинг для MetaTrader 5
  • www.mql5.com
Виртуальный хостинг для MetaTrader 4/5 является лучшим VPS-решением для Форекса. Оно не требует настройки, дает минимальные задержки до сервера и отличается низкими ценами. Всего за 15 USD в месяц вы получите виртуальную платформу, которая работает круглые сутки, экономит вашу прибыль и даже окупает себя. Создать удаленную копию приложения...
 
elavr:

>>На виртуальной машине стоит два терминала МТ5. Один работает с брокером А, другой с брокером Б. На обоих терминалах работает >>один и тот же бот. Все было отлично до вчерашнего дня, пока не обновился до версии  2615.


Вернул версию 2560, все работает отлично, ни каких зависаний и деад - локов.

Разработчики вообще реагируют на сообщения?

А разве вы сообщили какие-либо технические детали, чтобы можно было понять или воспроизвести?

Вопросы без деталей практически всегда остаются без нашего внимания.

Причина обращения: