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

 
Реter Konow:

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

Конкретный таймфрейм не имеет значения, потому что это просто счетчик, который достигает своей величины и устанавливается событие нового бара этого таймфрейма. Это просто метод синхронизации с появлением новых баров разных таймфреймов. СИНХРОНИЗАЦИИ.

Инструмент тоже значения не имеет. Если котировки из одного сервера, то значит, время появления новых баров у них одно. Поэтому, не важно какой инструмент, пока эти инструменты из одной точки земного шара.


Я закончу то, что сказал и займусь другим вещами. Хорошего по-немногу.)

вы заблуждаетесь.

с уважением.

P.S. формирование нового бара начинается с прихода нового тика, что и является ценой открытия нового бара. в вашем алгоритме идет расчет по таймеру что никак не связано с приходом нового тика, отсюда и разногласия. по сути ваш алгоритм выдает не факт открытия нового бара, а начало времени после которого можно ждать приход первой котировки в баре.
 
Artyom Trishkin:

Это у вас, в вашем алгоритме считается, что бар открыт. На самом же деле - физически - в терминале его ещё нету. Это уже полная несогласованность с реалиями сервера.

Конкретный тф тоже имеет значение.

Равно, как и инструмент - это знают все, кто хоть раз приближался к мультивалютным программам.

Жаль, что вы не хотите собственноручно прийти к выводу, к которому вас ведём - наглядно, и на конкретно-осязаемом примере.

Для события нового бара нет разницы какой символ. Новые бары разных символов появляются синхронно (для каждого таймфрейма).

В таймере для каждого таймфрейма есть свой счетчик. Когда счетчик достигает значения своего таймфрейма, он обнуляется и устанавливается событие нового бара этого таймфрейма.

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

На этом всем спасибо и до свидания.

 
Реter Konow:

Для события нового бара нет разницы какой символ. Новые бары разных символов появляются синхронно (для каждого таймфрейма).

В таймере для каждого таймфрейма есть свой счетчик. Когда счетчик достигает значения своего таймфрейма, он обнуляется и устанавливается событие нового бара этого таймфрейма.

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

На этом разжевывать я закончил.

Всем спасибо и до свидания.

Не вы разжёвываете - ваша логика понятна. Но, к сожалению, она ошибочна. Нужно получать данные от торгового окружения - в итоге от сервера.

И если нет новой котировки на сервере, то и нет открытия нового бара в терминале.

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

И, уж поверьте, разница в приходе котировок по разным символам даёт разницу и в открытии нового бара - начало построения нового бара активизируется лишь с приходом тика (котировки), соответствующей времени этого бара. Если тик пришёл спустя 4 минуты 15 секунд после закрытия последнего бара на М1, то три бара будут пропущены, так как нет котировки, по которой их строить.

Я вам дал подсказку.

 
Andrey Kisselyov:
вы заблуждаетесь.

с уважением.

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

Да по таймеру. Новый бар возникает и без котировки. Нас интересует именно событие появления бара, а котировку мы можем зафиксировать в ОnTick();

Бар в любом случае появится. Если это выходные и баров нет, то не страшно. Функция не собьется и к моменту начало сессии будет по прежнему синхронизирована с приходом баров.

 
Artyom Trishkin:

Не вы разжёвываете - ваша логика понятна. Но, к сожалению, она ошибочна. Нужно получать данные от торгового окружения - в итоге от сервера.

И если нет новой котировки на сервере, то и нет открытия нового бара в терминале.

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

И, уж поверьте, разница в приходе котировок по разным символам даёт разницу и в открытии нового бара - начало построения нового бара активизируется лишь с приходом тика (котировки), соответствующей времени этого бара. Если тик пришёл спустя 4 минуты 15 секунд после закрытия последнего бара на М1, то три бара будут пропущены, так как нет котировки, по которой их строить.

Я вам дал подсказку.

Котировки получайте из OnTick(). Можете связать событие открытия нового бара с подтверждением прихода котировки. Я бы так делать не стал. Но это личное дело каждого.
 
Реter Konow:

Да по таймеру. Новый бар возникает и без котировки. Нас интересует именно событие появления бара, а котировку мы можем зафиксировать в ОnTick();

Бар в любом случае появится. Если это выходные и баров нет, то не страшно. Функция не собьется и к моменту начало сессии будет по прежнему синхронизирована с приходом баров.

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


с уважением.

 

Artyom Trishkin:

И, уж поверьте, разница в приходе котировок по разным символам даёт разницу и в открытии нового бара - начало построения нового бара активизируется лишь с приходом тика (котировки), соответствующей времени этого бара. Если тик пришёл спустя 4 минуты 15 секунд после закрытия последнего бара на М1, то три бара будут пропущены, так как нет котировки, по которой их строить.


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

 
Andrey Kisselyov:
допустим вы хотите по событию начала нового бара брать показания индикатора на 1 и 2 барах. исходя из логики вашего алгоритма вы получите начала нового бара раньше чем придет котировка и бар появиться на графике, как следствие при попытке считать показания индикатора вы получите значения не 1 и 2 баров как положено при приходе котировки, а значения 1 и 2 баров которые при приходе новой котировки сдвинутся на  1 бар и будут, 2 и 3 баром. что явно скажется на работе самого советника.


с уважением.

Возможно. Добавьте проверку прихода котировки на каждом событии нового бара и все. Работайте не с событием нового бара, а с событием бара и котировки, например.
 
Реter Konow:
Возможно. Добавьте проверку прихода котировки на каждом событии нового бара и все. Работайте не с событием нового бара, а с событием бара и котировки, например.
мне этот алгоритм не нужен, это ваше детище, я просто просматривал его на предмет ошибок и возможных улучшений, гимнастика для мозгов так сказать.

с уважением.
 
Реter Konow:
Котировки получайте из OnTick(). Можете связать событие открытия нового бара с подтверждением прихода котировки. Я бы так делать не стал. Но это личное дело каждого.

Я же знаю как получать котировки :)

В мультивалютной программе - в таймере в цикле по нужным символам. А открытие нового бара (физическое, а не виртуальное - ошибочное - как у вас) контролируется по времени последней котировки и сравнения этого времени с временем нулевого бара символа.

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

И, понимаете, что это вы один так бы делать не стали. Остальные делают так, как правильно и надёжно. Но это, конечно же, только ваше личное дело.

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

Но вы наверное больше знаете, и не нужно оно вам. Не смею больше выглядеть перед вами чего-то знающим. Извините.