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

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

И в реальном времени при работе индикатора rates_total и Bars() будут увеличиваться. В OnInit() вы не сможете получить rates_total, т.к. параметр в функцию не передается. Проверку истории нужно в любом случае проводить в OnCalculate().

 
Доброго всем времени суток! Прошу помощи в поиске советника. Нужен бокс (коробка) с выставлением времени сессии, разбивкой на три ордера в каждую сторону, функциями трэйлинга и стоп лосс. Я уже просто утонул в поисках на просторах. Я почти на краю пропасти, ещё чуть-чуть и я начну изучать язык и эдитор, чтобы самому написать!!! ПОМОГИТЕ!!!
 
Alexey Kozitsyn:

И в реальном времени при работе индикатора rates_total и Bars() будут увеличиваться. В OnInit() вы не сможете получить rates_total, т.к. параметр в функцию не передается. Проверку истории нужно в любом случае проводить в OnCalculate().

Т.е. нужно сделать отдельно индикатор, где сделать проверку на количество баров и если все ок, то заполнить графический буфер единицей, и соответственно в советнике ждать пока не получим единицу от индикатора, и только после этого продолжать работу, так?
 
-Aleks-:
Т.е. нужно сделать отдельно индикатор, где сделать проверку на количество баров и если все ок, то заполнить графический буфер единицей, и соответственно в советнике ждать пока не получим единицу от индикатора, и только после этого продолжать работу, так?
Конечно нет... зачем такие сложности... Давайте еще раз. Какая цель? Получить всю доступную для расчетов историю?
 
Alexey Kozitsyn:
Конечно нет... зачем такие сложности... Давайте еще раз. Какая цель? Получить всю доступную для расчетов историю?

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

Я так думаю, что можно отследить конннект с терминалом, потом если он есть, то сделать проверку на изменение последнего бара по HLCO и если оно есть, то ждем, а если в течении х секунд нет, то делаем расчет. 

 
-Aleks-:

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

Я так думаю, что можно отследить конннект с терминалом, потом если он есть, то сделать проверку на изменение последнего бара по HLCO и если оно есть, то ждем, а если в течении х секунд нет, то делаем расчет. 

Советник использует какие-либо кастомные (пользовательские) индикаторы?

Например, можно поступить так: проверяете размер истории через Bars(). Далее, смотрите, если Bars() > prev_bars+1 (размер истории на предыдущем тике) - тогда сбрасываете полностью все сохраненные данные и делаете полный пересчет советника с нуля. Эту конструкцию вставить первой в OnTick().

Не надо заморачиваться за коннект к терминалу, паузы и т.п. Самый простой вариант, чаще всего, самый лучший. 

 
Alexey Kozitsyn:

Советник использует какие-либо кастомные (пользовательские) индикаторы?

Например, можно поступить так: проверяете размер истории через Bars(). Далее, смотрите, если Bars() > prev_bars+1 (размер истории на предыдущем тике) - тогда сбрасываете полностью все сохраненные данные и делаете полный пересчет советника с нуля. Эту конструкцию вставить первой в OnTick().

Не надо заморачиваться за коннект к терминалу, паузы и т.п. Самый простой вариант, чаще всего, самый лучший. 

Советник много чего использует, в том числе и индикаторы.

Я так понимаю, при предложенном варианте перерасчет будет на каждом баре, или я не прав? 

 
-Aleks-:

Советник много чего использует, в том числе и индикаторы.

Я так понимаю, при предложенном варианте перерасчет будет на каждом баре, или я не прав? 

Нет, почему на каждом? Полный пересчет эксперта будет только в том случае, если к истории добавилось более 1 бара! Если добавился 1 бар (образовался новый бар) - полного пересчета не будет.

Если Вы используете индикаторы, а в них есть глобальные переменные, то их нужно обнулять при первом запуске обязательно. Иначе на графике могут появляться артефакты/некорректно отображаться индикаторы. 

 
Alexey Kozitsyn:

Нет, почему на каждом? Полный пересчет эксперта будет только в том случае, если к истории добавилось более 1 бара! Если добавился 1 бар (образовался новый бар) - полного пересчета не будет.

Если Вы используете индикаторы, а в них есть глобальные переменные, то их нужно обнулять при первом запуске обязательно. Иначе на графике могут появляться артефакты/некорректно отображаться индикаторы. 

Не обратил внимание на +1 , спасибо, думаю это неплохой вариант.
 
Подскажите пожалуйста, от чего такое может получаться?

double A;
int x, y;

x=100; y=3; A=x/y=33.000
Причина обращения: