Избранное трейдера Rox
В прошлый раз я решился и написал свой первый пост (http://smart-lab.ru/blog/310809.php), который был положительно встречен публикой и повисел денек в лучших записях дня.
Напомню, я говорил о своем опыте, что часто мы торопимся входить в рынок, а на самом деле сделки наши не должны быть одинаковыми по своему значению, и лучше бы ждать и готовить свою ключевую, на которой вы и будете делать свой недельный профит.
При этом правильно, если вы будет ожидать движения в два раза больше (например, 4-5%), чем собираетесь взять в плюс (2-3%). В итоге 1-4% в неделю – вполне реальная доходность при таком неторопливом выжидательном подходе.
В целом, комментарии были конструктивными, но один обратил особое внимание:
«Юрий Никулин, 1-3% в неделю — это, несомненно, успех. Хорошо, если еще депозит крупный и такая доходность позволяет спокойно жить «с рынка».
Я писал, что за последнее время систематизировал большой объем своих старых записей, которые собирал на протяжении более 5 лет, записывая мысли ярких персонажей, опубликованных на зарубежных и отечественных форумах. Так вот, почти все мои «авторы» говорили, что часто мы делаем ошибку, когда начинаем торговать маленьким счетом совсем по другим правилам, нежели большим.
И снова всем добрый день! Ко мне за последнее время поступило много вопросов — сколько времени уходит на то, чтобы вернуть часть полученного убытка по операциям с ценными бумагами и финансовыми инструментами срочных сделок.
Срок для возврата денег (сальдирования убытков) составляет всего четыре месяца. В этот срок включается:
1. Срок для проведения проверки документов (декларации 3-НДФЛ, справок от брокера) составляет три месяца.
2. Срок для возврата налога после проведенной проверки — один месяц. Но тут надо помнить, что вместе с пакетом документов для получения налогового вычета по НДФЛ надо обязательно написать и сдать заявление на возврат налога. В этом заявлении вы пишите сумму налога к возврату, ваши реквизиты счета. Если такое заявление не поступит налоговикам, вам деньги не вернут.
Приведу такой пример: вы 14 марта подали декларацию 3-НДФЛ на возврат налога, дата заявления на возврат денег тоже идет от 14 марта. Так вот, до 14 июля вам (если с документами все хорошо и декларация составлена верно) вернут денежные средства.
Вот и кончились наши злоключения. К сожалению, бобик исдох. Я имею ввиду софт для торговли опционов. Пришлось отключаться от программ. Но это отдельная история и я ее опишу позже. Пока я перенес позиции в другой терминал и вот что мы имеем.
У нас остались проданные опционы. Ход стратегии я описывал в комментариях к прошлым топикам. Мы постепенно сливали кастрюлю и добавляли бомбу. Немного сдвинулись вправо. Но это наше право. Хочется верить, что до экспирации ни чего не произойдет. Вот профит прикинуть, пока не получится. Надо разгребать отчеты брокера. Дело в том, что по ходу выполнения стратегии мне активно оказывали помощь. И купленные 1000 коллов, на 10000 страйке, смазывают картину. Надо фильтровать.
Продолжаю серию статей. Начало тут http://smart-lab.ru/blog/310895.php
Итак, у нас имеется история в виде набора упорядоченных по времени тиков, но используем мы только данные цены. Перед началом проведем подготовку данных (как я называю «упаковку тиков»). Например, есть исторический отрезок со следующими данными (окончание сессии от 12.02.2016 по ESH16):
Как мы видим множество соседних тиков, имеют одинаковое значение цены, что создает «избыточность данных». Если мы оставим только те последовательные тики, цена которых отличается от предыдущего, то количество данных ощутимо сократиться:
Это я и называю упаковкой тиков. Но на самом деле такой способ упаковки удобен для дата-майнинга, для симуляции на истории удобен способ «меньшего сжатия», когда мы оставляем только те последовательные тики, цена которых отличается от предыдущих. Или тики, которые по времени отстоят от предыдущего более чем на 1 секунду. Это необходимо при симуляции выставления и исполнения ордеров. И также дает нам биржевое время, с точностью до секунды, для функционирования работа в режиме симуляции по истории. В этом случае картинка будет следующей:
Итак, данные подготовлены и можно приступить к «описанию и поиску простейших паттернов» (этот блок служит для ввода в курс дела, а не отражает практический способ). Например, имеется некоторый паттерн, представленный на следующем рисунке:
Паттерн выделен оранжевым цветом. Какая особенность алгоритма необходима для его выявления? Это то, что он должен искать паттерн при поступлении каждой порции данных. Паттерн может начаться с любого тика, и закончится на любом. Т.е. поиск в данном случае будет представлять «трафарет»:
Подставляемый для каждого тика в последовательности, и при совпадении с которым паттерн считается «опознанным» (Т.е. трафарет как-бы скользящий).
Представленный пример достаточно сильно утрирован, в реальности трафарет не столь «жёсткий» и возможно бы включал в себя и следующие представления:
P.P.S
Формирование следующих статей цикла будет производиться по мере наличия времени и желания ;)
Всем успехов в торговле!
Если говорить образно. То, чтобы отправить сообщение на сервер, нам просто нужно сформировать нужную строку со всеми данными и отправить ее на биржу. Ну например:
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;
Если быть внимательным, то мы увидим, что кол-во символов в строке у нас 100, а в заголовке сообщения мы передаем, что 78 (9 = 78). По правилам протокола FIX, длину сообщения нужно считать без учета концовки и первых двух полей заголовка. А именно:
//Получаем 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));