Тестер стратегий для мультивалютного советника - страница 3

 
Пс. Я не против графиков без дыр, но и смысла в них не вижу.

Ппс. На секундном таймфрейме (если бы он был) тоже заполнять пропуски, рисуя огромные горизонтальные полки? 

Пппс. Насколько я понимаю, ваша проблема не в пропущенных барах, а в синхронизации. Решается парой функций на 5 строк. Быстрее сделать, чем обсуждать. 
 
Andrey Khatimlianskii:
Возвращаемся к моему первому ответу:
Нужно либо ждать появления бара на всех используемых инструментах (далеко не всегда первый тик нового бара приходит одновременно), либо определять новый бар по TimeCurrent, а в анализе делать поправку на то, появился 0-й бар на инструменте или нет (если появился, индекс последнего сфомированного бара будет равен 1, а если нет, то 0).

По поводу корректности построения индикаторов вопрос спорный. Но не вижу смысла разводить еще один халивор. 

Вы работаете на м1? Или нашли пропуски где-то еще? 
Были бы тиковые графики, работал бы на них ))
Пропуски баров выше м1 в априори не должны быть, так как тайм фреймы выше м1 строятся из минутных баров.
А за эти пропуски на м1 я узнал из статьи, чему был удивлён.
По этому подумал так же и за тики, если тик не изменил цену, то он пропускается по временной метке.
Но если это не так, то я ошибаюсь по поводу тиков.
Хотя если доступны дополнительные флаги для тиков, то по идее пропускаться не должны по времени.
Остаётся вопрос их правильная синхронизация. 
А с синхронизацией баров надо подумать над вашим предложенным решением.
Вот и вопрос, почему это не сделано всё из коробки? Ведь кастомные символы для этого и предназначены, для построения мультивалютности.
Так же не раскрыт вопрос мультивалютных кастомных символов, они строятся на основе имеющихся в истории тиков?
Или на основе сформировавшихся баров м1 из этой тиковой истории?
 
Andrey Khatimlianskii:

Ппс. На секундном таймфрейме (если бы он был) тоже заполнять пропуски, рисуя огромные горизонтальные полки? 

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

 

До меня дошла ваша фраза нужен синхронный OnTick, полностью поддерживаю что необходим OnTickSync.
Вот как раз в этом обработчике и нужно реализовать заполнение пропусков для корректной синхронизации.

Подумал над вашим предложением если ждать появление нового тика или бара.
Метод по сути рабочий, но не корректный по синхронизации.
Представь синтетику из десяти и более инструментов, и чтобы получить конечное значение синтетики
по каждому инструменту должен пройти тик, иначе ждём его прихода.
Да как бы синхронность есть, но с лагом который зависит от прихода тика. А это уже не корректная синхронность.
Представь синтетику на какой ни будь американский фондовый сектор. Где в секторе инструментов за сотню. Такой себе стресс тест, сразу на проверку.
По этому ждать новый тик или новый бар, это однозначно не решение.

Определять новый тик или бар по TimeCurrent, пока не доходит до меня логика реализации, для того чтобы потом ещё в анализе делать поправку.

 
Roman:

До меня дошла ваша фраза нужен синхронный OnTick, полностью поддерживаю что необходим OnTickSync.
Вот как раз в этом обработчике и нужно реализовать заполнение пропусков для корректной синхронизации.

Подумал над вашим предложением если ждать появление нового тика или бара.
Метод по сути рабочий, но не корректный по синхронизации.
Представь синтетику из десяти и более инструментов, и чтобы получить конечное значение синтетики
по каждому инструменту должен пройти тик, иначе ждём его прихода.
Да как бы синхронность есть, но с лагом который зависит от прихода тика. А это уже не корректная синхронность.
Представь синтетику на какой ни будь американский фондовый сектор. Где в секторе инструментов за сотню. Такой себе стресс тест, сразу на проверку.
По этому ждать новый тик или новый бар, это однозначно не решение.

Определять новый тик или бар по TimeCurrent, пока не доходит до меня логика реализации, для того чтобы потом ещё в анализе делать поправку.

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

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

Если анализируются бары (или индикаторы, построенные по барам), в обоих случаях нужно правильно вычислить индекс последнего сформированного бара (и всех других баров, если нужно):

  • получаем время самого свежего бара из всех инструментов (например, в 10:00 пришел тик по EURUSD и появился новый бар М1)
  • для инструментов, у которых время 0-го бара совпадает с полученным выше, используем обычную индексацию (0 - бар 10:00, 1 - бар 09:59, 2 - бар 09:58)
  • для инструментов, у которых время 0-го бара меньше (еще не появился бар 10:00, потому что не было тиков), корректируем индекс на кол-во пропущенных баров (если пропущен 1, то индекс 0 = бар 09:59, 1 = бар 09:58, и т.д.)

Проблемы не вижу.


Метод решения определяется задачей. А конкретной задачи от вас нет, только общие рассуждения о том, как неудобно.

 
Andrey Khatimlianskii:

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

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

Если анализируются бары (или индикаторы, построенные по барам), в обоих случаях нужно правильно вычислить индекс последнего сформированного бара (и всех других баров, если нужно):

  • получаем время самого свежего бара из всех инструментов (например, в 10:00 пришел тик по EURUSD и появился новый бар М1)
  • для инструментов, у которых время 0-го бара совпадает с полученным выше, используем обычную индексацию (0 - бар 10:00, 1 - бар 09:59, 2 - бар 09:58)
  • для инструментов, у которых время 0-го бара меньше (еще не появился бар 10:00, потому что не было тиков), корректируем индекс на кол-во пропущенных баров (если пропущен 1, то индекс 0 = бар 09:59, 1 = бар 09:58, и т.д.)

Проблемы не вижу.


Метод решения определяется задачей. А конкретной задачи от вас нет, только общие рассуждения о том, как неудобно.

Вот, благодарю за развёрнутое пояснение, теперь есть пища для размышления в какую сторону строить логику ))
А что бы понять как сформулировать задачу, нужно по рассуждать ))
А задача, корректная мультивалютная синхронизация, как для тиков так и для баров.
Хотя для баров думаю даже излишне, если синхронизировать тики, то и бары автоматом будут синхронизированы.
 
Roman:
Вот, благодарю за развёрнутое пояснение, теперь есть пища для размышления в какую сторону строить логику ))
А что бы понять как сформулировать задачу, нужно по рассуждать ))
А задача, корректная мультивалютная синхронизация, как для тиков так и для баров.
Хотя для баров думаю даже излишне, если синхронизировать тики, то и бары автоматом будут синхронизированы.
Нет, с барами чуть сложнее. Но это только на М1, максимум на М5. 
 
Снова вводите меня в догадки, без пояснения )
Что означает сложнее? Тем что вы описали для баров?
А разве бары нужно синхронизировать если уже синхронизируются тики?
Как же правило, что все бары м1 формируются из тиков? А уже старшие бары из м1.
И если у нас изначально будут корректно синхронизированы тики,
то м1 автоматом должен быть синхронизирован. А старшие ТФ уже по принципу матрёшки.
Разве не так ?
 
Roman:
Снова вводите меня в догадки, без пояснения )
Что означает сложнее? Тем что вы описали для баров?
А разве бары нужно синхронизировать если уже синхронизируются тики?
Как же правило, что все бары м1 формируются из тиков? А уже старшие бары из м1.
И если у нас изначально будут корректно синхронизированы тики,
то м1 автоматом должен быть синхронизирован. А старшие ТФ уже по принципу матрёшки.
Разве не так ?

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

Но стандартные инструменты строятся только если в течении бара был хоть один тик. Поэтому если анализировать несколько инструментов, может быть рассинхронизация.

Но не хочется продолжать рассуждения без конкретной задачи.

 
Andrey Khatimlianskii:

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

Но стандартные инструменты строятся только если в течении бара был хоть один тик. Поэтому если анализировать несколько инструментов, может быть рассинхронизация.

Но не хочется продолжать рассуждения без конкретной задачи.

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

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