Избранное трейдера D.G.

по

Грааль в обертке

Давно не бросал костей. 

Наверное пора.

Идея грааля известна каждому школьнику. Гепы закрываются.
Грааль в обертке
это эквити за 4 года. стартовая 1млн.  в работе 100тыс рублей на один тикер ммвб.

( Читать дальше )

Книга дала полное понимание "как это делается от и до"

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

Изучаю FIX протокол с нуля. Разбор протокола, первый код на c#

Вступление

     Никогда не увлекался скоростным трейдингом. Всегда хватало терминала. Изучать этот протокол меня побудил набор вакансий. Надо отметить, что я неспешно перебираю хорошие вакансии на рынке. Частному трейдеру очень сложно развиваться в одиночку — психологически, эмоционально, физически. Создавать и развиваться постоянно хочется, поэтому принял решение вливаться в коллектив. За несколько месяцев, мне удалось провести несколько собеседований. На втором этапе я проваливался именно из за не знаний протокола.  Предметную область я примерно представлял. Ну что там сложного? Соединился с биржей по сокетам и начинай обмен сообщениями. Надо отметить, что в этой области есть уже готовые разработки в виде quickfix или готового API от StockSharp (правда платные). Но я принял решение разбираться с нуля, чтобы вникнуть в детали.

Технические аспекты протокола


     Итак. Любой протокол, какой бы он сложный не был, работает примерно одинаково. Мы создаем у себя соединение с сервером, устанавливаем некий туннель между нами и сервером, посредством которого будем обмениваться сообщениями. Протокол — это как раз и есть набор правил, по которым строятся сообщения нужного формата. Если говорить технически, то мы должны создать сокет соединение с сервером на указанный порт.
Сообщение в FIX, как и в любом другом протоколе, состоит из нескольких блоков:
  • <Заголовок сообщения>
  • <Сообщение>
  • <Концовка сообщения>
     Наша задача, правильно заполнить эти блоки и отправить на сервер. Заголовок сообщения в свою очередь состоит из следующих данных:
  • <Начало сообщения, версия протокола>
  • <Длина (размер) сообщения>
  • <Тип сообщения>
  • <Идентификатор отправителя>
  • <Идентификатор получателя>
  • <Номер сообщения>
  • <Время отправки>
     Обращу ваше внимание, что я перечисляю обязательные поля. Есть еще и дополнительные. Концовка сообщения должна выглядеть так:
  • <Контрольная сумма сообщения>
     Сами данные заполняются достаточно легко. В виде: <тип поля> = <значение>. Например, <длина сообщения> = 78, то есть мы серверу говорим, что размер передаваемого нами сообщения составляет 78 байт. Стоит обратить внимание, что в протоколе FIX, типы полей кодируются в виде числовых значений. Например,  <длина сообщения> в протоколе передается как цифра 9. Исходя из выше сказанного, наш заголовок сообщения, выглядел бы следующим образом:
  • 8=FIX.4.4 _____ начало сообщения, протокол версии 4.4
  • 9=78 _____ размер сообщения 78 байт
  • 35=A _____ тип сообщения А, что означает попытка на соединение с сервером
  • 49=<ваш идентификатор выдается биржей>
  • 56=FG _____ идентификатор получателя, раздел Forts на бирже
  • 34=1 _____ первое сообщение
  • 52=20160212-11:42:51.812 _____ время отправки сообщения

Организационные вопросы

  1. Наша биржа дает тестовый контур для отработки своих алгоритмов по данному протоколу. Надо всего лишь написать запрос на доступ. Надо признать, тех служба работает отменно. Очень все быстро было организовано. Подробности http://moex.com/s442
  2. Обязательно понадобится описание протокола для нашей биржи ftp://ftp.moex.com/pub/FIX/Spectra/test/docs/spectra_fixgate_ru.pdf
  3. Чтобы вникнуть в тонкости передачи, мне очень помогла эта программа от биржи (позже я покажу как помогла) ftp://ftp.moex.com/pub/FIX/Spectra/Utils/fix_client.zip
  4. Описание самого протокола от создателей (на английском). Мне помог сильно wiki. http://fixwiki.org/fixwiki/FIXwiki
  5. Чтобы найти свои ошибки, мне приходилось перехватывать сообщения рабочего клиента биржи и сверять со своими. Для этого мне понадобился tcp/ip сниффер — программа перехвата сетевого трафика.
  6. Разработку я веду на c#.

К бою. Немного теоретической практики

     На момент изучения протокола, я уверен, многие столкнуться со следующими вопросами:
  • как именно считать длину сообщения
  • как разделять между собой данные
  • как считать контрольную сумму

     Если говорить образно. То, чтобы отправить сообщение на сервер, нам просто нужно сформировать нужную строку со всеми данными и отправить ее на биржу. Ну например:

8=FIX.4.4
;9=78;35=A;49=FG;56=tgFhcfx901U05;34=1;52=20160212-11:42:51.812
;98=0;108=3000;141=Y;10=047;

Изучаю FIX протокол с нуля. Разбор протокола, первый код на c#

     Если быть внимательным, то мы увидим, что кол-во символов в строке у нас 100, а в заголовке сообщения мы передаем, что 78 (9 = 78). По правилам протокола FIX, длину сообщения нужно считать без учета концовки и первых двух полей заголовка. А именно:

Изучаю FIX протокол с нуля. Разбор протокола, первый код на c#     С длиной сообщения разобрались. Теперь про разделитель. Пока в моем скрине это ";". В документациях западных написано что это символ SOH. Чтобы однозначно ответить на этот вопрос, я запустил прилагаемого клиента биржи и сниффером стал перехватывать сообщения между клиентом и биржей. Кстати, программа ведет логи, и их общение выглядит так (зеленое — передача запроса на биржу, красное — ответ от биржи):
Изучаю FIX протокол с нуля. Разбор протокола, первый код на c#
     Зачеркнул свой идентификатор, прошу понять правильно. Ну а перехват сообщения выглядит так:
Изучаю FIX протокол с нуля. Разбор протокола, первый код на c#     Зеленым я отметил именно разделители. Как вы уже видите, это просто в шестнадцатеричном виде код 01. То есть, в нашу строку в виде разделителей, нужно вставлять код 01. Также я отметил для себя последовательность полей в сообщении. Почему то в другом порядке у меня вызывало ошибки (возможно тут я не прав)
Изучаю FIX протокол с нуля. Разбор протокола, первый код на c#     Ну и контрольная сумма. Контрольная сумма считается над всем сообщением, за исключением концовки. То есть в расчет берется только заголовок и само сообщение. Для этого, мы переводим каждый символ в его Ascii код и вычисляем их сумму. Полученную сумму делим по модулю 256. Это и будет контрольной суммой сообщения. При этом, значение должно быть трехзначным. Если мы получаем 2 знака, то подставляем 0 слева (например, если контрольная сумма = 68, то должны передать значении 068).

К бою. Начало программирования

     В законченном виде, разработка будет составлять готовый класс, для работы с протоколом. Теперь начинаю строить его по кирпичикам. Для начала, я создал несколько классов:
  • класс для работы с заголовками
  • класс для работы с сообщением подключения к серверу (onLogon)
  • класс для работы с концовкой
    Каждый класс включает в себя поля, которые передаются и некоторые методы для их обработки.
    Класс для работы с заголовками. Пока просто выглядит так: 
Изучаю FIX протокол с нуля. Разбор протокола, первый код на c#

Изучаю FIX протокол с нуля. Разбор протокола, первый код на c#     Как видим, первый метод строит нужную строку из полей. Обратите внимание, там присутствует наш разделитель в виде спец символа \u0001. Второй метод вычисляет размер заголовка (чтобы потом высчитывать размер сообщения). Надо обратить внимание, что при передачи времени, миллисекунды должны указываться в трехзначном формате (даже если миллисекунды = 52, то передаем 052). Следующие классы строятся по аналогии.
Класс создания сообщения на подключение (инициализация сессии)
Изучаю FIX протокол с нуля. Разбор протокола, первый код на c#
Класс создания концовки сообщения
Изучаю FIX протокол с нуля. Разбор протокола, первый код на c#

Попробую привести код консольной программы для теста в виде цитаты. Картинки вставляются плохого качества. Подробно комментирую.

//Получаем ip сервера
IPAddress ipAddr = IPAddress.Parse(server);
IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, port);
//Создаем заголовк
HeaderMessage msHeader = new HeaderMessage
{
BeginString = «FIX.4.4»,
MsgType = «A», //Тип сообщения на установку сессии
SenderCompID = "",
TargetCompID = «FG»,
MsgSeqNum = 1
};
//Создаем сообщение на подключение onLogon
LogonMessage msLogon = new LogonMessage
{
EncryptMethod = 0,
HeartBtInt = 3000,
ResetSeqNumFlag = true
};

//Вычисляем длину сообщения
msHeader.BodyLength = msHeader.GetHeaderSize() + msLogon.GetMessageSize();
//Создаем концовку сообщения
TrailerMessage msTrailer = new TrailerMessage(msHeader.ToString() + msLogon.ToString());

//Формируем полное готовое сообщение
string fullMessage = msHeader.ToString() + msLogon.ToString() + msTrailer.ToString();
Console.WriteLine(«Сообщение для отправки {0}»,fullMessage);

//Создаем сокет для подключения
sSender = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
//Подключаемся
sSender.Connect(ipEndPoint);
Console.WriteLine(«Сокет соединился с {0} », sSender.RemoteEndPoint.ToString());


byte[] msg = Encoding.UTF8.GetBytes(fullMessage);
//Отправляем сообщение
int bytesSent = sSender.Send(msg);
Console.WriteLine(«Отправил {0} байт», bytesSent.ToString());


//Получаем ответ от сервера
byte[] bytes = new byte[1024];
int bytesRec = 0;
bytesRec = sSender.Receive(bytes);
Console.WriteLine(«Ответ от сервера: {0}», Encoding.UTF8.GetString(bytes, 0, bytesRec));


Все таки приложу и в виде картинок. Так наглядней. Кликабельно.
Изучаю FIX протокол с нуля. Разбор протокола, первый код на c#
Изучаю FIX протокол с нуля. Разбор протокола, первый код на c#
В результате мы запросили у сервера подключение с нашим логином. И получили от него ответ.
Изучаю FIX протокол с нуля. Разбор протокола, первый код на c#
По мере развития, буду продолжать с теоретической частью. Если модераторы перенесут в раздел «Алго», я не против.

Продолжение Изучаю FIX протокол с нуля. Рисуем и программируем дальше.

Грааль!

Итак изезженная тема «Грааль».
Палю свой.
Вот так он выглядит в сокращённом варианте:
|close-open|->00=>close->high 
Если разность между открытием и закрытием(читай в строгой форме между максимум и минимумом) стремится к нулю, то следующий такой же промежуток времени закрытие будет стремится к лучшей цене по сделке, т.е. максимум если покупаем и минимум если продаём.
В чём сложность и почему в моих торговых сигналах присутствуют убыточные сделки?
Сложность заключается в том что тяжело дождатся часа с узким ценовым диапазоном, 2 часов, 6 часов и ещё тяжелее дня или недели.
По этому я постоянно задаюсь вопросом где же найти правило паттерна «вне рынка»? Я его не нахожу и потому я смартлабе. Как только я его найду. Меня тут не будет.

Я Банкрот - 2

Как и обещал, написать вечером способ закрытия кредита за 10%, выполняю свое обещание. На самом деле, если постораться, можно и за 2% это сделать. Было бы желание.

Пока возил жену по магазинам, глядя на ваши комментарии, уже успел побывать и мошенником, и балаболом, и продающим какие-то услуги.....
Друзья, я ничего не продаю, не рекламирую. Я просто увидел возможность и спешу поделиться с Вами. Тем более, если бы вы читали мои предыдущие статьи, знали бы что я уже 12 лет как не работаю. Ну, да ладно. Учитывая, что на самом деле интернет кишит мошенниками, это нормально. За последний месяц меня дважды пытались кинуть. Еще одно дополнение, этот способ касается только беззалоговых кредитов.

   Так вот, Что нужно сделать? Если уже не можете платить, нужно, чтобы  прошел суд. На суде убрать лишние проценты и пени, что-бы сумма была более — менее реальная. Суд идет на это без проблем. Далее, банк отдает судебное решение судебным приставам. Заводится исполнительное производство. И вот тут начинается самое интересное.

( Читать дальше )

Экспирация брента(ы)...

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

1. Наша экспирация позже их заморской экспирации. Отсюда первое извращение — их контракт прекратит свою жизнь сегодня в 19-30 по Лондону, а наш только в понедельник в вечерний клиринг. У вас осталось всего 6 часов на всё-про-всё, на движуху.

2. Второе извращение, вытекающее из первого — уже сегодня в вышеупомянутое время 19-30 по Лондону (22-30 по Москве) наш старый контракт полностью потеряет ценовой ориентир, т.к. их старый контракт будет остановлен.

3. Расчётная цена нашей экспирации равна значению биндекса (BINDEX, The ICE Brent Index). Эту хрень вы в стаканах не найдёте, значение публикуется в 12-00 по Лондону (в 15-00 по Москве) на следующий день, для нынешней экспиры это стало быть понедельник. Сейчас сайт выглядит так, в понедельник появится строчка

( Читать дальше )

Роджер Сайп "Развитие мозга"

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

Роджер Сайп "Развитие мозга"


Последний пост с выложенными роботами TSLAB в этом году

Последний пост с выложенными роботами в этом году, решил больше не позориться )
Краткая история создания.
1. Читал сайт Механизатора Кургузгина Лонг Шорт.  Маст Рид.
2. На нём нашёл ссылки на quantocracy.com/   и на https://cssanalytics.wordpress.com/
оба ресурса суперские.
3. У David Varadi много интересных идей, но я не во всё въехал, к сожалению. Было бы интересно обсудить чёнить.

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

В целом это очень похоже на пересечение средних и пробой боллинджеров. Да блин, всё в конце концов на что-то похоже. 
Чем это лучше их? Да особо ничем, особенно если брать всякие необычные/адаптивные скользящие, просто тут чуть по-другому, на истории работает получше простых скользящих, а в реале пока рано делать выводы. 

Ауйтсайд роботы.
Берётся скользящая средняя. Берётся среднеквадратичное отклонение от неё (не боллинджер потому что так получается меньше параметров для оптимизации ) подсчитывается количество выходов цены выше этой линии. Сравниваем количество выходов с их скользящей. Если количество выходов больше трешхолда то открываемся, если меньше закрываемся. 

( Читать дальше )

Будни алготрейдинга. Тслаб. Айтиинвест. Биржа. ВДС. Роботы. Америка. IB.

    • 16 сентября 2015, 09:01
    • |
    • ves2010
  • Еще

Давненько не писал про торговлю.

            Торгую ботами под тслабом 5 лет. Поднял немного денех. Но счас откатывает. Идет запил уже 3месяца. Счет овер 10мио с запасом. Перепишу хаи — выложу стейт.

 

1. Тслаб меня огорчает. Функционал новых версий порезан. Поэтому сижу на старой версии 1.2.13. В новой версии дополна глюков и багов, которые перекочевали в Тслаб2.0. Править баги разрабы не хотят. Типа вот выйдет новая версия — там и исправим. Вышла 2.0 — никуя не работает.

 

баги тслаба следующие...

а) не работает с Смартком3… там целая куча багов… за целый год не могли исправить...

б) нет гарантии входа в сделку… т.е. вместо 100 лотов вам нальют 1 и никаких сообщений и предупреждений не будет...  

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

г) нет итогового подсчета позы… крайне неудобно… у меня до 50-70ти поз открыто по каждой бумаге… крайне неудобно пересчитывать вручную… постоянно потеряно поз на 1-2мио...



( Читать дальше )

....все тэги
UPDONW
Новый дизайн