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

 
Alexey Viktorov:

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

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

вот набросал, проверять не хочу, но логику этого кода думаю поймете:

staticint tick=0;
   staticdatetime t=0;
   if(t!=time[1])
     {
      tick++;     // эту строчку нужно или тут или в конце этого условия - проверить!
      if(tick>=2)
        {
         t=time[1];
         tick=0;
        }

     }
ждем новый бар, но запоминать время нового бара будем только по прошествии Х тиков
 
Alexey Viktorov:

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

//+------------------------------------------------------------------+
//| Пропустит на втором вызове нового бара                           |
//+------------------------------------------------------------------+
bool WorkNewBar(const datetime &time[])
{
#ifdef __MQL5__
        ArraySetAsSeries(time, true);
#endif
     static datetime time_bar = time[0];
     static bool check = false;
//---
     if( !check )
     {
          if( time_bar != time[0] )
          {
               time_bar = time[0];
               check = true;
          }
          return false;
     }
//---
     check = false;
     return true;
}
//+------------------------------------------------------------------+

??? Может так.

P.S. Для администрации!!! С правкой кода проблема. Некоторые строки сливает, а некоторые переводит в одну строку.
 
Igor Makanu:

вот набросал, проверять не хочу, но логику этого кода думаю поймете:

ждем новый бар, но запоминать время нового бара будем только по прошествии Х тиков

Возможно получится объединить эту идею с моей

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

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

Alexey Viktorov, 2019.06.08 09:05

Встречал-ли кто ситуацию, что с первым тиком бара 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]
Заменить tick_volume[rates_total-1] на static int счётчик.
 

Проблема решена. Всем спасибо. Все кубики сложились.

 static int tick = 1;
 if(rates_total > prev_calculated)
  {
   if(tick == 1)
    {
     tick++;
     return(rates_total-1);
    }
   tick = 1;
   // тут выполняем всё что надо.
  }
 return(rates_total);

И никак не зависим от количества тикового объёма пришедшего за один тик.

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

 
Alexey Viktorov:

Возможно получится объединить эту идею с моей

Заменить tick_volume[rates_total-1] на static int счётчик.

тут не подскажу, проверять поведение нужно, все лучше проверить сразу и забыть )))

я так проверил и  использую всегда для обнаружения нового бара исключительно время бара №1, я а многие запоминают время бара №0 - я проверял, когда то бывает синхронизация и время бара №0 может сбрасываться, а бар №1 он как бы всегда уже синхронизирован


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

 
Igor Makanu:

тут не подскажу, проверять поведение нужно, все лучше проверить сразу и забыть )))

я так проверил и  использую всегда для обнаружения нового бара исключительно время бара №1, я а многие запоминают время бара №0 - я проверял, когда то бывает синхронизация и время бара №0 может сбрасываться, а бар №1 он как бы всегда уже синхронизирован


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

Мне проще на исторических реальных тиках проверить в тестере МТ5.

 

Igor Makanu:

я так проверил и  использую всегда для обнаружения нового бара исключительно время бара №1, я а многие запоминают время бара №0 - я проверял, когда то бывает синхронизация и время бара №0 может сбрасываться, а бар №1 он как бы всегда уже синхронизирован

Вполне себе рабочий вариант. Проверять равенство времени без разницы на каком баре, главное чтоб не разные. А с приходом нового бара оно и на предыдущих сместится.

 
Alexey Viktorov:

Мне проще на исторических реальных тиках проверить в тестере МТ5.

у Вас задача другая, Вам не тики нужны, а события терминала, тестер МТ5 хорош, но событийной модели  я почему то ему не доверяю


Konstantin Nikitin:

Вполне себе рабочий вариант. Проверять равенство времени без разницы на каком баре, главное чтоб не разные. А с приходом нового бара оно и на предыдущих сместится.

я не спорю, но мне бар №1 больше нравится бара №0... так сказать дело вкуса )))

 
Igor Makanu:

у Вас задача другая, Вам не тики нужны, а события терминала, тестер МТ5 хорош, но событийной модели  я почему то ему не доверяю

Как не тики если в заголовке темы написано именно о тиках?

Немного расшарю задачу. На двух терминалах, подключенных к разным брокерам один и тот-же индикатор показывает иногда разные, а иногда одинаковые значения. Задача отловить одинаковые значения индикатора на разных счетах. Решил делать через запись в файл. При первом тике бара "писатель" пишет, а читатель читает этот файл. Но иногда бывает, что писатель ещё не записал, а читатель уже пытается прочесть. В этот момент вылетает ошибка открытия файла. Для предотвращения такой ошибки и было решено чтение отложить до второго тика. Так сказать дать время писателю на запись файла. Пропуск одного тика читателя, ни на что не влияет.

 
Все равно, что вилами на воде писать.
Причина обращения: