Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 866

 
Aleksey Vyazmikin:

Хорошо, переходим на визуализацию мыслей :)

Белым цветом показал где делаем запрос, желтым время бара, которое мы должны получить.

Так понятней? Если нет, то прошу задавать уточняющие вопросы.

Алексей, постом выше вы делали запрос об ОБРАТНОЙ задаче..

"мне нужна дата последнего бара текущего таймфрейма, который относится к выбранному бару верхнего таймфрейма.

Так понятно?"

Поэтому трудно понять что Вам действительно нужно.

По предыдущему запросу - я ответил - https://www.mql5.com/ru/forum/6343/page869#comment_7537714.

Если по последнему "с визуализацией мыслей", то просто запросите время открытия бара верхнего ТФ со сдвигом 0.

Не совсем понятно - с чем возникла проблема?

Вопросы от начинающих MQL5 MT5 MetaTrader 5
Вопросы от начинающих MQL5 MT5 MetaTrader 5
  • 2018.05.23
  • www.mql5.com
Подскажите пожалуйста, такой показатель тестера в жизни реален? И хороший это или плохой результат за год с депо 3000...
 
Kirill Belousov:

Алексей, постом выше вы делали запрос об ОБРАТНОЙ задаче..

"мне нужна дата последнего бара текущего таймфрейма, который относится к выбранному бару верхнего таймфрейма.

Так понятно?"

Поэтому трудно понять что Вам действительно нужно.

По предыдущему запросу - я ответил - https://www.mql5.com/ru/forum/6343/page869#comment_7537714.

Если по последнему "с визуализацией мыслей", то просто запросите время открытия бара верхнего ТФ со сдвигом 0.

Не совсем понятно - с чем возникла проблема?

Извините, пропустил Ваш ответ.

Kirill Belousov:

Если я правильно понял Ваш запрос, то:

1. Определите время закрытия нужного бара верхнего ТФ.

Вот этого я и не могу сделать!

Kirill Belousov:

Если по последнему "с визуализацией мыслей", то просто запросите время открытия бара верхнего ТФ со сдвигом 0.

Не совсем понятно - с чем возникла проблема?

Если я так запрошу, то получаю 10:00, а мне нужно получить время 23:49!

 
Aleksey Vyazmikin:

Хорошо, переходим на визуализацию мыслей :)

Белым цветом показал где делаем запрос, желтым время бара, которое мы должны получить.

Так понятней? Если нет, то прошу задавать уточняющие вопросы.

Вопрос:

В 10:30 надо получить номер бара периода Н1 с временем 23:45 находясь на графике М5

Я правильно понял?

 
Alexey Viktorov:

Вопрос:

В 10:30 надо получить номер бара периода Н1 с временем 23:45 находясь на графике М5

Я правильно понял?

Мне нужно получить время 23:45 в данном случае (вообще же у меня не M5, а M1 текущий ТФ, но это не важно) - это время последнего бара текущего ТФ в структуре прошлого бара ТФ выше. Сдвиг на графике это 1 бар для H1, но может быть и другой сдвиг, допустим мне в 11 часов надо будет получить информацию, т.е. сдвиг будет 2.

 
Aleksey Vyazmikin:

Извините, пропустил Ваш ответ.

Вот этого я и не могу сделать!

Если я так запрошу, то получаю 10:00, а мне нужно получить время 23:49!

1. Определите сдвиг (бар), который нужен для старшего ТФ. - время между открытием и закрытием этого бара (насколько я вас понял) вы анализируете на предмет имеющихся внутри него баров из младшего ТФ.

2. Получите время его открытия

3. Прибавьте длительность ТФ в секундах для этого ТФ ко времени открытия. - т.е. так вы получите время закрытия бара старшего ТФ.

4. Отнимите длительность младшего ТФ (если М1, то 60 секунд) - это время открытия последнего бара младшего ТФ в структуре старшего ТФ. Найдите сдвиг этого бара на основе вычисленного времени. (Можете просто от времени закрытия бара старшего ТФ отнять 2-3 секунды и найти бар младего ТФ, к которому относится это время). Если запрос делать НЕ строгим, то как раз полУчите ближайший имеющийся бар слева (от запрошенного времени), если вдруг последнего бара на младшем ТФ нет.

 
Kirill Belousov:

1. Определите сдвиг (бар), который нужен для старшего ТФ. - время между открытием и закрытием этого бара (насколько я вас понял) вы анализируете на предмет имеющихся внутри него баров из младшего ТФ.

2. Получите время его открытия

3. Прибавьте длительность ТФ в секундах для этого ТФ ко времени открытия. - т.е. так вы получите время закрытия бара старшего ТФ.

4. Отнимите длительность младшего ТФ (если М1, то 60 секунд) - это время открытия последнего бара младшего ТФ в структуре старшего ТФ. Найдите сдвиг этого бара на основе вычисленного времени. (Можете просто от времени закрытия бара старшего ТФ отнять 2-3 секунды и найти бар младего ТФ, к которому относится это время). Если запрос делать НЕ строгим, то как раз полУчите ближайший имеющийся бар слева (от запрошенного времени), если вдруг последнего бара на младшем ТФ нет.

Не поверите, но час назад написал похожий алгоритм на бумаге! Только это как то муторно, думал, что есть более простой способ.

Только пункт 4 может не работать, у меня проверка наоборот на выход бара за пределы, т.е. если ситуация не стандартная, то придется циклом подбирать время пока не выйдем за диапазон.

 
Комментарии, не относящиеся к этой теме, были перенесены в "Вопросы от начинающих MQL4 MT4 MetaTrader 4".
 

хочу объявить массив структур - вроде проблем нет, до тех пор пока не увидел где-то, что структура может иметь конструктор...

как объявить массив структур имеющих конструктор? (как избавиться обойти  эту конструкцию  я знаю)

работает:

struct MyStruct
  {
   int               arr[];
   int               size;
                     MyStruct(int sz){ if(ArrayResize(arr,sz)>0) size=sz; else Print(__FUNCTION__,"Ошибка инициализации массива"); }
                    ~MyStruct(){ ArrayFree(arr); size = -1; }
  };
//+------------------------------------------------------------------+
MyStruct cluster(100);

не работает, но хочу так:

struct MyStruct
  {
   int               arr[];
   int               size;
                     MyStruct(int sz){ if(ArrayResize(arr,sz)>0) size=sz; else Print(__FUNCTION__,"Ошибка инициализации массива"); }
                    ~MyStruct(){ ArrayFree(arr); size = -1; }
  };
//+------------------------------------------------------------------+
MyStruct cluster(100)[47];
 

Плохое решение. Вместо struct лучше использовать классы. Все то же самое, но можно работать через указатели

class MyClass : 
  {
   public:
   int               arr[];
   int               size;
                     MyStruct(int sz){ if(ArrayResize(arr,sz)>0) size=sz; else Print(__FUNCTION__,"Ошибка инициализации массива"); }
                    ~MyStruct(){ ArrayFree(arr); size = -1; } // этого не надо
  };
//+------------------------------------------------------------------+
MyClass * cluster[47];

for(int n = 0; n < 47; n++)
        cluster[n] = new MyClass;

Писал в браузере, вроде не напортачил. Я убег на часик.

 
Знаю, знаю, что класть переменные в public не комильфо, но времени нет.
Причина обращения: