Как-то я сильно заморочился над тем, чтобы получить из ордерлогов кускальпа данные, которые продаются Мосбиржей. У меня были купленные данные 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 за день по заданному фьючу — могу продать за немного рубкоинов:)
tranquility, дельта вроде полезна в нескольких вариантах:
1) либо очень сильная точечная, размазанная на 1-2 пункта, тогда можно заявку втыкать и стоп за нее
2) либо кумулятивная дельта. Это достаточно сильный сигнал, когда идет дивер по кумулятивной дельте и цене. Цена например растет, а дельта вовсю падает. Например на протяжении пары часов или на протяжении пары дней, в зависимости от тф
Во фьюче большие дельты образуют несколько участников:
1) арбитражеры. Это когда на споте появился не маленький участник и арбитражер под него долбит фуч
2) опционные хеджеры, когда крупному продавцу опциона нужно срочно перекрыть какие то ноги.
больше особо крупных учасьников, которые работают во фуче нет у нас. Вот они и образовывают такие дельты. Если вычислить кто это, то сразу понятно чего происходит
Вроде направление сделки определяется типом заявки инициатора сделки.
А инициатор сделки будет тот, у кого выше(больше) номер заявки. Если в структуре qsds уже есть две заявки, что свелись в сделку, то зачем такой сложный код городить?
Вот кусок из полного ордерлога :
21244387422 (Sell) и 21244387056 (Buy) — это номера заявок попавших в сделку 1482842997. Номер заявки 21244387422 выше чем 21244387056, следовательно сделка будет иметь направление Sell.
tranquility, код, возможно, ошибочен, либо «замусорен». В последней паре if/else код ветки if совпадает с кодом ветки else (найдите ту пару, которую я имею ввиду). Обычно это бывает после copy&paste'ы, которую затем забыли отредактировать «до готовности».
Либо, если всё правильно, то if тогда здесь просто лишний.
Код, фактически, на C, из C++ здесь только throw, string и операция :: .
Код вставлен криво, — перемежается HTML-tag'ами.
Если _одна котировочная другая встречная_:
Блок1
Если _обе котировочные_:
Блок2
Остальное:
Блок2
Там ещё отдельно надо было обрабатывать случаи внесистемных заявок. В истории от Мосбиржи их нет, но для того, чтобы получить такой же файл на выходе что и qsh2txt даёт, с внесистемных и надо отдельно работать по другим немного правилам. Вероятно, поэтому немного неоптимальности код получился с точки зрения его чтения. Мне здесь больше важна отладка, чтобы ничего не сломалось случайно)