Помогите разобраться: кто ошибся я или тестер?

 

Я написал очень простой "советник" для проверки проблемы с которой столкнулся, тестируя свой советник:

int init()
  {
//----
      if(!IsTesting()) 
      {
         for(int i = 0;  i < iBars(Symbol(), PERIOD_H4);  i++) 
         {
            datetime curTime =iTime(Symbol(), PERIOD_H4, i);
            int shift = i*PERIOD_H4;
            double price = iOpen(NULL, PERIOD_M1, shift);   
            if(TimeYear(curTime) == 2008 && TimeMonth(curTime) == 8 && TimeDay(curTime) == 22)
            {
               Print(price, "  ", TimeToStr(curTime));
            }
      
         }
      }   

//----
   return(0);
  }

int start()
  {
//----
    static datetime prevt;
   
   
   if(iTime(Symbol(), PERIOD_H4, 0) == prevt) 
   {
       return(0);
   }
   prevt = iTime(Symbol(), PERIOD_H4, 0);
    
     if(IsTesting()) 
     {
         datetime curTime = TimeCurrent();
         double price = iOpen(NULL, PERIOD_M1, 0);   
         if(TimeYear(curTime) == 2008 && TimeMonth(curTime) == 8 && TimeDay(curTime) == 22)
         {
            Print(price, "  ", TimeToStr(curTime));
         }
     }   

//----
   return(0);
  }

Этот тестовый эксперт я запускаю сначала в реальном времени, а затем в тестере. Я ожидал, что распечатанные цены в двух случаях будут совершенно одинаковы, но на тестере
я получаю :

1.4895 2008.08.22 00:00
1.4871 2008.08.22 04:00
1.489 2008.08.22 08:00
1.4834 2008.08.22 12:00
1.4815 2008.08.22 16:00
1.479 2008.08.22 20:00

а в реальном времени:

1.4722 2008.08.22 00:00
1.475 2008.08.22 04:00

1.4744 2008.08.22 08:00

1.475 2008.08.22 12:00

1.4771 2008.08.22 16:00
1.4776 2008.08.22 20:00


Пожалуйста, помогите разобраться в чём моя ошибка. Или тестера?
Заранее благодарен всем ответившим.

 
bablokos писал(а) >>

Я написал очень простой "советник" для проверки проблемы с которой столкнулся, тестируя свой советник:



curTime =iTime(Symbol(), PERIOD_H4, i);

curTime берете от i-го бара

price = iOpen(NULL, PERIOD_M1, shift)
price берете от i*PERIOD_H4-го бара без гарантий, что 0-й бар на минутках кратен PERIOD_H4, т.е. соответствует часу кратному PERIOD_H4 точь в точь
 
Vita писал(а) >>

curTime берете от i-го бара

price берете от i*PERIOD_H4-го бара без гарантий, что 0-й бар на минутках кратен PERIOD_H4, т.е. соответствует часу кратному PERIOD_H4 точь в точь

Спасибо. Вы всё объяснили.

 

Интересный случай. Тестер пока не трогаю. Гружу эксперта (указанный код) с запретом на торговлю: результаты одни. Разрешаю эксперту торговать: результаты меняются. Почему?

2008.09.29 17:59:15 ___ EURUSD,H4: removed
2008.09.29 17:59:15 ___ EURUSD,H4: uninit reason 1
2008.09.29 17:57:45 ___ EURUSD,H4: initialized
2008.09.29 17:57:45 ___ EURUSD,H4: 1.4695 2008.08.22 00:00
2008.09.29 17:57:45 ___ EURUSD,H4: 1.4667 2008.08.22 04:00
2008.09.29 17:57:45 ___ EURUSD,H4: 1.4689 2008.08.22 08:00     //с разрешением торговать
2008.09.29 17:57:45 ___ EURUSD,H4: 1.4755 2008.08.22 12:00
2008.09.29 17:57:45 ___ EURUSD,H4: 1.4787 2008.08.22 16:00
2008.09.29 17:57:45 ___ EURUSD,H4: 1.4766 2008.08.22 20:00
2008.09.29 17:57:45 ___ EURUSD,H4: uninit reason 5
2008.09.29 17:57:34 ___ EURUSD,H4: initialized
2008.09.29 17:57:34 ___ EURUSD,H4: 1.498 2008.08.22 00:00
2008.09.29 17:57:34 ___ EURUSD,H4: 1.5008 2008.08.22 04:00
2008.09.29 17:57:34 ___ EURUSD,H4: 1.4975 2008.08.22 08:00      //с запретом на торговлю
2008.09.29 17:57:34 ___ EURUSD,H4: 1.49 2008.08.22 12:00
2008.09.29 17:57:34 ___ EURUSD,H4: 1.4922 2008.08.22 16:00
2008.09.29 17:57:34 ___ EURUSD,H4: 1.4884 2008.08.22 20:00
2008.09.29 17:57:27 ___ EURUSD,H4: loaded successfully

А вот такие результаты у тестера для Н4 (отличные от первых двух):

2008.09.29 19:05:46 2008.08.22 20:00 ___ EURUSD,H4: 1.479 2008.08.22 20:00
2008.09.29 19:05:46 2008.08.22 16:00 ___ EURUSD,H4: 1.4815 2008.08.22 16:00
2008.09.29 19:05:46 2008.08.22 12:00 ___ EURUSD,H4: 1.4834 2008.08.22 12:00
2008.09.29 19:05:46 2008.08.22 08:00 ___ EURUSD,H4: 1.489 2008.08.22 08:00        //потиково
2008.09.29 19:05:46 2008.08.22 04:00 ___ EURUSD,H4: 1.4871 2008.08.22 04:00
2008.09.29 19:05:46 2008.08.22 00:00 ___ EURUSD,H4: 1.4895 2008.08.22 00:00
2008.09.29 19:05:43 ___ started for testing
2008.09.29 19:00:58 2008.08.22 20:00 ___ EURUSD,H4: 1.479 2008.08.22 20:00
2008.09.29 19:00:58 2008.08.22 16:00 ___ EURUSD,H4: 1.4815 2008.08.22 16:00
2008.09.29 19:00:58 2008.08.22 12:00 ___ EURUSD,H4: 1.4834 2008.08.22 12:00
2008.09.29 19:00:58 2008.08.22 08:00 ___ EURUSD,H4: 1.489 2008.08.22 08:00        //по ценам открытия
2008.09.29 19:00:58 2008.08.22 04:00 ___ EURUSD,H4: 1.4871 2008.08.22 04:00
2008.09.29 19:00:58 2008.08.22 00:00 ___ EURUSD,H4: 1.4895 2008.08.22 00:00
2008.09.29 19:00:48 ___ started for testing
2008.09.29 19:00:48 ___: loaded successfully


 
coaster писал(а) >>

Интересный случай. Тестер пока не трогаю. Гружу эксперта (указанный код) с запретом на торговлю: результаты одни. Разрешаю эксперту торговать: результаты меняются. Почему?

2008.09.29 17:59:15 ___ EURUSD,H4: removed
2008.09.29 17:59:15 ___ EURUSD,H4: uninit reason 1
2008.09.29 17:57:45 ___ EURUSD,H4: initialized
2008.09.29 17:57:45 ___ EURUSD,H4: 1.4695 2008.08.22 00:00
2008.09.29 17:57:45 ___ EURUSD,H4: 1.4667 2008.08.22 04:00
2008.09.29 17:57:45 ___ EURUSD,H4: 1.4689 2008.08.22 08:00 //с разрешением торговать
2008.09.29 17:57:45 ___ EURUSD,H4: 1.4755 2008.08.22 12:00
2008.09.29 17:57:45 ___ EURUSD,H4: 1.4787 2008.08.22 16:00
2008.09.29 17:57:45 ___ EURUSD,H4: 1.4766 2008.08.22 20:00
2008.09.29 17:57:45 ___ EURUSD,H4: uninit reason 5
2008.09.29 17:57:34 ___ EURUSD,H4: initialized
2008.09.29 17:57:34 ___ EURUSD,H4: 1.498 2008.08.22 00:00
2008.09.29 17:57:34 ___ EURUSD,H4: 1.5008 2008.08.22 04:00
2008.09.29 17:57:34 ___ EURUSD,H4: 1.4975 2008.08.22 08:00 //с запретом на торговлю
2008.09.29 17:57:34 ___ EURUSD,H4: 1.49 2008.08.22 12:00
2008.09.29 17:57:34 ___ EURUSD,H4: 1.4922 2008.08.22 16:00
2008.09.29 17:57:34 ___ EURUSD,H4: 1.4884 2008.08.22 20:00
2008.09.29 17:57:27 ___ EURUSD,H4: loaded successfully

Да, интересное наблюдение. Хотелось бы увидеть реакцию MetaQuotes

 
bablokos >>:

Да, интересное наблюдение. Хотелось бы увидеть реакцию MetaQuotes

Для начала сделайте так, чтобы цена и время соответствовали друг другу, например так:

            if(TimeYear(curTime) == 2008 && TimeMonth(curTime) == 8 && TimeDay(curTime) == 22)
            {
               Print("price =", iOpen(NULL, PERIOD_M1, shift) , "  Time = ", TimeToStr(iTime(NULL, PERIOD_M1, shift)));
            }

 
Rosh >>:

Для начала сделайте так, чтобы цена и время соответствовали друг другу, например так:

Вопрос не как, а почему один и тот-же код

int shift;
double price;
datetime curTime;
for(int i = 0;  i < iBars(Symbol(), PERIOD_H4);  i++) 
     {
      shift = i*PERIOD_H4;
      if(TimeYear(curTime) == 2008 && TimeMonth(curTime) == 8 && TimeDay(curTime) == 22)
          Print("Price=",iOpen(NULL, PERIOD_M1, shift),"; Time=",TimeToStr(iTime(Symbol(), PERIOD_H4, i)));
     }

при разрешении на торговлю изменил выходные данные?

Т.е. хотелось бы узнать скрытую зависимость от запрета/разрешения на торговлю.

 
coaster >>:

Вопрос не как, а почему один и тот-же код

при разрешении на торговлю изменил выходные данные?

Т.е. хотелось бы узнать скрытую зависимость от запрета/разрешения на торговлю.


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


 
Rosh >>:

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


Спасибо за наглядность. Тогда наверняка это можно проконтролировать. (программно проконтролировать присутствие необходимых данных, чтобы избежать ошибки при запуске кода на автомат)

if (X=true/*все необходимые данные присутствуют*/) then {/*всё нормально*/}


Буду искать. Кто что найдёт, поделитесь ссылкой пожалуйста.
Причина обращения: