Обновление платформы MetaTrader 4 build 670: виртуальный хостинг, web-запросы и работа с сигналами из MQL-программ - страница 53

 

Обновился до 696 билда. Увеличилось в разы время тестирования советников. Как вернуться в 670 билд? Пробовал найти точки востановления в виндовс 7, их нет.


upd: не разводите панику, ничего не увеличилось

 
Forexman77:
Обновился до 696 билда. Увеличилось в разы время тестирования советников. Как вернуться в 670 билд? Пробовал найти точки востановления в виндовс 7, их нет.
А где доказательства?
 
Renat:
А где доказательства?

Может быть это связано с тем, что получаю данные пользовательского индикатора один раз на новом баре. Заметил, что если делать запрос всего один раз на новом баре значительно снижается скорость тестирования. На MQL4 это работает, на MQL5 не получалось.

           Пробовал в MQL5 проверить циклом многократное получение нового бара  и получение данных индикатора в буфер. Получалось, что по времени получение данных индикатора занимало меньше чем нового бара.

Терминал Альпари. Обновлял через Метаквот(зашел в демо счет Метаквот) 

Знаний пока маловато может чего напутал.

 
Forexman77:

Может быть это связано с тем, что получаю данные пользовательского индикатора один раз на новом баре. Заметил, что если делать запрос всего один раз на новом баре значительно снижается скорость тестирования. На MQL4 это работает, на MQL5 не получалось.

           Пробовал в MQL5 проверить циклом многократное получение нового бара  и получение данных индикатора в буфер. Получалось, что по времени получение данных индикатора занимало меньше чем нового бара.

Терминал Альпари. Обновлял через Метаквот(зашел в демо счет Метаквот) 

Знаний пока маловато может чего напутал.

Вы ошиблись.

Вот доказательство, что уменьшения скорости нет, даже наоборот есть небольшое ускорение:

Moving Average, EURUSD, 2012-2014 years

Period
670 build
 696 build
M1
-580746.31 (время 12031 мс, всего 14750 мс)
-580746.31 (время 12078 мс, всего 14546 мс)
M15
-81887.23 (время 9109 мс, всего 13890 мс)-81887.23 (время 8812 мс, всего 11047 мс)
H1
11164.19 (время 8906 мс, всего 13203 мс)11164.19 (время 8781 мс, всего 11375 мс)
 
Forexman77:

Может быть это связано с тем, что получаю данные пользовательского индикатора один раз на новом баре. Заметил, что если делать запрос всего один раз на новом баре значительно снижается скорость тестирования. На MQL4 это работает, на MQL5 не получалось.

           Пробовал в MQL5 проверить циклом многократное получение нового бара  и получение данных индикатора в буфер. Получалось, что по времени получение данных индикатора занимало меньше чем нового бара.

Ничего не понятно.
 

Аналогичный отчет по MACD Sample

MACD, EURUSD, 2012-2014 years

Period
670
 696
M1
-2974.25 (время 20015 мс, всего 22297 мс)
-2974.25 (время 19985 мс, всего 22688 мс)
M15
146.51 (время 18031 мс, всего 22375 мс)146.51 (время 17574 мс, всего 22109 мс)
H1
-952.22 (время 17656 мс, всего 22000 мс)-952.22 (время 17328 мс, всего 21625 мс)
 
alexvd:

Аналогичный отчет по MACD Sample

MACD, EURUSD, 2012-2014 years

Period
670
 696
M1
-2974.25 (время 20015 мс, всего 22297 мс)
-2974.25 (время 19985 мс, всего 22688 мс)
M15
146.51 (время 18031 мс, всего 22375 мс)146.51 (время 17574 мс, всего 22109 мс)
H1
-952.22 (время 17656 мс, всего 22000 мс)-952.22 (время 17328 мс, всего 21625 мс)

Проверил на 696 скорость лучше:

 2014.09.18 16:20:41.877 проверка индикатора EURUSD,H1: T_HLMErgodic = 826 ms(696 билд)
2014.09.18 16:21:46.442 проверка индикатора EURUSD,H1: T_HLMErgodic = 842 ms (696 билд)

2014.09.18 16:25:48.715 проверка индикатора EURUSD,H1: T_HLMErgodic = 874 ms (670 билд) 
2014.09.18 16:25:46.657 проверка индикатора EURUSD,H1: T_HLMErgodic = 858 ms (670 билд) 

Проверял циклом:

#property version   "1.00"
#property strict
extern int       Period_MA_1=1;
extern int       p2          =20;
extern int       p3          =5;
extern int       p4          =3;
extern int       p5          =3;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
  double line;
  uint start=GetTickCount();
  for(int i=0;i<1000000;i++)
  {
  line=iCustom(NULL,0,"T_HLMErgodic",Period_MA_1,p2,p3,p4,p5,0,1);
  }
  uint time=GetTickCount()-start;
  Print("T_HLMErgodic = ",time," ms");
   
  }
//+------------------------------------------------------------------+
Но, не понимаю, почему когда помещаю в папку 696 билд и запускаю советника в тестере, вместо 2 часов на 670 билде начинает показывать 14 часов время тестирования)
 
Forexman77:

Проверил на 696 скорость лучше:

 2014.09.18 16:20:41.877 проверка индикатора EURUSD,H1: T_HLMErgodic = 826 ms(696 билд)
2014.09.18 16:21:46.442 проверка индикатора EURUSD,H1: T_HLMErgodic = 842 ms (696 билд)

2014.09.18 16:25:48.715 проверка индикатора EURUSD,H1: T_HLMErgodic = 874 ms (670 билд) 
2014.09.18 16:25:46.657 проверка индикатора EURUSD,H1: T_HLMErgodic = 858 ms (670 билд) 

Проверял циклом:

Но, не понимаю, почему когда помещаю в папку 696 билд и запускаю советника в тестере, вместо 2 часов на 670 билде начинает показывать 14 часов время тестирования)

Ищите причины, смотрите логи, проверьте наличие интернета и активного торгового счета. Прогоняйте одиночные тесты, где выдаются полные логи.
 
Проверили оптимизацию (MACD, 2013-2014, H1).  670 билд: оптимизация завершилась за 3 минуты 48 секунд. Новый 696 билд: оптимизация завершилась за 3 минуты 41 секунду
 
Rosh:
Ничего не понятно.

Попытаюсь ясно выразиться)

В MQL4 использую проверку на получение нового бара и когда он новый получаю значение пользовательского индикатора.

static datetime t;
if (Time[0] > t)
{
Здесь получаю значения индикатора, если новый бар
}
t=Time[0];

Попробовал сделать аналогично в MQL5. Улучшения не получил, скорость тестирования вроде наоборот немного стала хуже.

Тогда решил проверить сколько времени уходит на получение нового бара(времени)

datetime New_Time[];//буффер для проверки нового бара
void OnStart()
  {
uint start=GetTickCount();
for(int i=0;i<1000000;i++)
{
static datetime t;//записываем старое время  
ArraySetAsSeries(New_Time,true);//направление индексации
CopyTime(_Symbol,_Period,0,1,New_Time);//копируем время нового бара
t=New_Time[0];   
}
uint time=GetTickCount()-start;
Print("New_Time = ",time," ms");
  }

Получается: 2014.09.18 16:35:24.024         проверка времени (EURUSD,M15)           New_Time = 1545 ms

Проверил сколько затрачивается времени на получение значения индикатора:

input int      q=2;  // qr - период, по которому вычисляется моментум
input int      r=20; // rr - период 1-й EMA, применительно к моментуму
input int      s=5;  // sr - период 2-й EMA, применительно к результату первого сглаживания
input int      u=3;  // ur - период 3-й EMA, применительно к результату второго сглаживания
int TSIHandle;   // хэндл индикатора  TSI
double TSITrade[]; // динамические массивы для хранения численных значений TSI
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
  TSIHandle=iCustom(NULL,0,"Blau_TSI",q,r,s,u,PRICE_CLOSE);
  if(TSIHandle<0){Alert("Ошибка при создании индикаторов - номер ошибки: ",GetLastError(),"!!");return;}
  ArraySetAsSeries(TSITrade,true);
  uint start1=GetTickCount();
  for(int i=0;i<1000000;i++)
  {
CopyBuffer(TSIHandle,0,0,3,TSITrade);
  double znachenie=TSITrade[1];
  }
  uint time1=GetTickCount()-start1;
  Print("TSITrade = ",time1," ms");
   
  }

2014.09.18 16:41:34.898       проверка индикатора (EURUSD,M15)     TSITrade = 219 ms

Что гораздо меньше, чем проверка нового бара.

Проверил такую конструкцию:

void OnStart()
  {
int t;
int s;  
uint start=GetTickCount();
for(int i=0;i<1000000;i++)
{
MqlDateTime m;
TimeCurrent(m);
t=m.min;
s=m.sec;
}
uint time=GetTickCount()-start;
Print("time = ",time," ms");    
}

2014.09.18 16:42:33.484       проверка времени3 (EURUSD,M15)         time = 47 ms

Но даже с такой проверкой нового бара на контрольных точках в MQL5 скорость значительно меньше чем в MQL4. Пробовал запускать другие советники не свои, на контрольных точках скорость приемлемая. Спрашивал давно на пятом форуме что у меня не так, ответа не нашел.

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