Выбраны не те бары, которые нужно выбрать..

 

 Нужно написать некоторые вещи. Решил проверить всё сам, чтобы не надеяться на некоторые стандартные функции платформы. Написал простенький совочек, который проходится по барам от 0-го индекса к 11.

//+------------------------------------------------------------------+
//|                                                            Q.mq4 |
//|                                                              hoz |
//|                                               forexhoz@gmail.com |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      "forexhoz@gmail.com"
#property version   "1.00"
#property strict

bool first;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   first = false;
   
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   if (first == false)
   {
      string time = NULL;
      
      for (int i = 0; i < 11; i++)
      {
         Print ("i = ", i, "; Time[", i, "] = ", Time[i]);     // Принтуем порядковый номер выбранного бара и время его появления в формате datetime
         
         time = TimeToString (Time[i], TIME_DATE);             // Получаем строковый вид выбранного бара
         
         Print ("i = ", i, "; Time[", i, "] = ", time);        // Принтуем порядковый номер выбранного бара и время его появления в строковом формате
         if (time == "2016.01.01")
         {
         //   break;
         }
      }
      
      first = true;
   }
}
//+------------------------------------------------------------------+

 Чтобы не дублировались принты я добавил в сов переменную first.

 В общем-то, всё остальное видно и понятно. Проходимся по барам от 0-го индекса до 11 и выводим принтом на каждом баре индекс выбранного бара и время его появления, далее запоминаем время выбранного бара в переменную time и после принтуем его с соответствующим индексом.

На условие if() не обращаем внимания. Он будет использоваться дальше..

Так вот. последний бар имеет индекс 0. И этот же последний бар является крайним баром в истории. Сегодня например 10.01.2016 года. Так вот на индексе 0 будет время открытия 2016.10.01. Но у меня в журнале:

2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 0; Time[0] = 2015.10.01 00:00:00
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 0; Time[0] = 2015.10.01
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 1; Time[1] = 2015.09.30 23:45:00
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 1; Time[1] = 2015.09.30
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 2; Time[2] = 2015.09.30 23:30:00
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 2; Time[2] = 2015.09.30
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 3; Time[3] = 2015.09.30 23:15:00
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 3; Time[3] = 2015.09.30
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 4; Time[4] = 2015.09.30 23:00:00
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 4; Time[4] = 2015.09.30
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 5; Time[5] = 2015.09.30 22:45:00
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 5; Time[5] = 2015.09.30
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 6; Time[6] = 2015.09.30 22:30:00
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 6; Time[6] = 2015.09.30
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 7; Time[7] = 2015.09.30 22:15:00
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 7; Time[7] = 2015.09.30
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 8; Time[8] = 2015.09.30 22:00:00
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 8; Time[8] = 2015.09.30
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 9; Time[9] = 2015.09.30 21:45:00
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 9; Time[9] = 2015.09.30
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 10; Time[10] = 2015.09.30 21:30:00
2016.01.10 17:53:39     2015.10.01 00:00  Q EURUSD,M15: i = 10; Time[10] = 2015.09.30

 2016 года и близко нет. Почему? Мне этот 2015.09.30 не нужно. Что за хрень такая?

 
shanty:

 Нужно написать некоторые вещи. Решил проверить всё сам, чтобы не надеяться на некоторые стандартные функции платформы. Написал простенький совочек, который проходится по барам от 0-го индекса к 11.

 Чтобы не дублировались принты я добавил в сов переменную first.

 В общем-то, всё остальное видно и понятно. Проходимся по барам от 0-го индекса до 11 и выводим принтом на каждом баре индекс выбранного бара и время его появления, далее запоминаем время выбранного бара в переменную time и после принтуем его с соответствующим индексом.

На условие if() не обращаем внимания. Он будет использоваться дальше..

Так вот. последний бар имеет индекс 0. И этот же последний бар является крайним баром в истории. Сегодня например 10.01.2016 года. Так вот на индексе 0 будет время открытия 2016.10.01. Но у меня в журнале:

 2016 года и близко нет. Почему? Мне этот 2015.09.30 не нужно. Что за хрень такая?

Это Вы в тестере смотрите? Если в тестере - задайте нужный период для тестирования
 
Vinin:
Это Вы в тестере смотрите? Если в тестере - задайте нужный период для тестирования

Разумеется, сегодня же выходной. Период выставлен:

 Период в тестере

Какие ещё могут быть предложения? 

 
А что ты хотел увидеть? Поставлен период тестирования с 01.10.2015 период М15 вот и печатает с первого октября 15года каждые 15 минут. А вот почему в обратном порядке не понимаю, может перевернул когда копировал из лога?
 

Верно, период выбран с 01.10.2015 по 10.01.2016, НО.. это весь период. Последний бар с индексов 0 будет в числе 10.01.2016, а самый первый с индексом Bars-1 будет в дате 01.10.2015. ЧТо не так?

Вот я и принтую последние 11 числе, дабы не листать километров принтов в N-баров по всей имеющейся истории.

Принтую с 0-вого бара. Дата должна быть 10.01.2016. Почему нет?

 

В момент начала тестирования нулевой бар и есть 01.10.2015 00:00 а 10.01.2016 ещё и не придумали, даже с наступающим не поздравляли.

Запусти с 10.01.2016 по 11.01.2016 и получишь нулевым баром 10.01.2016 00:00

 
AlexeyVik:

В момент начала тестирования нулевой бар и есть 01.10.2015 00:00 а 10.01.2016 ещё и не придумали, даже с наступающим не поздравляли.

 Тогда какой индекс будет у бара последнего т.е. текущего?

 
Будет индекс 0, но только когда он появится на графике. Так-же как в реале, появился новый бар - индекс 0, а все предыдущие сменили индекс на+1. Тестер-то это имитация реала, только не с реальными котировками.
 

Да ну. Вот переписал код так:

//+------------------------------------------------------------------+
//|                                                            Q.mq4 |
//|                                                              hoz |
//|                                               forexhoz@gmail.com |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      "forexhoz@gmail.com"
#property version   "1.00"
#property strict

bool first;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   first = false;
   
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   if (first == false)
   {
      string time = NULL;
      
      for (int i = 0; i < 11; i++)
      {
         Print ("i = ", i, "; Time[", i, "] = ", Time[i]);     // Принтуем порядковый номер выбранного бара и время его появления в формате datetime
         
         time = TimeToString (Time[i], TIME_DATE);             // Получаем строковый вид выбранного бара
         
         Print ("i = ", i, "; Time[", i, "] = ", time);        // Принтуем порядковый номер выбранного бара и время его появления в строковом формате
         if (time == "2016.01.01")
         {
         //   break;
         }
      }
      
      for (int i = Bars - 1; i >= Bars - 11; i--)
      {
         Print ("i = ", i, "; Time[", i, "] = ", Time[i]);     // Принтуем порядковый номер выбранного бара и время его появления в формате datetime
         
         time = TimeToString (Time[i], TIME_DATE);             // Получаем строковый вид выбранного бара
         
         Print ("i = ", i, "; Time[", i, "] = ", time);        // Принтуем порядковый номер выбранного бара и время его появления в строковом формате
         if (time == "2016.01.01")
         {
         //   break;
         }
      }
      
      first = true;
   }
}
//+------------------------------------------------------------------+

Вот что вижу в журнале:

2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 990; Time[990] = 2015.09.16
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 990; Time[990] = 2015.09.16 16:30:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 991; Time[991] = 2015.09.16
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 991; Time[991] = 2015.09.16 16:15:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 992; Time[992] = 2015.09.16
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 992; Time[992] = 2015.09.16 16:00:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 993; Time[993] = 2015.09.16
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 993; Time[993] = 2015.09.16 15:45:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 994; Time[994] = 2015.09.16
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 994; Time[994] = 2015.09.16 15:30:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 995; Time[995] = 2015.09.16
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 995; Time[995] = 2015.09.16 15:15:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 996; Time[996] = 2015.09.16
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 996; Time[996] = 2015.09.16 15:00:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 997; Time[997] = 2015.09.16
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 997; Time[997] = 2015.09.16 14:45:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 998; Time[998] = 2015.09.16
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 998; Time[998] = 2015.09.16 14:30:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 999; Time[999] = 2015.09.16
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 999; Time[999] = 2015.09.16 14:15:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 1000; Time[1000] = 2015.09.16
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 1000; Time[1000] = 2015.09.16 14:00:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 10; Time[10] = 2015.09.30
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 10; Time[10] = 2015.09.30 21:30:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 9; Time[9] = 2015.09.30
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 9; Time[9] = 2015.09.30 21:45:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 8; Time[8] = 2015.09.30
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 8; Time[8] = 2015.09.30 22:00:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 7; Time[7] = 2015.09.30
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 7; Time[7] = 2015.09.30 22:15:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 6; Time[6] = 2015.09.30
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 6; Time[6] = 2015.09.30 22:30:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 5; Time[5] = 2015.09.30
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 5; Time[5] = 2015.09.30 22:45:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 4; Time[4] = 2015.09.30
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 4; Time[4] = 2015.09.30 23:00:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 3; Time[3] = 2015.09.30
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 3; Time[3] = 2015.09.30 23:15:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 2; Time[2] = 2015.09.30
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 2; Time[2] = 2015.09.30 23:30:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 1; Time[1] = 2015.09.30
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 1; Time[1] = 2015.09.30 23:45:00
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 0; Time[0] = 2015.10.01
2016.01.10 22:07:20.747 2015.10.01 00:00  Q EURUSD,M15: i = 0; Time[0] = 2015.10.01 00:00:00
2016.01.10 22:07:20.741 2015.10.01 00:00  Q test started

 Как видно имеется 2 цикла:

1-ый от начала графика к концу.

2-ой от конца к началу.

Принтую значения времени о 0-ого бара в обоих случаях, и везде то же самое! Как тогда мне всё таки получить доступ к интересующим меня барам? 

С какой бы стороны я не подошёл, всё-равно вижу только 2015 год!

 
Вопрос снят. Был у меня затуп. Уже всё понятно, сам всё прогнал и удостоверился что всё корректно, на самом деле.
 
Ну и слава Богу.