Блог им. mic_pdn

*** Вопрос мэтчинга котировок и эмулирования торгов

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

1. продажа по рынку
2. покупка по рынку
по какой цене они будут исполнены?

По идее заявки должны исполнятся по лучшим значениям, но по логике так как в обоих заявках не указывается цена (по рынку всегда имеют значение 0 в поле цена) то ориентирами остаются значения бида и аска. Но когда обе заявки могли бы закрыться «друг о друга» где-нибудь в центре спреда они исполнятся по биду-аску, то есть по худшей цене… То есть биржа действительно делая мэтчинг анализирует лишь пару «заявка-стакан» или еще анализирует «заявка-следующая заявка» в очереди заявок :(
Просто я знаю что скажем на америкосовской бирже если у одного брокера пришли ордера от двух его клиентов 1. по рынку и 2. лимитник в противоположную сторону (равный биду-аску или лучше), то брокер кроет рыночную заявку о лимитник и предает центральному ядру уже не заявки а состоявшиеся сделки, которые «смэтчил» на своем сервере.


кто знаком с подобным вопросом объясните!
    ★2
    52 комментария
    На америке вообще открывают внутри спреда в 1 цент.
    То есть часто помню давали цену мне, когда пулял по рынку — 31.955 ))) или 31.9515 )) чо-та такое)
    avatar
    Станислав Иванов, точно не знаю, но у них вроде гибридная система? И наша — «система электронного сведения» отличается по логике?
    avatar
    Если говорить о ММВБ, то подозреваю, что обрабатывается, в один момент времени, только одна заявка, против имеющихся в системе (т.е. в стакане).
    avatar
    tvitals, но! я смотрел презентацию Спектры они говорили о конвеере мэтчинга и о том что там все в каком-то модуле вообще перемешено на параллельные процессы :( меня уже тогда удивило как они могут не нарушая последовательности прихода заявок давать «лучшую цену» или они все же дают не всегда ожидаемое? но ради увеличения скорости работы ядра
    Дмитрий Интрадей, скинь ссылку на презентацию, интересно посмотреть…
    avatar
    tvitals,
    tvitals, иначе надо говорить от «разрозненых потоках исполнения», да и что считать одновременно? Т.е. пришлось бы вводить «временный буфер», в котором накапливаются заявки до попытки исполнения по стакану?
    avatar
    tvitals, то есть любая заявка приходя в ядро, которое внутри распараллелено (от роутера с пометкой времени прихода пакета валит на какой-то из ЭН железок-серваков, работающих как единый кластер) имеет метку прихода в ядро системы и уже по этому признако формируется «аукцион» (они использовали в презентахи этот термин, хотя я не до конца понимаю его суть с проекцией на параллельность обработки)
    tvitals, просто именно заявки по рынку — это сладкая брешь для манипуляций со стороны HFT роботов :)
    tvitals, ну меня просто интересует вопрос реализации «две встречные заявки по рынку» как они могут вообще обрабатываться на разных биржах :) ну и в частности как у нас (на SPECTRA)
    Дмитрий Интрадей, Судя по анализу потока исполнения заявкое на ММВБ с микросекундами — в один момент обрабатывается одна — ХЗ…
    avatar
    tvitals, то есть мэтчит один уникальный static-процесс (синглетон) одного серверного процесса? ну тогда обе заявки из примера исполнятся продажа по рынку — по цене бида, покупка по рынку — по цене аска, не учитывая взаимное существование
    N Time Price Count Op
    1961690634 10:00:03.604027 96.50 10 -1
    1961690636 10:00:03.610141 96.51 3 1
    1961690637 10:00:03.610141 96.51 5 1
    1961690638 10:00:03.610141 96.65 20 1
    1961690639 10:00:03.610141 96.65 500 1
    1961690640 10:00:03.610141 96.69 4 1
    1961690641 10:00:03.610141 96.73 1034 1
    1961690642 10:00:03.610141 96.77 1 1
    1961690643 10:00:03.610141 96.78 1 1
    1961690644 10:00:03.610141 96.80 1 1
    1961690645 10:00:03.610141 96.80 896 1
    1961690646 10:00:03.610141 96.80 770 1
    1961690647 10:00:03.610141 96.84 30 1
    1961690648 10:00:03.610141 96.85 100 1
    1961690649 10:00:03.610141 96.85 1635 1
    1961690650 10:00:03.613998 96.84 250 1
    1961690651 10:00:03.613998 96.85 1223 1
    1961690652 10:00:03.613998 96.86 527 1
    1961690655 10:00:03.627549 96.79 44 -1
    avatar
    tvitals, смотрим, что с временем 10:00:03.610141 было несколько сделок, с типом операции 1 (покупака) и цена росла — это была маркет заявка. Так-же бывает одинаковое время без изменения цены, это когда одна лимит заявка покрывается несколькими с противоположной стороны.
    avatar
    tvitals, время то может и одинаковое! Но в алгоритме мэтчинга используется очередность — номер заявки с 1961690636 по 1961690649 для заявок по времени 10:00:03.610141, то есть в ядре виртуальным абсолютным временем выступает поле «номер заявки», а настоящее время нужно лишь для понимания когда это прозошло для рядового пользователя. Т.е в поле «номер заявки» не может раньше идти заявка с большим значением «номера заявки» — они все с шагом 1 и по нарастающей — т.е. по номеру прихода пакета на роутер ядра биржи :) стало быть нельзя смэтчить заявку 1961690640 с 1961690642 минуя 1961690641 если они могли смэтчится
    tvitals, кстати, можно говорить о паралельно обработке, но с учетом их против стакана, но не против друг-друга. Например, приходит 2 маркет заявки, но одна sell, а другая bay. И одна снимает со стакан и другая, но одна с спроса, а другая с предложения? А иначе как определить ти операции по сделке — покупка/продажа?
    avatar
    tvitals, просто здесь тоже не ясно «а что считать бидом и аском»? как пример есть у нас стакана где все заявки имеют объем 1 контракт и шаг цены инструмента равен 1. Далее у нас скажем спред сформировался на уровне 100 (аск) и 99 (бид)… пришли друг за другом 5 заявок:
    1. купить по цене аска (100)
    2. купить по рынку
    3. лимитка на продажу по цене 100
    4. продать по рынку
    5. купить по лимитке 99

    — правильной ли будет последовательность
    1. произойдет мэтчинг заявка-аск и аск станет 101
    2. заявка по рынку исполнится по цене 101
    3. в стакан придет новая заявка — аск станет 100
    4. исполнится заявка по рынку по цене бида 99, бид станет 98
    5. в стакан станет новая заявка и бид поменятся на 99
    Дмитрий Интрадей, Да
    avatar
    tvitals, да и иначе было-бы ущемление тех, кто уже в стакане, пришли одновременна, удовлетворили бы друг-друга, а в стакане отдыхают )))
    avatar
    ну в любом случае у меня получается засада в эмулировании торгов по тиковому хистори :( я не могу эмулировать «заявку по рынку» если на некотором интервале не было заявок в обратную сторону, потому как я не знаю чему был равен бид-аск в это время. То есть если 100 сделок были «на покупку» то я не знаю какой ценой сформировать «продажа по рынку» ибо аск равен цене сделок хистори, а вот чему равен бид ))) могу конечно ввести допущение что спред при таком бурном росте будет скажем в 2-3 раза больше спреда в «спокойной проторговке» :) но ведь это не всегда так…
    а у меня алгоритм требует «рыночных» телодвижений чтобы развернуться на мощном выносе надо сначала закрыться а лимитником рисково — может не исполнится.
    Дмитрий Интрадей, это да, проблема, что-бы ее небыло, надо иметь доступ ко всему потоку заявок отправляемых на биржу, есть знакомый ИТшник кто-бы сливал такую? ;))) В любом случае при эмуляции по истории будет только эмуляция, ведь любое вмешательство привело бы к изменению потока сделок. Достаточно неплохой вариант писать историю и сам стакан, или придумать иной способ, например, ввести задержку на эмуляцию исполнения и после нею считать своими соответсвующий объем сделок своего направления покупка/продажа.
    avatar
    tvitals, А если придумаешь, что-то лучше, раскажи — т.к. у меня схожие потребности )
    avatar
    tvitals, но! если сделать допущение что «хороший алгоритм был бы так же хорош и на видоизмененном хистори», тогда нет проблем, но! рынок — это среда с очень сильной обратной связью (опять же в силу множества ХФТ, которые отслеживают минимальное изменение цены). И тут уже интересен вопрос, а как сильно чувствительна хфт среда биржи на мое вмешательство в торговлю скажем 1 контрактом о_О и с какого объема моих заявок я буду очень сильно менять ход торгов, а известно что среда рынка старается изменится так чтобы это было не выгодно мне после того как я вошел в сделку и в момент когда я хочу из нее выйти.
    tvitals, )))) да я могу тупо запустить свою студию чтобы она «грабила» dde поток со стаканом и тиковыми сделками и сохраняла в файл, который будет входным для тестов робо-стратегий. Собственно я к этому чувствую и приду, потому как биржа работает не все 24 часа (и не в выходные) а я кодингом занимаюсь гораздо больше чем она доступна ) ну и чтобы сравнить результат его надо гонять на одних и тех же данных, то бишь боевое тестирование нельзя улучшить, потому как торги идут один раз с теми же параметрами :))) так что подобную фишку сделаю я сам ))) айтишник )гы
    Дмитрий Интрадей, да, я примерно туда-же смотрю. Вопервых это даст возможность более качественного анализа истории, во вторых нормальное тестирование роботов, а в третьих можно и самому «руку набивать» на ручной эмуляции — например отбираешь интересные дни и раз 20-30 их проторговываешь — больше опыта можно получть без потери капитала )
    avatar
    Дмитрий Интрадей, Но имя поток заявок (не сделок, а именно заявок, даже не состоявшихся), моделирование было-бы совсем другое, а если оный иметь реалтайм, то и дало-бы хорошее преимущество ))))
    avatar
    tvitals, ))) ну тогда по приколу можно конечно написать свой модуль «биржа-хоум эдишн» ))) затащить туда скажем с 1000 участников раздав им собой написанные терминалы ))) блин а это конечно идея, вопрос законно ли это? )) и если там нет реальных денег, то можно ли это приподнести как «обучающую игру»? ) Туда же можно подключить для теста своих стратегий роботов ) эта бы среда могла работать вообще все время, скажем в нее бы впихнули все алго трейдеры и в реальном времени без выходны пилили-пилили… а новички если бы захотели то могли торговать в специально написанном простейшем терминале )
    Дмитрий Интрадей, Должно быть законно, если не торговать на там на реальные деньги, а иначе это будет как игровые автоматы ))) Идея очень интересная, и главное полезной. Интересно получить срез с людей, кто-бы стал бы пользоваться?
    avatar
    tvitals, просто даже Junior модуль биржи работает по синтетическому (не настоящему алгоритму спроса-предложения, он гоняет хистори с некими мелкими вариациями «искажения») в определенное время (то есть не 24 часа в сутки, что мне уже не удобно)
    Дмитрий Интрадей, RuTicker.com слушай глянь тему! :) у тебя твой проект работает на выделенном сервере? давай может такую тему замутим? :) сделаем площадку для 24 часа х 7 дней в неделю для роботов-новичков. Придумаем простейший протокол, реализуем шлюз доступа-терминал(беру на себя) и ты получишь мощный приток пользователей :) потому как качественной среды тестирования роботов ни у кого нет :) Биржа предоставляет очень ограниченный ресурс тестирования
    Дмитрий Интрадей, я думаю те кто пишет роботов осилят подключение к этой площадке своими силами (то есть подключится смогут само собой «самописные системы» а не вроде велза и иже с ним), но таких уверен найдется достаточное число. Можно сделать на смарте опрос и узнать кому это интересно
    Дмитрий Интрадей, главный косяк предоставляемой биржой площадки является то что ты в этой системе «призрак» это значит что твое влияние на ход торгов не учитывается! тебя просто накладывают «поверх торгов» но не дают права менять их, а ведь именно на переменах-управлении торгами основывается торговля «кукла», он же маркет мейкер. То есть если бы он не мог влиять на ход торгов, то нахуа ему биржа? )А если право влияния дать каждому на нашей площадке-хоумбирже — чтобы он придумал свои стратегии (виртуальные деньги легко появлются и не жалко потерять), это было бы мего круто!!! :)
    Дмитрий Интрадей, тема интересная, я бы присоединился
    avatar
    tvitals, В принцепе туда можно транслировать данные с бирж в реал-тайм, будет небольшая задержка. И можно использовать и как «игорвую-платформу», как базу тиков… а если делать по уму проекто может быть и окупаем даже…
    avatar
    tvitals, нет-нет!!! никаких транслирований :) Зачем эмулировать жизнь, когда можно создать «настоящий живой организм» и участвовать в его развитии… Это аналог телевизор (транслировать котировки и никак не влиять на эфир) и Телеконференция (где каждый участник может в любой момент изменить ход мероприятия)
    tvitals, ну если интересная значит надо анонсировать максимальному числу потенцеальных участников, узнать их число, сделать ) и получить афигенный продукт, которого пока нет в природе ) А то, что он будет ВСЕМ без исключения ценен — бесспорный факт!
    Дмитрий Интрадей, была такая идея кстати, но не понятно что с протоколом, надо стандартный, ибо мутить свой это изобретать и продвигать API — задача не слабая
    avatar
    RuTicker.com, в том то и дело, что коннектор у разных роботов свой, кто-то пишет на С++, кто-то на С# кто-то на бейсике. Простой тот же JSON протокол был бы идеальным (с трансформацией в бинарный вид). То есть надо просто прикинуть какую нагрузку может тянуть сервер и попробовать провести первые торги хотябы 20 участниками. То есть само собой в такой сессии должно быть 3 типа стратегий: маркет мейкер, тренд образующий алгоритм, остальные участники. Вся сессия является игровой, то есть будет статистика: первые 5 мест, количество профита, показ сделок :) то есть это будет интересно сторонним наблюдателям, просто чтобы оценить качество стратегий. Дальше возникнет любопытство, подключаться новые участники и пойдет процесс! :) А там можно около этого проекта кучу всего прикрутить, да хоть еще один смартлаб сделатЬ! :) и это уже реально будет торкать, потому как все будут увлечены формированием реальных стартегий с 0 риском, риск — лишь потраченное время.
    RuTicker.com, а итогом всех этих «хоум-торгов» будут реальные робо-стратегии с учтенными «черными лебедями» которые наверняка чаще обычной биржи будут возникать на хоумбирже. То есть если твой алгоритм побеждает пару недель — ты смело можешь валить на реальные торги и тестировать на реально бабле! Не опасаясь что в первый же час все сольешь!
    Дмитрий Интрадей, да смотрел его, когда QUIK изучал, там «такая история», уж незнаяю гне они ее берут — что, то не очень актуальная, а точнее нет эмуляции ликвидности, наверное на жедезе экономят, вот и частота сделок никакая…
    avatar
    tvitals, да-да! и то что мы своими сделками может вообще серьезно изменить ход торгов никто почему-то не рассматривает ) и об этом умалчивают, ладно еще сделки которые на 5-ти минутках тестят в каком велзе по хистори (хотя я считаю такие тесты сранью господней не имеющей ничего общего с реальными торгоами, как в плане исполнения сделок, так и в плане «по какой цене»). А вот если бы я гонял по полному срезу «стакана» и «хистори сделок» это уже было куда ближе но!!! никто не знает фактор «влияния новых сделок вставленных в очередь хистори». Я это называю «биржевой эффект бабочки», когда сдвиг всего на один шаг цены в отличную от хистори сторону мог бы (в слиу преобладания ХФТ роботов) стать сигналом на мего обвал ) а не скажем на продолжение боковика или же заметно меньшую волатильностЬ, что сформировалась по факту в хистори :)
    Дмитрий Интрадей, Но имеем, то что-имеем, моделирование поможет дать примерный ответ, на качество стратегии, и общую проверку гипотез. А дальше только в живую, с последующим разбором полетов :)
    avatar

    теги блога Дмитрий Интрадей

    ....все тэги



    UPDONW
    Новый дизайн