Скачать MetaTrader 5

Тестер пропускает бары?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Переходите от теории к практике. Code Base поможет!
Forex Trader
114257
Forex Trader 2007.07.01 12:26 
Столкнулся с таким эффектом при визуальном тестировании: Запускаю пустой эксперт, вешаю индикатор и ... получаю регулярный пересчёт индикатора. Вот код индикатора (специальная болванка для демонстрации эффекта):
#property indicator_chart_window

int PreBars;
datetime BarTime;
int StartPos;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() {
  return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit() {
  return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator reset function                                  |
//+------------------------------------------------------------------+
int Reset() {
  static int cnt = 0;
  cnt++;
  Print("Reset#",cnt,", Bars=",Bars,", PreBars=",PreBars,", Time[1]=",Time[1],", BarTime=",BarTime);
  return(Bars-1);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() {
  if (Bars == PreBars) return(0);
  if (Bars < 3) return(0);
  if (Bars-PreBars == 1 && BarTime==Time[1]) StartPos = 1;
  else StartPos = Reset();
  PreBars = Bars;  
  BarTime=Time[0];
  return(0);
}


А вот часть лога - весь приводить нет смысла.

Test EURUSD,M1: Reset#114, Bars=2507, PreBars=2505, Time[1]=1087540200, BarTime=1087540140
Test EURUSD,M1: Reset#113, Bars=2481, PreBars=2479, Time[1]=1087538640, BarTime=1087538580
Test EURUSD,M1: Reset#112, Bars=2469, PreBars=2467, Time[1]=1087537920, BarTime=1087537860
Test EURUSD,M1: Reset#111, Bars=2466, PreBars=2464, Time[1]=1087537740, BarTime=1087537680
Test EURUSD,M1: Reset#110, Bars=2403, PreBars=2401, Time[1]=1087533840, BarTime=1087533780



Код пустого эксперта не привожу для экономии места - он легко делается с помощью мастера.
Билд 206 от 6 июня.

Forex Trader
114257
Forex Trader 2007.07.01 12:56  
Придется всё же привести код эксперта :). Потому что это же проиисходит и при вызове индикатора из эксперта
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init() {
  return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit() {
  return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start() {
  double Ind = iCustom(NULL,0,"Test",0,0);
  return(0);
}
//+------------------------------------------------------------------+


2004.06.17 21:07  Test EURUSD,M1: Reset#73, Bars=1977, PreBars=1975, Time[1]=1087506360, BarTime=1087506300
2004.06.17 20:49  Test EURUSD,M1: Reset#72, Bars=1960, PreBars=1958, Time[1]=1087505280, BarTime=1087505220
2004.06.17 20:33  Test EURUSD,M1: Reset#71, Bars=1944, PreBars=1942, Time[1]=1087504320, BarTime=1087504260
2004.06.17 20:18  Test EURUSD,M1: Reset#70, Bars=1929, PreBars=1927, Time[1]=1087503420, BarTime=1087503360
2004.06.17 20:05  Test EURUSD,M1: Reset#69, Bars=1916, PreBars=1914, Time[1]=1087502640, BarTime=1087502580


Режим тестирования - по ценам открытия

P.S. То же имеет место при тестировании без визуализации

2005.12.30 22:58  Empty EURUSD,M1: ResetCnt=40637
2005.12.30 22:47  Test EURUSD,M1: Reset#40637, Bars=493537, PreBars=493535, Time[1]=1135982760, BarTime=1135982700
2005.12.30 22:38  Test EURUSD,M1: Reset#40636, Bars=493529, PreBars=493527, Time[1]=1135982220, BarTime=1135982160
2005.12.30 22:22  Test EURUSD,M1: Reset#40635, Bars=493519, PreBars=493517, Time[1]=1135981260, BarTime=1135981200



P.P.S. Кстати, эффект можно увидеть без всякого индикатора, достаточно вставить в пустой эксперт счётчик и напечатать в deinit значение счётчика и значение Bars. У меня получилось

2005.12.30 22:58  Empty EURUSD,M1: cnt=440097, Bars=493546
Forex Trader
114257
Forex Trader 2007.07.02 14:05  
А в чем собственно вопрос? Значение Bars эмулируется в тестере как при реалтайме.
Forex Trader
114257
Forex Trader 2007.07.02 15:05  
Вопрос: То, что эксперт при тестировании вызывается не на каждом баре - штатная ситуация?
Forex Trader
114257
Forex Trader 2007.07.02 15:15  
Сейчас проверю Ваш эксперт
Forex Trader
114257
Forex Trader 2007.07.02 16:12  
Вот более наглядный вариант: Эксперт просто ставит точку над каждым баром.
string OName;
int OCnt;
int i;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init() {
  OCnt = 0;
  return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit() {
  for(i=0;i<OCnt;i++) {
    OName = "Empty_"+i;
    ObjectDelete(OName);
  }
  return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start() {
  OName = "Empty_"+OCnt;
  ObjectCreate(OName,OBJ_ARROW,0,Time[1],High[1]+5*Point);
  ObjectSet(OName,OBJPROP_ARROWCODE,158);  
  ObjectSet(OName,OBJPROP_COLOR,Blue); 
  OCnt++; 
  return(0);
}

На картинке я вручную поставил галочки там, где точек нет.


Forex Trader
114257
Forex Trader 2007.07.02 16:21  
Да, я тоже прогнал у себя советника и сделал выводы. Подождем Славу, его сегодня нет. Изначально я прогонял в режиме Every Tick и там было все норсмально.
Forex Trader
114257
Forex Trader 2007.07.07 08:34  
Я тоже столкнулся с этой бедой. Бары пропускаются в режиме "по ценам открытия". При "всех тиках" все нормально. Погонял советника по ценам открытия на разной длине истории, получилось, что пропускается где-то около 20% баров.
Forex Trader
114257
Forex Trader 2007.07.07 10:07  
Я тоже столкнулся с этой бедой. Бары пропускаются в режиме "по ценам открытия". При "всех тиках" все нормально. Погонял советника по ценам открытия на разной длине истории, получилось, что пропускается где-то около 20% баров.

Slawa ответил в ветке "Просьба проконсультировать по тестированию советника"
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий