Скачать MetaTrader 5

Массив с таймфреймами

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Timur Gatin
8140
Timur Gatin  

Нужно получить цену закрытия для всех таймфреймов.

Для трех таймфреймов вижу решение так: 

ENUM_TIMEFRAMES TF[21]={PERIOD_M1,PERIOD_M2,PERIOD_M3};
for(int n=0;n<3;n++)
  {
   CopyClose(_Symbol,TF[n],1,1,close);
  }

Для всех таймфреймов придется заполнять все 21 значение в TF[].

Есть ли более красивое и простое решение, чтобы обойтись без массива TF[]?

Alexander Puzanov
34075
Alexander Puzanov  
Timur Gatin:

Нужно получить цену закрытия для всех таймфреймов.

Для трех таймфреймов вижу решение так:

В вашем решении берётся цена текущего бара, самой красивое решение для этого случая - использовать последнюю цену Ask. Верно для любого ТФ :)
Timur Gatin
8140
Timur Gatin  
Alexander Puzanov:
В вашем решении берётся цена текущего бара, самой красивое решение для этого случая - использовать последнюю цену Ask. Верно для любого ТФ :)
Хитро)) А вообще пример условный, сейчас вставлю предпоследний бар.
Alexander Puzanov
34075
Alexander Puzanov  
Timur Gatin:
А вообще пример условный, сейчас вставлю предпоследний бар.
Тогда задача станет совсем абстрактной - чем в реале связаны XX-бар на ТФ M20 и W1?
Timur Gatin
8140
Timur Gatin  
Alexander Puzanov:
Тогда задача станет совсем абстрактной - чем в реале связаны XX-бар на ТФ M20 и W1?

Это не важно. Тут чисто программерски-перфекционистский интерес.

Например, если бы в ENUM_TIMEFRAMES значения шли по порядку, то можно было бы сделать что то вроде этого:

for(int n=1;n<=21;n++)
  {
   CopyClose(_Symbol,ENUM_TIMEFRAMES(n),1,1,close);
  }
Vasiliy Sokolov
27094
Vasiliy Sokolov  
Timur Gatin:

Нужно получить цену закрытия для всех таймфреймов.

Для трех таймфреймов вижу решение так: 

Для всех таймфреймов придется заполнять все 21 значение в TF[].

Есть ли более красивое и простое решение, чтобы обойтись без массива TF[]?

https://www.mql5.com/ru/articles/1334

У меня как-то так: 

CDictionary timeframes;
if(!timeframes.ContainsKey(PERIOD_M1))
   timeframes.Add(PERIOD_M1, new Series(PERIOD_M1));
double close1 = timeframes[PRIOD_M1].Close[1];
double close2 = timeframes[PRIOD_M1].Close[2];
int totalBars = timeframes[PRIOD_M1].Total();
...
Рецепты MQL5 - Реализуем ассоциативный массив или словарь для быстрого доступа к данным
Рецепты MQL5 - Реализуем ассоциативный массив или словарь для быстрого доступа к данным
  • 2015.03.23
  • Vasiliy Sokolov
  • www.mql5.com
В данной статье описывается специальный алгоритм, позволяющий эффективно получать доступ к элементам по их уникальному ключу. В качестве ключа может быть использован любой базовый тип данных, например ключом могут быть строки или целочисленные переменные. Такой контейнер данных принято называть словарем или ассоциативным массивом. С его помощью решать многие задачи становиться гораздо проще и эффективней.
Timur Gatin
8140
Timur Gatin  
Vasiliy Sokolov:

https://www.mql5.com/ru/articles/1334

У меня как-то так: 

Насколько понял, у вас с таймфреймами тоже довольно громоздко и неудобно получается.
Vasiliy Sokolov
27094
Vasiliy Sokolov  
Timur Gatin:
Насколько понял, у вас с таймфреймами тоже довольно громоздко и неудобно получается.
В смысле?
Timur Gatin
8140
Timur Gatin  
Vasiliy Sokolov:
В смысле?
Периоды все равно придется добавлять вручную.
Vasiliy Sokolov
27094
Vasiliy Sokolov  
Timur Gatin:
Периоды все равно придется добавлять вручную.
Почему вручную? Они автоматически добавятся, если их еще нет. В примере для простоты показано ручное добавление M1.
Timur Gatin
8140
Timur Gatin  
Vasiliy Sokolov:
Почему вручную? Они автоматически добавятся, если их еще нет. В примере для простоты показано ручное добавление M1.
Надо получше разобраться. Спасибо.
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий