Советники: New_Bar (условие, определяющее появление нового бара, реализованно в виде микросоветника)

 
Владимир, это самое плохое решение…
 
Alexey Viktorov #:
Владимир, это самое плохое решение…

Добрый вечер, Алексей! Мне нужно было такое решение для другого своего советника, поэтому оно меня устраивает. Если кто-то в одной строке кода напишет САМОЕ ЛУЧШЕЕ условие, определяющее открытие нового бара и поделится со всеми, то буду только рад. С уважением, Владимир.

 
MrBrooklin #:

Добрый вечер, Алексей! Мне нужно было такое решение для другого своего советника, поэтому оно меня устраивает. Если кто-то в одной строке кода напишет САМОЕ ЛУЧШЕЕ условие, определяющее открытие нового бара и поделится со всеми, то буду только рад. С уважением, Владимир.

Ну вот появился новый бар… Volume == 1, считаем что появился новый бар… Но с первым тиком бывает Volume равно и 2, и 3… Тогда новый бар не наступил?

 
Alexey Viktorov #:

Ну вот появился новый бар… Volume == 1, считаем что появился новый бар… Но с первым тиком бывает Volume равно и 2, и 3… Тогда новый бар не наступил?

У меня другое условие Volume <= 1, т.е. либо ноль, либо единица. Когда появляется новый бар, счётчик тикового объема бара автоматически обнуляется и условие выполняется.

С уважением, Владимир.

 
MrBrooklin #:

У меня другое условие Volume <= 1, т.е. либо ноль, либо единица. Когда появляется новый бар, счётчик тикового объема бара автоматически обнуляется и условие выполняется.

С уважением, Владимир.

Всё правильно, НО¡¡¡ если на первом тике нового бара будет Volume 2 или 3, то этот новый бар не будет определён…

 
Alexey Viktorov #:

Всё правильно, НО¡¡¡ если на первом тике нового бара будет Volume 2 или 3, то этот новый бар не будет определён…

Алексей, давай ещё раз по порядку:

  1. Появляется новый бар, счетчик количества тикового объёма обнуляется и начинает считать тиковый объём.
  2. Досчитал он до конца действия текущего бара определённое количество тикового объёма и остановился, т.к. бар закрылся и наступило время открыться новому бару.
  3. Что при этом должен сделать счётчик? Ясное дело, что он должен обнулиться и начать снова считать тиковые объёмы, но уже на новом баре. И так по кругу.
  4. Закономерно и у меня возникает вопрос - По твоему мнению счетчик тикового объёма бара всё-таки не обнуляется?

С уважением, Владимир.

 
Согласен с Алексеем. Это плохое решение. Легко проворонить новый бар.
Намного лучше через iTime со статической переменной которая запоминает последний iTime
 
Nikolai Semko #:
Согласен с Алексеем. Это плохое решение. Легко проворонить новый бар.
Намного лучше через iTime

Здравствуйте, Николай! Критику принимаю, но будет лучше, если с доказательствами. Просто заявить, что это плохое решение, как-то не совсем серьёзно.

С уважением, Владимир.

 
MrBrooklin #:

Здравствуйте, Николай! Критику принимаю, но будет лучше, если с доказательствами. Просто заявить, что это плохое решение, как-то не совсем серьёзно.

С уважением, Владимир.

Очевидно же, что первый Volume на новом баре легко может быть больше единицы по очень многим причинам. Алексей это уже озвучил.
 
Nikolai Semko #:
Очевидно же, что первый Volume на новом баре легко может быть больше единицы по очень многим причинам. Алексей это уже озвучил.

Специально написал проверочный код

if(iOpen(_Symbol,PERIOD_CURRENT,0))
   Print(iVolume(_Symbol,PERIOD_CURRENT,0));

и запустил в OnTick().

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

С уважением, Владимир.

Причина обращения: