Мт4 Конец поддержке. - страница 33

 
Там есть еще проблема со временем начала отсчета. Что то не вовремя фиксирует начало бара. Позже разберусь.
 
Nikolai Semko:

Петр, у меня тоже не работает.
Странный у тебя стиль программирования. А можно всё это хозяйство со всеми переменными и циклами из OnInit и OnTimer засунуть в одну процедуру. Если кто-то захочет этим пользоваться ведь этот код будет мешаться под ногами. А если подобных процедур с таким же обвесом будет штук 20 ? Ведь Здесь то это реализовано.


Да не ищет Петр легких путей...

 
Реter Konow:
Там есть еще проблема со временем начала отсчета. Что то не вовремя фиксирует начало бара. Позже разберусь.

Начало бара не всегда бывает точно по времени.

Бывает вообще бары пропускаются.
 
Nikolai Semko:

Петр, у меня тоже не работает.
Странный у тебя стиль программирования. А можно всё это хозяйство со всеми переменными и циклами из OnInit и OnTimer засунуть в одну процедуру. Если кто-то захочет этим пользоваться, ведь этот обвес будет мешаться под ногами. А если подобных процедур с таким же обвесом будет штук 20 ? Ведь Здесь то это реализовано.

На минутке точно работает, но не вовремя фиксирует начало бара.

На других таймфреймах не проверял, потому что ждать долго надо.

Что касается стиля, то сейчас это не важно. Можно все вынуть из таймера и поместить в отдельную функцию. Просто я думал о самом решении, а не о будущих вариантах его интеграции.

 
Vladimir Pastushak:

Начало бара не всегда бывает точно по времени.

Да, я заметил, позже исправлю.
 
Реter Konow:

Я тут подумал, что если человек действительно имеет 600 инструментов в обзоре рынка и на каждом тике проверяет приход нового бара по каждому инструменту и каждому таймфрейму, то может быть накладно...

Сам то я не торгую, потому не знаю точно, сколько раз нужно вызывать эту функцию на практике.

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

Я сократил один цикл в функции.

Да плюньте уже...

Вот пример моего класса специально для этого действа. Не шедевр конечно, но это моё, мне понятное и работающее.

class CNewBar
{
protected:
  MqlRates newBarRates[];
public:
 bool newBar();
 bool newBar(ENUM_TIMEFRAMES timeframe, datetime & tOld);
};/********************************************************************/

bool CNewBar::newBar()
{
 static datetime timeLastBar;
  if(CopyRates(_Symbol, PERIOD_CURRENT, 0, 1, newBarRates) < 0)
   return(false);
  bool ret = timeLastBar != newBarRates[0].time;
   if(ret)
    timeLastBar = newBarRates[0].time;
   return(ret);
}/********************************************************************/

bool CNewBar::newBar(ENUM_TIMEFRAMES timeframe, datetime & tOld)
{
  if(CopyRates(_Symbol, timeframe, 0, 1, newBarRates) < 0)
   return(false);
    datetime tNew = newBarRates[0].time;
   bool ret = tOld != tNew;
   if(ret)
    tOld = tNew;
   return(ret);
}/********************************************************************/

Если нужно определить только на текущем ТФ то вызывается функция без параметров.

Соответственно если это размещено в .mqh то библиотека должна быть подключена

#include <путь_папка\имя_файла.mqh>
CNewBar newBar;

и вызывается в OnTick()

if(newBar.newBar())
 Print("Новый бар на текущем ТФ");

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

static datetime oldD1 = 0, oldH1 = 0;

if(newBar.newBar(PERIOD_H1, oldH1) && newBar.newBar(PERIOD_D1, oldD1)
 Print("Открылся новый день и новый час");

Такой подход эффективен при работе на ТФ отличном от требуемого и защищает от проблем связанных со случайным переключением ТФ графика на котором работает советник.

 
Nikolai Semko:

Петр, у меня тоже не работает. Хотя алгоритм весьма быстр, зря бочку гонят. Правда пока не рабочий. Нет времени разбираться.
Странный у тебя стиль программирования. А можно всё это хозяйство со всеми переменными и циклами из OnInit и OnTimer засунуть в одну процедуру. Если кто-то захочет этим пользоваться, ведь этот обвес будет мешаться под ногами. А если подобных процедур с таким же обвесом будет штук 20 ? Ведь Здесь то это реализовано.


Может вы не знаете, что такое "быстро"?

 
Alexey Viktorov:

Да плюньте уже...

Вот пример моего класса специально для этого действа. Не шедевр конечно, но это моё, мне понятное и работающее.

Если нужно определить только на текущем ТФ то вызывается функция без параметров.

Соответственно если это размещено в .mqh то библиотека должна быть подключена

и вызывается в OnTick()

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

Такой подход эффективен при работе на ТФ отличном от требуемого и защищает от проблем связанных со случайным переключением ТФ графика на котором работает советник.


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

 
Alexey Viktorov:

Да плюньте уже...

Вот пример моего класса специально для этого действа. Не шедевр конечно, но это моё, мне понятное и работающее.

Если нужно определить только на текущем ТФ то вызывается функция без параметров.

Соответственно если это размещено в .mqh то библиотека должна быть подключена

и вызывается в OnTick()

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

Такой подход эффективен при работе на ТФ отличном от требуемого и защищает от проблем связанных со случайным переключением ТФ графика на котором работает советник.

а как насчет других символов? задача стояла определить смену тф на любом символе из обзора рынка для любого тф .

с уважением.
 
Alexey Viktorov:

Да плюньте уже...

Вот пример моего класса специально для этого действа. Не шедевр конечно, но это моё, мне понятное и работающее.

Если нужно определить только на текущем ТФ то вызывается функция без параметров.

Соответственно если это размещено в .mqh то библиотека должна быть подключена

и вызывается в OnTick()

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

Такой подход эффективен при работе на ТФ отличном от требуемого и защищает от проблем связанных со случайным переключением ТФ графика на котором работает советник.

Ваше решение хорошо работает? Если хорошо, то все отлично.

А как в случае с сотнями инструментов, - накладки не будет?