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

 

Синтетический инструмент. Импортирую минутные бары, каждый минутный бар отличается на 1 пункт (5 знаков).

Закрываю окно с символами, потом повторно открываю данное окно, запрашиваю минутные бары у предыдущей загрузки, получаю

 

Символы на каждые целые сутки одинаковые. В чем ошибка?

 
elibrarius:

Просматриваю код пакета Alglib. Там полно таких конструкций, усложняющих читаемость кода:

Не проще ли так?

Мне кажется, что скорость исполнения будет даже выше.

Зачем так усложнили код? Или просто портировали с др. языка, без корректировок? Но все равно интересно, зачем такое усложнение в оригинале?

Скорее всего в оригинале это сделано именно для ускорения.

Будет ли быстрее в MQL - это надо измерять, "кажется" тут не прокатит.

 
Koldun Zloy:

Скорее всего в оригинале это сделано именно для ускорения.

Будет ли быстрее в MQL - это надо измерять, "кажется" тут не прокатит.

"Скорей всего" тоже не прокатит.
Ну как может такая форма работать быстрее? О чем Вы говорите!

Два лишних цикла и дополнительный массив вместо одной переменной.

 

Nikolai Semko:

Два лишних цикла и дополнительный массив вместо одной переменной.

Такие примитивные рассуждения не годятся для современных процессоров.

 
Koldun Zloy:

Такие примитивные рассуждения не годятся для современных процессоров.

Вам виднее. У Вас ж опыта больше...

 


Koldun Zloy
:

Такие примитивные рассуждения не годятся для современных процессоров.

Ну а если по существу, то, извините, но Вы бредите. 

Ни в одном из существующих ныне процессоров никогда не будет такое  

for(i=0;i<=npoints-1;i++)

работать быстрее в сравнении с

for(i=0;i<npoints;i++)

, доступ к массиву никогда не будет происходить быстрее, чем к простой переменной,

три одинаковых цикла никогда не будут отрабатывать быстрее чем один объединенный. 


Я не поленился и протестировал на скорость два различных варианта непосредственно в первоисточнике ALGLIB, чтобы не быть голословным :

      e=0;
      double tmp1;
      ulong t=GetMicrosecondCount();
      for(i=0;i<npoints;i++)
        {
         v=0.0;
         for(i_=0;i_<nvars;i_++)
           {
            tmp1=xy[i][i_]-ct[xyc[i]][i_];
            v+=tmp1*tmp1;
           }
         e=e+v;
        }
      t=GetMicrosecondCount()-t;
      Print("fast = "+(string)t+" микросекунд, e = "+DoubleToString(e) + " , npoints = " + (string)npoints+" , nvars = " + (string)nvars );



      e=0;
      t=GetMicrosecondCount();
      for(i=0;i<=npoints-1;i++)
        {
         for(i_=0;i_<=nvars-1;i_++)
            tmp[i_]=xy[i][i_];
         for(i_=0;i_<=nvars-1;i_++)
            tmp[i_]=tmp[i_]-ct[xyc[i]][i_];
         //--- calculation
         v=0.0;
         for(i_=0;i_<=nvars-1;i_++)
            v+=tmp[i_]*tmp[i_];
         e=e+v;
        }
      t=GetMicrosecondCount()-t;
      Print("slow = "+(string)t+" микросекунд, e = "+DoubleToString(e) + " , npoints = " + (string)npoints+" , nvars = " + (string)nvars );

результат:

2018.06.27 04:36:50.265 TestClasses (GBPUSD,M6) fast = 571 микросекунд, e = 534.47773777 , npoints = 1500 , nvars = 40
2018.06.27 04:36:50.266 TestClasses (GBPUSD,M6) slow = 841 микросекунд, e = 534.47773777 , npoints = 1500 , nvars = 40
2018.06.27 04:36:50.630 TestClasses (GBPUSD,M6) fast = 577 микросекунд, e = 531.85904819 , npoints = 1500 , nvars = 40
2018.06.27 04:36:50.631 TestClasses (GBPUSD,M6) slow = 812 микросекунд, e = 531.85904819 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.143 TestClasses (GBPUSD,M6) fast = 599 микросекунд, e = 537.42685690 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.144 TestClasses (GBPUSD,M6) slow = 853 микросекунд, e = 537.42685690 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.955 TestClasses (GBPUSD,M6) fast = 600 микросекунд, e = 531.17444713 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.956 TestClasses (GBPUSD,M6) slow = 809 микросекунд, e = 531.17444713 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.344 TestClasses (GBPUSD,M6) fast = 567 микросекунд, e = 540.39509565 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.344 TestClasses (GBPUSD,M6) slow = 813 микросекунд, e = 540.39509565 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.857 TestClasses (GBPUSD,M6) fast = 690 микросекунд, e = 550.68494369 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.858 TestClasses (GBPUSD,M6) slow = 820 микросекунд, e = 550.68494369 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.229 TestClasses (GBPUSD,M6) fast = 585 микросекунд, e = 547.94313745 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.230 TestClasses (GBPUSD,M6) slow = 811 микросекунд, e = 547.94313745 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.736 TestClasses (GBPUSD,M6) fast = 560 микросекунд, e = 568.39404456 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.737 TestClasses (GBPUSD,M6) slow = 813 микросекунд, e = 568.39404456 , npoints = 1500 , nvars = 40

Т.е. видно, что выигрыш в скорости более 40%.

Файлы:
dataanalysis.mqh  1150 kb
TestClasses.mqh  2762 kb
 
Nikolai Semko:

Ну а если по существу, то, извините, но Вы бредите. 

Ни в одном из существующих ныне процессоров никогда не будет такое  

работать быстрее в сравнении с

, доступ к массиву никогда не будет происходить быстрее, чем к простой переменной,

три одинаковых цикла никогда не будут отрабатывать быстрее чем один объединенный. 


Я не поленился и протестировал на скорость два различных варианта непосредственно в первоисточнике ALGLIB, чтобы не быть голословным :

результат:

Т.е. видно, что выигрыш в скорости более 40%.

Спасибо за тест! Думаю это не только в MQL но и на всех языках будет работать быстрее.

Про причины думал и ничего другого, как то , что программист писавший это получал зарплату не просто за работающую программу, а за количество строк. Ведь программка с 500 строками, не так впечатляет заказчика, как программа с 5000 строк. Жаль, что скорость и читаемость кода от этого пострадала.

 
elibrarius:
Думаю это не только в MQL но и на всех языках будет работать быстрее.

Конечно.

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

Синтетический инструмент. Импортирую минутные бары, каждый минутный бар отличается на 1 пункт (5 знаков).

Закрываю окно с символами, потом повторно открываю данное окно, запрашиваю минутные бары у предыдущей загрузки, получаю

 

Символы на каждые целые сутки одинаковые. В чем ошибка?

Стабильно воспроизводится ? Какой билд?