Пропустить первый тик бара. [РЕШЕНО] - страница 2

 
Alexey Viktorov:

Не сложились у меня все эти кубики.

Первый тик бара. rates_total > prev_calculated входим. Счётчик++

Второй тик бара. Счётчик == 1 входим. Работаем. Счётчик++

Дальше??? Где сбросить счётчик?

Или заклинило где-то в микросхеме моего процессора...

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Пропустить первый тик бара.

Alexey Viktorov, 2019.06.08 07:49

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

С новым баром всё предельно просто

if(rates_total > prev_calculated)
 // Новый бар есть

Но на втором тике сюда уже не зайдёт. А надо. Подкачка пропущенных баров истории не интересует.

Мыслей много, все перепутались и ни одна до конца не складывается.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Пропустить первый тик бара.

fxsaber, 2019.06.08 08:18

Счетчик на каждом вызове OnCalculate увеличивается. На условии выше - обнуляется.

Когда счетчик равен двум - запуск логики.



 

Встречал-ли кто ситуацию, что с первым тиком бара tick_volume[0] был-бы больше единицы?

Мысль такая.

if(rates_total > prev_calculated)
  {
   if(tick_volume[rates_total-1] == 1)
    return(rates_total-1);
   // при следующем входе будет второй тик. А дальше не будет нового бара
  }
ps; Это код из mql5. Проверяю в тестере на исторических данных. Для mql4 должно быть tick_volume[0]
 
Alexey Viktorov:

Игорь, читайте пожалуйста внимательно


читайте комментарии в моем коде, еще раз.. Ваш код

if(rates_total > prev_calculated)
 // Новый бар есть

это группа событий в терминале, а не факт открытия нового бара

если код у Вас "прямой до безобразия", тогда первый ответ на Ваш вопрос от @fxsaber решение Вашего вопроса

PS: prev_calculated==0 это первый запуск индикатора, это переключение ТФ, это обрыв связи, это подкачка истории - тут нужно проверять когда он сбрасывается, а когда нет, но в большинстве случаем сбрасывается при подкачке истории

это, еще кстати, обновление графика правой мышью и не хочу справку листать ЧартРедрав() или ВиндовсРедрав()?

 
Artyom Trishkin:


Вот именно это и не складывается в моём процессоре. Как только обнулил, возвращается условие входа.

 
Alexey Viktorov:

Таким образом пропустим первый тик, на втором отработаем. А как пропустить остальные тики до появления следующего бара?

Тут уж время открытия бара смотреть
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
 
Igor Makanu:

читайте комментарии в моем коде, еще раз.. Ваш код

это группа событий в терминале, а не факт открытия нового бара

если код у Вас "прямой до безобразия", тогда первый ответ на Ваш вопрос от @fxsaber решение Вашего вопроса

Если всё так просто сделайте пример, простой до безобразия, без учёта подкачки истории.

Задача: Первый тик пропускаем. На втором работаем. На третьем и всех последующих курим бамбук. С каждым следующим баром всё повторяется.

 
Alexey Viktorov:

Таким образом пропустим первый тик, на втором отработаем. А как пропустить остальные тики до появления следующего бара?

tick_volume[rates_total-1]==2, если нужно именно на втором тике. (Прошу прощения, для серийного массива указал выше)

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

 
Konstantin Nikitin:
Тут уж время открытия бара смотреть

Так время-то будет одно и то-же при каждом тике. Эти кубики тоже в моём мозгу не сложились. Сколько не смотри время, а оно неизмено до следующего бара.

 
Igor Zakharov:

tick_volume[rates_total-1]==2, если нужно именно на втором тике. (Прошу прощения, для серийного массива указал выше)

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

Да серийность-несерийность меня не пугает, я по-любому пойму что надо.

Вот именно это и беспокоит. Потому и вопрос: На первом тике встречалось-ли объём больше 1 или это чаще встречается на последующих тиках?

 
Igor Zakharov:

tick_volume[rates_total-1]==2, если нужно именно на втором тике. (Прошу прощения, для серийного массива указал выше)

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

это, возможно, потому что тики приходят пачками и индикатор их все усваивает...