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

 
Здравствуйте!
При тестировании советника на истории по всем выбраным инструментам тестер выдает результат  только по валютным парам, а по крипте выдает "oninit returns non-zero code 1". Что можно с этим сделать? У кого так было?
 
lapundra1 #:
Здравствуйте!
При тестировании советника на истории по всем выбраным инструментам тестер выдает результат  только по валютным парам, а по крипте выдает "oninit returns non-zero code 1". Что можно с этим сделать? У кого так было?

Закомментировать строку 123 и ошибка пройдёт. Это я Вам как телепат говорю :) - так как кода нет, поэтому только телепатия, не иначе :)

 

Приветствую. 

При запуске МТ5 в терминале возникает ошибка: 

2022.01.03 15:33:30.108 Virtual Hosting failed to get list of virtual hosts [1001] (tls - create certificate chain engine failed)

2022.01.03 15:34:30.945 Signal '56334871': failed get list of signals


И дальше, при попытке подключиться к Хранилищу в Метаэдиторе:

2022.01.03 15:34:39.668 Storage projects list request failed with error 1001

2022.01.03 15:34:46.561 Storage activation of MQL5 Storage failed [1001]


При этом на другом компьютере - все нормально подключилось, и отправило в Хранилище изменения. 

Никаких сетевых проблем на компьютере не обнаруживается, все работает нормально. Никаких "рискованных" действий на компьютере последние несколько месяцев также не производилось, и все работало нормально. Билд 3140.

В какую сторону копать? 


 

 Я даже не лезу в Тайны Мадридского двора и упаси меня Боже интересоваться, почему хэндлы индикаторов начинают индексироваться не с 0 или 1, а с 10. Фиг с этим, переживу.

 Вы мне лучше объясните, с какой стати при наличии в коде двух вроде как независимых хэндлов одного и того же индикатора и удалении второго исчезает не только вторая MA, но и первая? То есть удаление одного из хэндлов убивает и другой. Вот сильно упрощённый и удвоенный код iMA из Справки:

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2

#property indicator_label1  "iMA1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

#property indicator_label2  "iMA2"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrBlue
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

double iMABuffer1[], iMABuffer2[];
int    handle1, handle2;
int    bars_calculated=0;

int OnInit()
  {
   SetIndexBuffer(0,iMABuffer1,INDICATOR_DATA);
   SetIndexBuffer(1,iMABuffer2,INDICATOR_DATA);

   PlotIndexSetInteger(0,PLOT_SHIFT,0);
   PlotIndexSetInteger(1,PLOT_SHIFT,0);

   handle1=iMA(_Symbol,PERIOD_CURRENT,10,0,MODE_SMA,PRICE_CLOSE);
   handle2=iMA(_Symbol,PERIOD_CURRENT,20,0,MODE_SMA,PRICE_CLOSE);

   return(INIT_SUCCEEDED);
  }

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[])
  {
   int values_to_copy;

   int calculated=BarsCalculated(handle1);
   if(calculated<=0) return(0);

   if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
      if(calculated>rates_total) values_to_copy=rates_total;
      else                       values_to_copy=calculated;
   else
      values_to_copy=(rates_total-prev_calculated)+1;

   if(!FillArrayFromBuffer(iMABuffer1,0,handle1,values_to_copy)) return(0);
   if(!FillArrayFromBuffer(iMABuffer2,0,handle2,values_to_copy)) return(0);

   //if(handle2!=INVALID_HANDLE)
   //   Print(IndicatorRelease(handle2));

   bars_calculated=calculated;

   return(rates_total);
  }

bool FillArrayFromBuffer(double &values[],
                         int shift,
                         int ind_handle,
                         int amount
                         )
  {
   if(CopyBuffer(ind_handle,0,-shift,amount,values)<0)
      return(false);

   return(true);
  }

void OnDeinit(const int reason)
  {
   if(handle1!=INVALID_HANDLE)
      IndicatorRelease(handle1);
   if(handle2!=INVALID_HANDLE)
      IndicatorRelease(handle2);
  }

Если раскомментировать две строки, в результате ничего не отрисуется. Ожидалось: останется первая MA (красная).

 ...А всего-то хотелось почистить память.

 
x572intraday #:

 Я даже не лезу в Тайны Мадридского двора и упаси меня Боже интересоваться, почему хэндлы индикаторов начинают индексироваться не с 0 или 1, а с 10. Фиг с этим, переживу.

 Вы мне лучше объясните, с какой стати при наличии в коде двух вроде как независимых хэндлов одного и того же индикатора и удалении второго исчезает не только вторая MA, но и первая? То есть удаление одного из хэндлов убивает и другой. Вот сильно упрощённый и удвоенный код iMA из Справки:

Если раскомментировать две строки, в результате ничего не отрисуется. Ожидалось: останется первая MA (красная).

 ...А всего-то хотелось почистить память.

Как минимум:

if(handle2!=INVALID_HANDLE && !FillArrayFromBuffer(iMABuffer2,0,handle2,values_to_copy)) return(0);
 
JRandomTrader #:

Как минимум:

 А Вы проверяли? У меня не пошло. А нужно всего лишь удалить один (с освобождением памяти) и визуально оставить другой. А из Вашей логики следует: если второй хэндл существует и второй буфер не был заполнен, то выходим, а до моей строки с IndicatorRelease(handle2) дело даже не доходит (если я в нужном месте вставил код).

 
   int dim=5;
   int Arr1[5];// OK
   int Arr2[dim];// '[' - invalid index value

 Либо я вконец упоролся, либо, если не баг, ткните валенком в Справку.

 
x572intraday #:

 Либо я в конец упоролся, либо, если не баг, ткните валенком в Справку.

Размерность статического массива константа а не инт.

 
Valeriy Yastremskiy #:

Размерность статического массива константа а не инт.

Можно так определять вектор, но они только дабл.

int n = 5;
vector v(n);
v[0] = 1.2;
 
Aleksey Nikolayev #:

Можно так определять вектор, но они только дабл.

 Ладно. Тогда лучше буду ресайзить.