Избранное трейдера FateevVV
Доклад «Оптимизация портфеля алгоритмических стратегий»
1. Введение
В чем состоит цель подобной оптимизации? Представим, что у нас есть набор алгоритмов, каждый из которых обладает некоторыми статистическими свойствами, из которых наиболее важными для нас являются доходность и максимальная величина просадки. В основе каждого из алгоритмов лежат разные стратегии, которые, тем не менее, могут быть коррелированы между собой в разной степени, торговля также может вестись на разных инструментах. В качестве примера приведу характеристики стратегий, которые были разработаны нашей командой и применяются в боевых торгах в настоящее время:
Так как свойства каждого из алгоритмов отличаются, возникает проблема: каким образом распределить между ними доступный капитал для того чтобы:
1. Максимизировать доход при заданном уровне риска ( то есть максимальной величине просадки)
2. Минимизировать риск при заданной доходности
Если дать, например равные доли капитала каждому алгоритму, то, очевидно, что такое распределение не будет оптимальным, так как мы не учитываем характеристики, присущие стратегиям. Не будет оптимальным и тот случай, когда мы, например, выделяем капитал пропорционально относительной доходности каждого алгоритма, здесь мы игнорируем значения волатильности, то есть риска, стратегий.
2. Модель Марковица
Задачу оптимизации попробуем решить, применив теорию оптимального портфеля, разработанную Марковицем, точнее некоторые последующие ее модификации. Обычно данная теория применяется для долгосрочного инвестиционного портфеля, состоящего из различных активов, например акций. Кратко суть теории.
Продолжаем проект богатеем медленно.

В этом посте я открою вам величайший инвестиционный грааль. Правда я не первый, кто сообщит вам о нем. Есть еще один парень. Кажется его зовут Уоррен Баффет. А грааль собственно состоит в понимании какой бизнес можно считать хорошим а какой плохим. Чтобы выяснить это нужно ответить на два вопроса:
1. Как компания финансируется, из прибыли или допэмиссий.
2. На сколько эффективно работает капитал компании, эффективно ли компания использует нераспределенную (не выплаченную в виде дивидендов) прибыль.
Давайте рассмотрим примеры (все цифры за 1 полугодие 2016). Тест №1
Сургутнефтегаз. Акционерный капитал равен 3402729 млн. руб. Нераспределенная прибыль равна 3190129 млн. руб. Процент нераспределенной прибыли в капитале равен 93,8%. Мы видим что компания финансируется из прибыли. Это говорит о хороших операционных результатах. Компания прошла первый тест.
Государство гарантирует! 5.000.000 под ставку 9,54% годовых на 1,5 года. Выше и надежней, чем у Сбербанка.
Тонкости инвестирования в ОФЗ.
В этой статье я расскажу о привлекательности облигаций федерального займа для частного инвестора (ОФЗ).
Что такое ОФЗ?
ОФЗ – облигация, выпускаемая Министерством финансов РФ. Покупка облигации федерального займа означает, что вы даете деньги в долг государству. Государство, в свою очередь, дает обязательство не только выплатить долг держателю облигации, но и процентные выплаты по купонам.
Почему стоит инвестировать в ОФЗ?
Купон выплачивается как правило раз в полгода и фиксирован на весь срок обращения.
Подумал, что многие не знают, как подступиться к языку Qlua и запустить робота в квике. А между тем, это настолько просто, что даже не требует ничего кроме квика, виндусовского блокнота и знаний самого Qlua.
Qlua – это скриптовый язык поддерживаемый квиком, в основе язык lua 5.1 (в моем квике версия такая).
Скрипты, написанные на Qlua – это обычные текстовые файлы, которые имеют расширение «.lua». То есть можно сделать файл в обычном блокноте и после сохранения поменять в нем расширение с «.txt» на «.lua». Если внутрь этого файла записать инструкции кода на языке Qlua, то квик будет выполнять их.
Для удобства написания инструкций кода лучше пользоваться не виндусовым стандартным блокнотом, а например Notepad++, который можно скачать официально и бесплатно здесь https://notepad-plus-plus.org/download/v6.9.1.html. Он позволяет включить подсветку синтаксиса различных языков программирования, в том числе и lua, что очень помогает при написании кода.
В Notepad++ в «Опции -> Настройки» можно выбрать русский язык, а в «Опции -> Определение стиля» установить для lua понравившийся стиль отображения. Я для «Язык -> lua» ставлю стиль «Выбрать стиль -> Bespin» и еще в окошке «Стиль» для последних трех «FUNC» переопределяю цвет, иначе они с фоном сливаются.
Из опыта первой статьи вы наверное вспомните, что я предложил под каждый блок сообщения делать класс и на основе этих классов строить сообщение. Переспав с этой идеей, сегодня за кружкой чая, я решил остановиться на этой идее. А именно: Если говорить образно. То, чтобы отправить сообщение на сервер, нам просто нужно сформировать нужную строку со всеми данными и отправить ее на биржу. Ну например:
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, длину сообщения нужно считать без учета концовки и первых двух полей заголовка. А именно:

Зеленым я отметил именно разделители. Как вы уже видите, это просто в шестнадцатеричном виде код 01. То есть, в нашу строку в виде разделителей, нужно вставлять код 01. Также я отметил для себя последовательность полей в сообщении. Почему то в другом порядке у меня вызывало ошибки (возможно тут я не прав)
Ну и контрольная сумма. Контрольная сумма считается над всем сообщением, за исключением концовки. То есть в расчет берется только заголовок и само сообщение. Для этого, мы переводим каждый символ в его Ascii код и вычисляем их сумму. Полученную сумму делим по модулю 256. Это и будет контрольной суммой сообщения. При этом, значение должно быть трехзначным. Если мы получаем 2 знака, то подставляем 0 слева (например, если контрольная сумма = 68, то должны передать значении 068).
Как видим, первый метод строит нужную строку из полей. Обратите внимание, там присутствует наш разделитель в виде спец символа \u0001. Второй метод вычисляет размер заголовка (чтобы потом высчитывать размер сообщения). Надо обратить внимание, что при передачи времени, миллисекунды должны указываться в трехзначном формате (даже если миллисекунды = 52, то передаем 052). Следующие классы строятся по аналогии.

//Получаем 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));



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

Интерфейс не описываю, так как он очевиден и интуитивно понятен. Это начальная версия, в дальнейшем функциональность может добавляться. Если есть какие-то пожелания, прошу высказываться в комментариях, и голосовать за эти комментарии, в первую очередь будут реализовываться самые желаемые потребности. Выражаю благодарность r0man за его пост http://smart-lab.ru/blog/221012.php. Его пост изначально сподвиг меня на удобный веб-сервис, а его активное участие в разработке данного сервиса, помогло все это воплотить.