Выполнение лимитированных заявок в HistoryTestTrader
Atom Ответить
17.02.2011


Попробовал выставлять лимитированные заявки: правильно ли я понял, что они выполнятся при условии, если цена ask из стакана(для заявки на покупку) опускается до цены ордера, и по цене ask (часто отличной от цены в ордере)?

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

Заранее спасибо



Спасибо:




48 Ответов
< 1 2 
Juri

Фотография
Дата: 22.02.2011
Ответить



Я имел ввиду, как будет исполнена такая заявка в при сушествующем методе матчинга?




Спасибо:

pyhta4og

Фотография
Дата: 22.02.2011
Ответить


Написал примитивный визуализатор тиков-стаканов что приходят через ITrader.

вот картинка полученная через Smart (на демосчете)



Красные столбцы - аски, зеленые - биды.
Сверху над асками - голубое время получения (LastChangeTime) в формате сек.миллисек
Трейды - просто цифры. Для трейдов таймстемп с биржи.

Что видно.

1) самое важное. Когда приходили трейды помеченные по времени как 23.00 (повышающаяся лесекнка), стаканы с бидами=цене трейдов
не приходили. Поэтому если мы имитируем заявку помеченную на рисунке как <1> по тем стаканам что на рисунке,
то она НЕ ВЫПОЛИТСЯ. Нет бидов по которым сгенерировались сделки на рисунке. Точнее, в природе на бирже они были,
но нам их не передали. Передали сделки и пустой "стакан после"

Это аргумент в пользу Juri
Цитата:

Файл всех сделок является вполне достоверным. И там отражены ВСЕ сделки, а не только те что мы видели.
Стакан же всего лишь снимок состояния, и что было между этими снимками мы не знаем. Чтобы построить достоверный стакан нужно иметь файл всех заявок, а такого я не встречал (наверо на бирже то есть).


2) стакан помеченный как "стакан после" передался смарттрейдом ДО того как передались сделки которые привели к такому стакану.
Визуализатор рисует все в порядке получения событий NewQuotes, NewTrades из ITrader.




Далее. Давайте рассмотрим вопрос как имитировать исполнение наших фиктивные лимитки в случае неполной (редкой) информации по стакану.

Т.е. входные данные:
1) Срезы реального стакана. Поставляются нам с периодом 1 секунда и не отражают промежуточных состояний стакана
2) Реальные сделки. Поставляются нам все, но в смарте могут запаздывать относительно срезов стакана.
3) Наши фиктивные лимитки.

По этим данным надо понять, исполнятся фиктивные лимитки или нет.

Тут несколько случаев:
Случай А. Фиктивная лимитка при выставлении матчится с последним срезом реального стакана. Проблем нет, сразу ее исполняем.
Случай Б. Новый срез реального стакана матчится с выставленной ранее фиктивной лимиткой. Тоже проблем нет, исполняем

Эти два случая уже я так понял реализованы в S#

Есть третий случай. В срезах стакана не отражены те заявки, которыми были реальные сделки. А по этим заявкам наши
фиктивные лимитки тоже с удовольствием поматчились бы. Значит, их надо добавить. Т.е. когда приходит сделка, добавляем ее в стакан
и как бид и как аск. В итоге фиктивные лимитки матчатся об эти заявки.

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



Если кому надо сорсы примера с визулизатором закачал http://www.box.net/shared/g8k7452gdr
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 23.02.2011
Ответить


Ок, хороший анализ. Но есть к нему претензии:

1. Стакан обновляется чаще, чем раз в секунду. У Смарта. И у Квика. Можно в принципе простейший тест написать вывода в консоль при событие QuotesChanged. Почему на картинках обновление секундами? Хотя завтра можно проверить, вдруг у ИТ случились какие-то проблемы.

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

3. Уже сейчас есть метод HistoryTestTrader.IsMarketDepthChangeRequired. Он сделал как раз для случая, когда у нас отсутствуют стаканы на длительный период. Как тот, который вы указали на скрине. В этом методе как раз и используется та самая ликвидность инструмента, что передается в конструктор HistoryTestTrader через securitySettings. И стакан генерируется на основе тиковых сделок.

Собственно, о чем спор? Верить или не верить стакану? Я думаю, что ему надо верить, и сохраненный стакан только улучшает качество тестирования. Но я это не проверял.

Если не верить, то можно же ведь просто отказаться от загрузки стаканов на период тестирования.
Спасибо:

pyhta4og

Фотография
Дата: 23.02.2011
Ответить


Изначально спор здесь был
как учитывать трейды для имитирования исполнения фиктивных заявок стратегии.

Вы настояли что исполнять надо трейды путем матчинга со стаканом и только со стаканом.

Я привел пример, когда данных о реальном стакане недостаточно для корректного исполнения заявки. Это на картинке обозначено как неисполнение заявки <1>. Именно, заявка селл по цене 184565 не будет исполнена симуляторром, хотя поток сделок поднявшийся с 184525 до 184585 должен был к этому привести

Вы сказали что есть генерация стакана когда он отсутствует длительное время через IsMarketDepthChangeRequired.

Это не совсем так

Трейды из рисунка пришли в один момент - с временем 23сек. Поэтому генератор стаканов вызовется только после всех этих трейдов. Т.е. если у 5 трейдов подряд абсолютно одинаковое время, то генератор стакана невозможно вызвать после каждого трейда - только после всей группы.

Это - причина по которой я предлагал трейдам с одинаковым таймстемпом искусственно ставить разные чтобы была возможность поставить достаточно маленький период генерации стакана чтобы он генерировался после каждого трейда



Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 23.02.2011
Ответить


pyhta4og Перейти
Трейды из рисунка пришли в один момент - с временем 23сек. Поэтому генератор стаканов вызовется только после всех этих трейдов. Т.е. если у 5 трейдов подряд абсолютно одинаковое время, то генератор стакана невозможно вызвать после каждого трейда - только после всей группы.


Ок, тогда я видимо не совсем Вас понял. Вернемся к картинке. По какому принципу голубым вверху проставляются цифры? Я думал это LastChangeTime, но так как там нет стаканов, то получается что это даты чего-то другого? По всей видимости время сделок. Тогда мне не понятно особенность периода в 23-ей секунде.

upd:

Так я кажется понял. Есть два стакана, на момент 22.24 и 23.40. Между ними были сделки по ценам, отмеченные лесенкой. Остался такой вопрос. Заявка <1> была выставлена в какой момент?
Спасибо:

pyhta4og

Фотография
Дата: 24.02.2011
Ответить


Цитата:

Ок, тогда я видимо не совсем Вас понял. Вернемся к картинке. По какому принципу голубым вверху проставляются цифры? Я думал это LastChangeTime, но так как там нет стаканов, то получается что это даты чего-то другого? По всей видимости время сделок. Тогда мне не понятно особенность периода в 23-ей секунде.

У трейдов голубеньким написано время биржи, т.е Trade.Time. Понятно что "время прихода" трейда (аналог LastChangeTime для стакана) будет не 23.00 а что то типа 24.00

У стакана пишется LastChangeTime


Цитата:

Так я кажется понял. Есть два стакана, на момент 22.24 и 23.40. Между ними были сделки по ценам, отмеченные лесенкой. Остался такой вопрос. Заявка <1> была выставлена в какой момент?


Точнее стаканы 23.40 и 24.35 (время стакана пишется над зеленым столбиком). Трейды лесенкой в реальности были между этими стаканами. Но из-за несинхронности получения стаканов и трейдов, стакан 24.35 пришел до трейдов.

Заявка <1> будем считать выставлена заранее, допустим в 19.00. Она останется висеть в эмуляторе.

У всех трейдов лесенки время Trade.Time=23.00. Поэтому какой бы "интервал перегенерации стакана " я ни передавал в HistoryTestTrader в конструктор, генератор стакана МЕЖДУ этими трейдами вызываться не будет. Поэтому не будет сгенерировано стаканов по этим трейдам (которые и могли бы привести к матчингу заявки <1>)

Спасибо:

andy

Фотография
Дата: 24.02.2011
Ответить


pyhta4og Перейти

По этим данным надо понять, исполнятся фиктивные лимитки или нет.

Тут несколько случаев:
Случай А. Фиктивная лимитка при выставлении матчится с последним срезом реального стакана. Проблем нет, сразу ее исполняем.
Случай Б. Новый срез реального стакана матчится с выставленной ранее фиктивной лимиткой. Тоже проблем нет, исполняем

Эти два случая уже я так понял реализованы в S#

Есть третий случай. В срезах стакана не отражены те заявки, которыми были реальные сделки. А по этим заявкам наши
фиктивные лимитки тоже с удовольствием поматчились бы. Значит, их надо добавить. Т.е. когда приходит сделка, добавляем ее в стакан
и как бид и как аск. В итоге фиктивные лимитки матчатся об эти заявки.


Спасибо за наглядную картинку, это именно то поведение которое я описывал. Пришли ли сделки позже или раньше сути дела не меняет: с ними наша фиктивная заявка все равно бы поматчилась.
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 24.02.2011
Ответить


pyhta4og Перейти

У всех трейдов лесенки время Trade.Time=23.00. Поэтому какой бы "интервал перегенерации стакана " я ни передавал в HistoryTestTrader в конструктор, генератор стакана МЕЖДУ этими трейдами вызываться не будет. Поэтому не будет сгенерировано стаканов по этим трейдам (которые и могли бы привести к матчингу заявки <1>)


Ок, теперь понял что к чему... Да, тут наверное, самым правильным решением было бы уменьшения интервала генерации стакана до нескольких раз в секунду, и эмуляции миллисекунд у тиков. Мне это видится как отдельная опция у HistoryTestTrader для генерации тиков (тоесть, я сугубо против записывать сэмулированные миллисекунды в файл, так как это нереальные данные). Как сейчас можно это сделать (на выбор):

1. Можно перегрузить метод HistoryTestTrader.ProcessData, и в нем сгенерировать равномерно миллисекунды для стакана.
2. Создать наследника MarketDepthGenerator, который бы по тикам генерировал стакан. Генерация бы происходила с учетом этих виртуальных миллисекунд. Мне кажется, это даже лучще, так как не модифицируются объекты Trade.
Спасибо:

Juri

Фотография
Дата: 24.02.2011
Ответить


Mikhail Sukhov Перейти


Ок, теперь понял что к чему... Да, тут наверное, самым правильным решением было бы уменьшения интервала генерации стакана до нескольких раз в секунду, и эмуляции миллисекунд у тиков. Мне это видится как отдельная опция у HistoryTestTrader для генерации тиков (тоесть, я сугубо против записывать сэмулированные миллисекунды в файл, так как это нереальные данные). Как сейчас можно это сделать (на выбор):

1. Можно перегрузить метод HistoryTestTrader.ProcessData, и в нем сгенерировать равномерно миллисекунды для стакана.
2. Создать наследника MarketDepthGenerator, который бы по тикам генерировал стакан. Генерация бы происходила с учетом этих виртуальных миллисекунд. Мне кажется, это даже лучще, так как не модифицируются объекты Trade.


Вы обсуждаете детали реализации, а методика еще не отработана.
Вы предлагаете растянуть на какой-то интервал по времени сделки прошедшие на бирже в один и тот же момент времени.
А это уже искажение реальности торговли.
И не говорите, что эти сделки прошли в разные моменты и лишь пришли к нам в одно время. Это не так.
Кто-то просто купил рыночной заявкой большим для данного стакана объемом и все.
Если разносить по времени такие сделки, то в тестере стратегия может успеть вклиниться между такими сделками, в то время как в реальной торговле это не возможно.

И еще.
Попробую на примере, который очень наглядно изображен на рисунке задать свой вопрос второй раз и чтобы сэкономить время сам же на него и отвечу Smile
Далее идут утверждения, соответствующие моему пониманию работы модели биржи, которая реализована в тестере.
Не исключено, что я не прав - тогда опровергните.
Предположим мы одним из предложенных выше способов сгенерировали стакан.
Он будет отличаться от реального стакана, изображенного на рисунке.
В данном случае, в момент сразу после 23.00 (то есть после прошедших в 23.00 сделок), скорее всего биды в сгенерированном стакане будут стоять выше, чем в реальном стакане.
Для определенности, пусть например это будет 184560.
И в этот самый момент мы выставляем на нашу виртуальную биржу (то есть тестер) виртуальную же рыночную заявку на продажу с минимальным объемом.
В нашем тестере она выполнится по цене 184560, а в реальности она бы выполнилась по цене 184500.
Разница слишком существенна для быстрых и скальперских стратегий.
Спасибо:

pyhta4og

Фотография
Дата: 25.02.2011
Ответить


Цитата:

Вы обсуждаете детали реализации, а методика еще не отработана.
Вы предлагаете растянуть на какой-то интервал по времени сделки прошедшие на бирже в один и тот же момент времени.
А это уже искажение реальности торговли.
И не говорите, что эти сделки прошли в разные моменты и лишь пришли к нам в одно время. Это не так.
Кто-то просто купил рыночной заявкой большим для данного стакана объемом и все.

Из-за того что нет милисекунд у трейдов непонятно, было это много маленьких маркет-ордеров или один большой.
Цитата:

Если разносить по времени такие сделки, то в тестере стратегия может успеть вклиниться между такими сделками, в то время как в реальной торговле это не возможно.

Тут получается такой вопрос: Давать или не давать стратегии торговать в середине потока сделок датированных на бирже одной и той же секундой?
Замечу, ведь в одной секунде могут и два маркетных ордера оказаться, один как на рисунке - жирный на покупку, второй - не менее жирный на продажу. И тогда получится лесенка вверх-лесенка вниз. И все "в один и тот же миг". Я полагаю у этих лесенок будет отличаться только время получения из смарта. Что-то типа первый набор ордеров 23.20 второй набор 23.50

Было бы разумным раз у стаканов у нас LastChangeTime - это время получения, добавить и трейдам аналогичное LastChangeTime - то же время получения и понаблюдать на картинке как группируются эти времена при "движухе". Тогда можно выработать эвристику деления потока сделок на отдельные неделимые рыночные ордера.

Вообще изначально я разнесение по миллисекундам хотел исключительно для того чтобы иметь возможность генерировать некие промежуточные стаканы по которым корректно проматчаться виртуальные заявки.

На самом деле и это все бесполезно. В базу же для трейдов только Time пишется. У лесенки Time=23.00 - биржевое, а у стаканов ей соответствующим LastChangeTime=24.35 - локальное. В HistoryTester соответственно все перепутается и промежуточные стаканы будут генерироваться между не теми реальными. Потому что пометку с биржи какому биржевому времени соответствует данный стакан нам не передают в отличие от сделок.

Цитата:

Предположим мы одним из предложенных выше способов сгенерировали стакан.
Он будет отличаться от реального стакана, изображенного на рисунке.
В данном случае, в момент сразу после 23.00 (то есть после прошедших в 23.00 сделок), скорее всего биды в сгенерированном стакане будут стоять выше, чем в реальном стакане.
Для определенности, пусть например это будет 184560.
И в этот самый момент мы выставляем на нашу виртуальную биржу (то есть тестер) виртуальную же рыночную заявку на продажу с минимальным объемом.
В нашем тестере она выполнится по цене 184560, а в реальности она бы выполнилась по цене 184500.
Разница слишком существенна для быстрых и скальперских стратегий.


Значит все еще хуже. Как не генерируй промежуточные стаканы по трейдам они будут неправильными.
Вывод - эмулятор должен явно использовать сделки помимо стаканов для матчинга. И эти сделки надо синхронизировать со стаканами. И сделать это можно только записывая в базу время прихода сделок аналогично LastChangeTime для стаканов.

Как-то все сложно получается :(
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.02.2011
Ответить


pyhta4og Перейти
И сделать это можно только записывая в базу время прихода сделок аналогично LastChangeTime для стаканов.


Это еще хуже. Сделки приходят блоками и даже реже, чем секунда. Там миллисекунды будут совершенно не те (даже секунды будут не те).
Спасибо:

Juri

Фотография
Дата: 27.02.2011
Ответить


Mikhail Sukhov Перейти
Это еще хуже. Сделки приходят блоками и даже реже, чем секунда.


Это не совсем так.
Вот небольшой фрагмент записи файла всех сделок сделанной мной через API QUIK.
Последнее поле это локальное время получения пакета сделок.

RTS-3.11,11:45:03,185820,1,Купля,275871384,24.02.2011 13:45:04.940
RTS-3.11,11:45:03,185835,2,Купля,275871399,24.02.2011 13:45:05.065
RTS-3.11,11:45:03,185845,1,Купля,275871400,24.02.2011 13:45:05.065
RTS-3.11,11:45:03,185830,2,Купля,275871402,24.02.2011 13:45:05.237
RTS-3.11,11:45:03,185825,1,Продажа,275871407,24.02.2011 13:45:05.237
RTS-3.11,11:45:03,185825,1,Продажа,275871408,24.02.2011 13:45:05.237
RTS-3.11,11:45:04,185830,2,Купля,275871420,24.02.2011 13:45:05.643
RTS-3.11,11:45:04,185830,1,Купля,275871421,24.02.2011 13:45:05.643
RTS-3.11,11:45:04,185825,1,Продажа,275871427,24.02.2011 13:45:05.643
RTS-3.11,11:45:04,185825,6,Продажа,275871431,24.02.2011 13:45:05.862
RTS-3.11,11:45:04,185825,5,Продажа,275871436,24.02.2011 13:45:05.862
RTS-3.11,11:45:04,185825,1,Продажа,275871437,24.02.2011 13:45:05.877
RTS-3.11,11:45:04,185820,1,Продажа,275871440,24.02.2011 13:45:05.877
RTS-3.11,11:45:04,185815,1,Продажа,275871441,24.02.2011 13:45:05.877
RTS-3.11,11:45:04,185815,2,Продажа,275871442,24.02.2011 13:45:05.877
RTS-3.11,11:45:04,185815,2,Купля,275871448,24.02.2011 13:45:05.877
RTS-3.11,11:45:04,185810,3,Продажа,275871449,24.02.2011 13:45:05.877
RTS-3.11,11:45:04,185810,3,Продажа,275871450,24.02.2011 13:45:05.877
RTS-3.11,11:45:04,185815,1,Купля,275871452,24.02.2011 13:45:06.205

Как видно за одну секунду пришло 5 пакетов со сделками. Вполне неплохо.

Mikhail Sukhov Перейти
Там миллисекунды будут совершенно не те (даже секунды будут не те).


Это вполне естественно, так как точно синхронизировать локальное время на компьютере с биржевым почти невозможно, да это и не нужно для моделирования. Если присмотреться то можно заметить, что у меня вообще время отличается от биржевого на 2 часа )
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 28.02.2011
Ответить


Juri Перейти
Mikhail Sukhov Перейти
Там миллисекунды будут совершенно не те (даже секунды будут не те).


Это вполне естественно, так как точно синхронизировать локальное время на компьютере с биржевым почти невозможно, да это и не нужно для моделирования. Если присмотреться то можно заметить, что у меня вообще время отличается от биржевого на 2 часа )


Тогда LastChangeTime для сделки не будет работать, как предлагал pyhta4og.
Спасибо:

pyhta4og

Фотография
Дата: 01.03.2011
Ответить


Mikhail Sukhov Перейти
Juri Перейти
Mikhail Sukhov Перейти
Там миллисекунды будут совершенно не те (даже секунды будут не те).


Это вполне естественно, так как точно синхронизировать локальное время на компьютере с биржевым почти невозможно, да это и не нужно для моделирования. Если присмотреться то можно заметить, что у меня вообще время отличается от биржевого на 2 часа )


Тогда LastChangeTime для сделки не будет работать, как предлагал pyhta4og.


Как раз наоборот. Раз сделки приходят более-менее быстро, то как раз введение LastChangeTime для сделок позволит на истории моделировать более реалистично, потому что по этому LastChangeTime можно хоть как-то синхронизировать записанные стаканы и сделки.

Вот простая ситуация. Я тестирую в реале. У меня в стратегию приходят стаканы и сделки в определенной последовательности. И те и другие опаздывают, но это РЕАЛЬНОСТЬ.

Я записываю все эти данные гидрой. Точнее пытаюсь

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

Я считаю что на истории данные надо прогонять по одной и той же временной метке. А сейчас единственный вариант - по LastChangeTime (локальному времени получения). Со всеми миллисекундами.


Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 01.03.2011
Ответить


pyhta4og Перейти
И те и другие опаздывают, но это РЕАЛЬНОСТЬ.


Но у них разная скорость запаздывания. У сделок она больше, которая компенсируется пакетным получением данных. Другими словами, стакан, который сейчас виден в Квик, вообще не соответствует тиковым сделкам, который так же видны в Квике.
Спасибо:

andy

Фотография
Дата: 04.03.2011
Ответить


Mikhail Sukhov Перейти
pyhta4og Перейти
И те и другие опаздывают, но это РЕАЛЬНОСТЬ.


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


Соглашусь с pyhta4og, в том что нужно скорее прогонять по локальному времени. Потому что хотя скорость потока у сделок и стаканов разная, разница эта не такая большая, как разница между биржевым временем и локальным (в случае, если мы берем их из одного источника).
Автор топика
Спасибо:

pyhta4og

Фотография
Дата: 04.03.2011
Ответить


Ну вот нас уже двое.

Мне кажется это уже повод на то чтобы фиче-реквест с введением Trade.LastChangeTime был рассмотрен ;)

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 13.03.2011
Ответить


Mikhail Sukhov Перейти

Juri Перейти

"Например, это может быть из-за того, что точность сделок секундная,"
Вообще странный аргмент,
а в частноси возмите например все сдели с биржи https://ftp.rtsnet.ru/pub...ory/F/2011/FT110221.zip
там время с точностью до мсек.


Посмотрел файл. Примерно 1 к 10 имеет миллисекундную точность. Остальное все в секундах. Подозреваю, что это какие-то особые сделки.


Вообщем, не так я смотрел. Я смотрел через Excel, а надо было через Notepad. В результате, все увидел. Буду переделывать в 3.1.Blushing
Спасибо:

pyhta4og

Фотография
Дата: 17.03.2011
Ответить


РТС-Стандарт в этой истории (http://ftp.rtsnet.ru/pub...ory/F/2011/FT110221.zip) нет похоже
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 19.03.2011
Ответить


pyhta4og Перейти
РТС-Стандарт в этой истории (https://ftp.rtsnet.ru/pub...ory/F/2011/FT110221.zip) нет похоже


А что за разбиение такое на FE TE FT?
Спасибо:

Иванов Андрей

Фотография
Дата: 20.03.2011
Ответить


Про время и про стаканы.

Я с декабря где-то пишу логи сам. До декабря тоже писал, разница в том, что в декабре добавил одно поле -- реальное время получения сделки. Именно получения, а не записи в файл, это важно.

Время скачет +-4 секунды от указанного в сделке. С отставанием времени сделки понятно -- лаги самой биржи, лаги Quik, лаги сети. Откуда берётся убегание вперёд, даже не представляю =) Писать начал в качестве эксперимента, просто любопытно было. Использовать планирую для разделения сделок по блокам, чтобы они в эмулятор приходили такими же пачками, как и в реальности, потому что с тиками работать грустно.

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

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

Сохранённые стаканы искажают картину мира очень сильно. Потому что это снимки с интервалами, а не то, что происходит на бирже. Я на стаканы не смотрю даже когда руками торгую (возможно, просто не знаю, как их использовать, я просто программист, а не трейдер). Но про это вы вроде уже и сами договорились =)

Пишу не для спора или пожелания всё переделать. Может быть будет любопытно ещё одно мнение.
Спасибо:

Juri

Фотография
Дата: 20.03.2011
Ответить


Здравствуйте!

Иванов Андрей Перейти

Время скачет +-4 секунды от указанного в сделке. С отставанием времени сделки понятно -- лаги самой биржи, лаги Quik, лаги сети. Откуда берётся убегание вперёд, даже не представляю =)

Да уж, просто мистика )
Может просто на Вашем компьютере время установлено не несколько секунд (где-то 5-6) вперед от биржи?

Иванов Андрей Перейти

Использовать планирую для разделения сделок по блокам, чтобы они в эмулятор приходили такими же пачками, как и в реальности, потому что с тиками работать грустно.

Просто любопытно, а почему грустно?

Иванов Андрей Перейти

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

Здесь немного не понял...
Для моделирования исполнения вашей сделки вы используете только файл всех сделок?
А тогда какие цены ("беру либо из сделки лога, либо из заявки") когда берете?

Иванов Андрей Перейти

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

С этим вполне согласен...


Спасибо:

Иванов Андрей

Фотография
Дата: 21.03.2011
Ответить


Juri Перейти
Здравствуйте!

Иванов Андрей Перейти

Время скачет +-4 секунды от указанного в сделке. С отставанием времени сделки понятно -- лаги самой биржи, лаги Quik, лаги сети. Откуда берётся убегание вперёд, даже не представляю =)

Да уж, просто мистика )
Может просто на Вашем компьютере время установлено не несколько секунд (где-то 5-6) вперед от биржи?

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

Цитата:
Иванов Андрей Перейти

Использовать планирую для разделения сделок по блокам, чтобы они в эмулятор приходили такими же пачками, как и в реальности, потому что с тиками работать грустно.

Просто любопытно, а почему грустно?

Потому что они искажают реальность =)

Цитата:
Иванов Андрей Перейти

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

Здесь немного не понял...
Для моделирования исполнения вашей сделки вы используете только файл всех сделок?
А тогда какие цены ("беру либо из сделки лога, либо из заявки") когда берете?

Если моя заявка сразу проходит, значит она удовлетворила чью-то заявку в стакане и цену надо брать из лога. Если нет, значит, моя заявка пролежала какое-то время в стакане и цену надо брать из моей заявки.
Спасибо:
< 1 2 

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy