Всем, добрый день!
Написал индикатор, который рисует спрэд между двумя фьючерсами. Есть две проблемы:
1) индикатор дико глючный, то отображается, то не отображается, то какую-то лабуду показывает (приходится нажимать обновить, и тогда вроде встает на место);
2) авторский алгоритм синхронизации цен двух фьючерсов: так как у фьючей частенько могут отсутствовать те или иные бары (из-за низкой ликвидности), то встала задача синхронизировать их бары, чтобы получить реальный спред между ними. Покопался на форуме и ничего по данной теме не нашёл. В итоге придумал такой способ: берём 4 таймсерии - время баров по инструменту №1, цены закрытия баров по инструменту №1, время баров по инструменту №2, цены закрытия баров по инструменту №2. При указании одинакового количества баров в таймсериях времени и цен закрытия по одному инструменту они будут идентичны, у второго инструмента они естественно будут свои, но тоже идентичные (привязка время и цены закрытия). Остаётся только синхронизировать время одного инструмента относительно другого. Ниже пример построения спреда на основе данных инструмента №1: берем i-ую цену закрытия инструмента №1 и отнимаем от него такую цену инструмента №2, чей индекс равен индексу массива времени инструмента №2, чьё значение времени совпало с массивом по инструменту №1. Благодаря такому способу индикатор можно построить хоть на первом хоть на втором инструменте, а можно и на вообще левом (например кинуть на график РТС спред между Газпромом и Лукойлом).
В общем ничего лучше придумать не смог,. Хотел выслушать Ваши предложения, может существует гораздо более простой красивый понятный и эффективный способ построить синхронизированный график спреда двух фьючерсов. Может он тогда и глючить перестанет, а может это я так "классно" пишу индикаторы...
Индикатор прикрепил к посту.
Заранее спасибо.
Надо брать цены бид и аск для построения спреда. График по ласт рисуется, а это будет не верно.
Максим, спасибо за уделенное внимание моей проблеме.
Есть пара комментариев к вашему ответу:
1) Цены произошедших сделок (last) не рисуются, это не форекс. Если имели в виду что-то иное, поясните подробнее, пожалуйста.
2) бид и аск это конечно хорошо, но это на порядок сложнее. Пробовал написать на них две доп линии для основного спреда, типа спред покупки и спред продажи. И даже один раз получилось (он кстати долго так рисовался), но потом, я что-то поменял в коде, и он у меня пропал и так больше и не появлялся)) если нужно, то могу скинуть и его код. И самый главный недостаток бид и акса: если мне не изменяет память то данные биду и аску хранятся за последние 2000 тиков, поэтому долгой истории на нём не поанализировать.
Поэтому, давайте, пожалуйста, для начала разберемся с построением спреда между двух инструментов на ценах закрытия. Всё-таки верен мой подход по синхронизации цен двух инструментов при помощи функции ArrayBsearch() или есть более простой метод?
Максим, спасибо за уделенное внимание моей проблеме.
Есть пара комментариев к вашему ответу:
1) Цены произошедших сделок (last) не рисуются, это не форекс.
С такими знаниями вам рановато писать такие индикаторы.
Всем, добрый день!
Написал индикатор, который рисует спрэд между двумя фьючерсами. Есть две проблемы:
1) индикатор дико глючный, то отображается, то не отображается, то какую-то лабуду показывает (приходится нажимать обновить, и тогда вроде встает на место);
2) авторский алгоритм синхронизации цен двух фьючерсов: так как у фьючей частенько могут отсутствовать те или иные бары (из-за низкой ликвидности), то встала задача синхронизировать их бары, чтобы получить реальный спред между ними. Покопался на форуме и ничего по данной теме не нашёл. В итоге придумал такой способ: берём 4 таймсерии - время баров по инструменту №1, цены закрытия баров по инструменту №1, время баров по инструменту №2, цены закрытия баров по инструменту №2. При указании одинакового количества баров в таймсериях времени и цен закрытия по одному инструменту они будут идентичны, у второго инструмента они естественно будут свои, но тоже идентичные (привязка время и цены закрытия). Остаётся только синхронизировать время одного инструмента относительно другого. Ниже пример построения спреда на основе данных инструмента №1: берем i-ую цену закрытия инструмента №1 и отнимаем от него такую цену инструмента №2, чей индекс равен индексу массива времени инструмента №2, чьё значение времени совпало с массивом по инструменту №1. Благодаря такому способу индикатор можно построить хоть на первом хоть на втором инструменте, а можно и на вообще левом (например кинуть на график РТС спред между Газпромом и Лукойлом).
В общем ничего лучше придумать не смог,. Хотел выслушать Ваши предложения, может существует гораздо более простой красивый понятный и эффективный способ построить синхронизированный график спреда двух фьючерсов. Может он тогда и глючить перестанет, а может это я так "классно" пишу индикаторы...
Индикатор прикрепил к посту.
Заранее спасибо.
Добрый день!
1. Нужно писать в раздел "Биржевой трейдинг"
2. Синхронизировать 2 фьючерса по барам не получится.
Нужно брать за основу бары одного из фьючерсов (лучше наиболее ликвидного SBRF 9.20)
3. Для полноты картины спреда необходимо брать не close, а тики и синхронизировать их с барами выбранного за основной фьючерс.
4. Чтобы пересчет был быстрый, нужно запоминать последнюю рассчитанную позицию.
Пример кода пересчета спрэда с синхронизацией времени бара
int pr_pos = 0; int sec_pos = 0; bool is_found; int pr_mem = 0; int sec_mem = 0; for(int i = 0; i < a_bars; i++) { is_found = false; while(pr_pos < pr_cnt) { if((ulong(data_time[i].time) <= ulong(pr_ticks[pr_pos].time)) && (ulong(data_time[i].time) + 60 > ulong(pr_ticks[pr_pos].time))) { pr_mem = pr_pos; while(sec_pos < sec_cnt) { if((ulong(data_time[i].time) <= ulong(sec_ticks[sec_pos].time)) && (ulong(data_time[i].time) + 60 > ulong(sec_ticks[sec_pos].time))) { is_found = true; sec_mem = sec_pos; if((sec_ticks[sec_pos].bid > 0.0) && (pr_ticks[pr_pos].ask > 0.0) && (sec_ticks[sec_pos].ask > 0.0) && (pr_ticks[pr_pos].bid > 0.0)) { data_time[i].hi_value = sec_ticks[sec_pos].bid - pr_ticks[pr_pos].ask; data_time[i].low_value = sec_ticks[sec_pos].ask - pr_ticks[pr_pos].bid; } break; } sec_pos++; } break; } pr_pos++; } if(is_found == false) { pr_pos = pr_mem; sec_pos = sec_mem; } }
С такими знаниями вам рановато писать такие индикаторы.
Ну раз вы такой умный, то может подскажете, как синхронизировать два ценовых ряда по ценам закрытия ;)
Добрый день!
1. Нужно писать в раздел "Биржевой трейдинг"
2. Синхронизировать 2 фьючерса по барам не получится.
Нужно брать за основу бары одного из фьючерсов (лучше наиболее ликвидного SBRF 9.20)
3. Для полноты картины спреда необходимо брать не close, а тики и синхронизировать их с барами выбранного за основной фьючерс.
4. Чтобы пересчет был быстрый, нужно запоминать последнюю рассчитанную позицию.
Пример кода пересчета спрэда с синхронизацией времени бара
Простотрейдер, большое спасибо вам за совет! Решение интересное, сейчас попробую, потом отпишусь.
Ну раз вы такой умный, то может подскажете, как синхронизировать два ценовых ряда по ценам закрытия ;)
Вам же все написали уже по сути вопроса. Нельзя строить спред по ценам сделок (а тем более по ценам закрытия!), так как в медленной ноге сделок может и не быть длительное время и, даже если они и будут, они будут несинхронизированны с ценами сделок быстрой ноги. Т.е. ценность такой информации равна нулю. Актуальные цены бид и аск в стакане есть всегда (или почти всегда), именно их и надо анализировать.
Максим, спасибо за уделенное внимание моей проблеме.
Есть пара комментариев к вашему ответу:
1) Цены произошедших сделок (last) не рисуются, это не форекс. Если имели в виду что-то иное, поясните подробнее, пожалуйста.
2) бид и аск это конечно хорошо, но это на порядок сложнее. Пробовал написать на них две доп линии для основного спреда, типа спред покупки и спред продажи. И даже один раз получилось (он кстати долго так рисовался), но потом, я что-то поменял в коде, и он у меня пропал и так больше и не появлялся)) если нужно, то могу скинуть и его код. И самый главный недостаток бид и акса: если мне не изменяет память то данные биду и аску хранятся за последние 2000 тиков, поэтому долгой истории на нём не поанализировать.
Поэтому, давайте, пожалуйста, для начала разберемся с построением спреда между двух инструментов на ценах закрытия. Всё-таки верен мой подход по синхронизации цен двух инструментов при помощи функции ArrayBsearch() или есть более простой метод?
Добрый день!
1. Нужно писать в раздел "Биржевой трейдинг"
2. Синхронизировать 2 фьючерса по барам не получится.
Нужно брать за основу бары одного из фьючерсов (лучше наиболее ликвидного SBRF 9.20)
3. Для полноты картины спреда необходимо брать не close, а тики и синхронизировать их с барами выбранного за основной фьючерс.
4. Чтобы пересчет был быстрый, нужно запоминать последнюю рассчитанную позицию.
Пример кода пересчета спрэда с синхронизацией времени бара
Простотрейдер, добрый день! Подскажите, пожалуйста, по вашему коду не совсем уловил:
1) Вы использовали функцию CopyTicksRange или CopyTicks?
2) В описании данных функций указано, что они могут копировать не более 2000 тиков, получается такой индикатор не сможет анализировать более дальнюю историю?
Вам же все написали уже по сути вопроса. Нельзя строить спред по ценам сделок (а тем более по ценам закрытия!), так как в медленной ноге сделок может и не быть длительное время и, даже если они и будут, они будут несинхронизированны с ценами сделок быстрой ноги. Т.е. ценность такой информации равна нулю. Актуальные цены бид и аск в стакане есть всегда (или почти всегда), именно их и надо анализировать.
Ребят, да я не спорю, что по заявкам точнее (хотя когда у меня недолгое время работал индикатор показывающий три спреда: ласт, аск-бид и бид-аск, то ласт большую часть времени ходил между последними двумя, что говорит о том, что на ликвидных инструментах спред по ласт в целом адекватный).
Давайте тогда разберемся как синхронизацию по аск/бид провести по возможности наименее ресурсозатратно и желательно с глубокой историей.
Вот например простотрейдер предложил интересный вариант (выше).
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем, добрый день!
Написал индикатор, который рисует спрэд между двумя фьючерсами. Есть две проблемы:
1) индикатор дико глючный, то отображается, то не отображается, то какую-то лабуду показывает (приходится нажимать обновить, и тогда вроде встает на место);
2) авторский алгоритм синхронизации цен двух фьючерсов: так как у фьючей частенько могут отсутствовать те или иные бары (из-за низкой ликвидности), то встала задача синхронизировать их бары, чтобы получить реальный спред между ними. Покопался на форуме и ничего по данной теме не нашёл. В итоге придумал такой способ: берём 4 таймсерии - время баров по инструменту №1, цены закрытия баров по инструменту №1, время баров по инструменту №2, цены закрытия баров по инструменту №2. При указании одинакового количества баров в таймсериях времени и цен закрытия по одному инструменту они будут идентичны, у второго инструмента они естественно будут свои, но тоже идентичные (привязка время и цены закрытия). Остаётся только синхронизировать время одного инструмента относительно другого. Ниже пример построения спреда на основе данных инструмента №1: берем i-ую цену закрытия инструмента №1 и отнимаем от него такую цену инструмента №2, чей индекс равен индексу массива времени инструмента №2, чьё значение времени совпало с массивом по инструменту №1. Благодаря такому способу индикатор можно построить хоть на первом хоть на втором инструменте, а можно и на вообще левом (например кинуть на график РТС спред между Газпромом и Лукойлом).
В общем ничего лучше придумать не смог,. Хотел выслушать Ваши предложения, может существует гораздо более простой красивый понятный и эффективный способ построить синхронизированный график спреда двух фьючерсов. Может он тогда и глючить перестанет, а может это я так "классно" пишу индикаторы...
Индикатор прикрепил к посту.
Заранее спасибо.