Блог им. tranquility

Есть ли польза в тиковом поле "направление сделки", транслируемом брокером/биржей?

Как-то я сильно заморочился над тем, чтобы получить из ордерлогов кускальпа данные, которые продаются Мосбиржей. У меня были купленные данные type B (сделки и лучшие котировки) по RI за один месяц и в итоге после всевозможных танцев с бубнами все сошлось (кроме времени сделки/котировки, но это ранее обсуждалось — погрешность +-3 мс возникала из-за органицации хранения исторических данных Мосбиржей, при этом данные кускальпа оказываются более точными). Собственно, больше всего «танцев» было по поводу обратного инжиниринга правил сведения заявок. На языке С++ они выглядят так (комментарии излишни, кому действительно надо — сам разберется):
opDir = L'U';

if( ( qsds[0].plaza2OpWord & QshOrderLogFrame::plazaWordQuote ) != 0 &&
( qsds[1].plaza2OpWord & QshOrderLogFrame::plazaWordCounter ) != 0 ||
( qsds[0].plaza2OpWord & QshOrderLogFrame::plazaWordCounter ) != 0 &&
( qsds[1].plaza2OpWord & QshOrderLogFrame::plazaWordQuote ) != 0 )
{
	for( unsigned i = 0; i < qsds.size(); i++ )
	{
		if( ( qsds[i].plaza2OpWord & QshOrderLogFrame::plazaWordQuote ) != 0 )
		{
			if( ( qsds[i].plaza2OpWord & QshOrderLogFrame::plazaWordBuy ) != 0 )
			{
				opDir = L'B';
				break;
			}
			else if( ( qsds[i].plaza2OpWord & QshOrderLogFrame::plazaWordSell ) != 0 )
			{
				opDir = L'S';
				break;
			}
			else
			{ <a name="cut"></a> 
<br />				throw( string( "One side of the deal has undefined direction" ) );
				break;
			}
		}
	}<br />}
else if( ( qsds[0].plaza2OpWord & QshOrderLogFrame::plazaWordQuote ) != 0 &&
	( qsds[1].plaza2OpWord & QshOrderLogFrame::plazaWordQuote ) != 0 )
{
	if( qsds[1].plaza2OpWord & QshOrderLogFrame::plazaWordBuy )
		opDir = L'B';
	else if( qsds[1].plaza2OpWord & QshOrderLogFrame::plazaWordSell )
		opDir = L'S';
	else
		opDir = L'U';
}
else
{
	if( qsds[1].plaza2OpWord & QshOrderLogFrame::plazaWordBuy )
		opDir = L'B';
	else if( qsds[1].plaza2OpWord & QshOrderLogFrame::plazaWordSell )<br />                opDir = L'S';
	else
		opDir = L'U';
}
ну, разве что поясню, что qsds — структура, содержащая два элемента: две заявки, которые свелись в сделку.
Собственно, у меня такой вопрос: чем ценна такая информация о направлении сделки? Из приведенного кода очевидно ведь, что на выходе получается какой-то неинформативный шум...
P.S. Если кому нужны данные type B за день по заданному фьючу — могу продать за немного рубкоинов:)
★6
Ну я думаю что это инфа ни о чем, если только нет цели выявить манипуляторов рынка,  которые проводят сделки между собой лишь. Хотя для обеденных трейдеров это тоже особо не имеет ценности.
avatar

Ditya

Ditya, нет, эта инфа как таковая как раз важна, по ней скальперы считают дельту, это полезно, хотя тоже дает запоздалые данные (если «в лоб» следить, дельта смещается в определенную сторону когда движение цены уже произошло). Но вот в том виде, в котором она транслируется — вроде как бесполезная информация. Дельту по ней строить бессмысленно. Может, она для чего-то другого может использоваться?

tranquility, дельта вроде полезна в нескольких вариантах:

1) либо очень сильная точечная, размазанная на 1-2 пункта, тогда можно заявку втыкать и стоп за нее
2) либо кумулятивная дельта. Это достаточно сильный сигнал, когда идет дивер по кумулятивной дельте и цене. Цена например растет, а дельта вовсю падает. Например на протяжении пары часов или на протяжении пары дней, в зависимости от тф

Андрей К, т.е. в моменте не определить кто сильнее давит, так или иначе оно уже прошлое) Тут обязательно кто-то скажет, что это тот же курвафитинг, но по дельте.
Friendly Deep Space, 
в моменте не определить кто сильнее давит
примерно в 65% случаев я могу вычислить, от куда эти дельты взялись. Но это надо поторговать немножко.

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

больше особо крупных учасьников, которые работают во фуче нет у нас. Вот они и образовывают такие дельты. Если вычислить кто это, то сразу понятно чего происходит
Андрей К, непростое это дело объемный анализ. Вроде смотришь слева на графике и все понятно, а справа...)) Нужна автоматизация и тест.
Friendly Deep Space, ну да, без полной автоматизации никак
 во время торгов важна для нас активность в ту или иную сторону а кто кому продал и кто купил нам не так важно
avatar

Ditya

С++… очень на C# похоже, эт че получается, я могу сам написать какой-нить модуль, который будет простой (не требующий углубления в С++), но оч. быстрый… любопытно)
avatar

Replikant_mih

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

Lagamail

Lagamail, Конвертеры для слабаков! — Только хардкор!
Replikant_mih, сейчас конверторы уже лучше конвертят чем программеры )
avatar

Lagamail

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

avatar

r0man

r0man, так вот, я тоже не знаю, но если его не городить, то данные с ордерлога на сойдутся с теми, что куплены у Мосбиржи. Элементы в структуре qsds идут в том порядке, в котором они считываются из qsh файла (ордерлога то есть). Если кто не в курсе, в ордерлоге нет данных о типе сделки в которую свелись две заявки. Он вычисляется из флагов этих заявок и их последовательности появления, причем таким образом, как в приведенном коде.
tranquility, 

Вот кусок из полного ордерлога :

12.05.2016 19:00:00.908;21244387422;12048;1;0;1482842997;12049;1125432;Fill, Sell, Quote
12.05.2016 19:00:00.908;21244387056;12049;1;34;1482842997;12049;1125432;Fill, Buy, Quote, EndOfTransaction

21244387422 (Sell) и 21244387056 (Buy) — это номера заявок попавших в сделку 1482842997. Номер заявки 21244387422 выше чем 21244387056, следовательно сделка будет иметь направление Sell.

avatar

r0man

r0man, Там нюансы есть, направление сделки зависит от 
флагов этих заявок и их последовательности появления
было бы все так просто, я бы не стал писать такой костыльный код…
было бы все так просто, я бы не стал писать такой костыльный код…

tranquility, код, возможно, ошибочен, либо «замусорен». В последней паре if/else код ветки if совпадает с кодом ветки else (найдите ту пару, которую я имею ввиду). Обычно это бывает после copy&paste'ы, которую затем забыли отредактировать «до готовности».

Либо, если всё правильно, то if тогда здесь просто лишний.

Код, фактически, на C, из C++ здесь только throw, string и операция :: .

Код вставлен криво, — перемежается HTML-tag'ами.
Теги просто надо игнорировать, их что-то сложно удалить, при редактировании они не видны. Ну и какой-то криминальной неоптимальности в своем коде я не вижу:
Если _одна котировочная другая встречная_:
Блок1
Если _обе котировочные_:
Блок2
Остальное:
Блок2

Там ещё отдельно надо было обрабатывать случаи внесистемных заявок. В истории от Мосбиржи их нет, но для того, чтобы получить такой же файл на выходе что и qsh2txt даёт, с внесистемных и надо отдельно работать по другим немного правилам. Вероятно, поэтому немного неоптимальности код получился с точки зрения его чтения. Мне здесь больше важна отладка, чтобы ничего не сломалось случайно)
avatar

tranquility


Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.

Залогиниться

Зарегистрироваться
....все тэги
UPDONW