Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Зачем продавать продукты в MetaTrader AppStore? Узнай из статьи!
Victor Demihov
618
Victor Demihov 2016.01.10 14:54 

 Нужно написать некоторые вещи. Решил проверить всё сам, чтобы не надеяться на некоторые стандартные функции платформы. Написал простенький совочек, который проходится по барам от 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 не нужно. Что за хрень такая?

Victor Nikolaev
Модератор
14046
Victor Nikolaev 2016.01.10 15:17  
shanty:

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

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

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

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

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

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

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

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

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

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

Alexey Viktorov
5179
Alexey Viktorov 2016.01.10 15:48  
А что ты хотел увидеть? Поставлен период тестирования с 01.10.2015 период М15 вот и печатает с первого октября 15года каждые 15 минут. А вот почему в обратном порядке не понимаю, может перевернул когда копировал из лога?
Victor Demihov
618
Victor Demihov 2016.01.10 15:56  

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

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

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

Alexey Viktorov
5179
Alexey Viktorov 2016.01.10 16:14  

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

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

Victor Demihov
618
Victor Demihov 2016.01.10 17:58  
AlexeyVik:

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

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

Alexey Viktorov
5179
Alexey Viktorov 2016.01.10 19:02  
Будет индекс 0, но только когда он появится на графике. Так-же как в реале, появился новый бар - индекс 0, а все предыдущие сменили индекс на+1. Тестер-то это имитация реала, только не с реальными котировками.
Victor Demihov
618
Victor Demihov 2016.01.10 19: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;
         }
      }
      
      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 год!

Victor Demihov
618
Victor Demihov 2016.01.10 19:23  
Вопрос снят. Был у меня затуп. Уже всё понятно, сам всё прогнал и удостоверился что всё корректно, на самом деле.
Alexey Viktorov
5179
Alexey Viktorov 2016.01.10 19:55  
Ну и слава Богу.
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий