Блог им. Kot_Begemot |Утренний сон алготрейдера


После введения утренней торговой сессии проблема автоматического запуска торгового ПО стала особенно актуальна.
Хорошее решение предложил Евгений Логунов  в своей статье «Простой автологин за 5 минут».  Мы предложим аналогичное решение для КВИК на С++.

Задача очень простая — в 7:00 пробудить ПК с помощью планировщика заданий Windows, запустить несколько терминалов QUIK, и в каждом из них запустить торговых роботов, чтобы полностью освободить владельца всего этого счастья от физических и психических нагрузок, плохо влияющих на питание и здоровый образ жизни.


Итак, первое, что нам необходимо будет сделать это Автологин. Штука достаточно простая, учитывая то, что после запуска терминала он автоматически выдает окно приветствия. Нам нужно только дождаться появления этого окна, получить первое вводное поле (логин), второе вводное поле (пароль), вбить туда нужные значения и нажать на первую дочернюю кнопку этого окна: «Вход».

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

Блог им. Kot_Begemot |Бионические нейронные сети и оценка инвестиционной привлекательности активов

Одна из основных претензий к модели ценообразования капитальных активов и всей сопутствующей теории состоит в том, что она рассматривает жизнь как нечто унифицированное, бесплодное, состоящее из одинаковых, серых человечков. И, надо сказать, имеет на это полное право – лицензии ФСФР, сертификаты CFI, различные стандарты и ограничения превращают ярких, неповторимых управляющих в скучную серую массу, представители которой возглавляют столь же скучную первую строку Forbes... 


Что ж, давайте возьмем всех этих успешных управляющих и промоделируем их простым, бионическим нейроном.  Модель очень проста: если их долго раздражать, то они будут становиться всё более и более напряженными, пока, вдруг, не взорвутся в буре своих эмоций и не сбросят накопившееся напряжение в порыве страсти. После чего, наконец, успокоятся и уснут. И, напротив, если их вовсе не трогать, то их напряжение спадет само собой, и они уснут сами, без всякого бурного действа. Это модель возбуждения-торможения, одинаково хорошо применима и к инфузориям туфелькам, и к президенту Соединенных Штатов Америки, и, уж тем более, к нашим гениям финансового рынка. 



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

Блог им. Kot_Begemot |Ухмылки рисков


Если мы возьмем некоторый базовый актив, представленный, скажем, распределением вида:

Ухмылки рисков
Распределение приращений базового актива за 1 период, СКО = 0.63, МОЖ = 0.499




И попробуем оценить его распределение, скажем,  за 20 периодов, то получим следующее:

Ухмылки рисков

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

Блог им. Kot_Begemot |Open Source : Lua - MatLab Connector (3)



Краткое описание :

Библиотека Matlab2Lua  позволяет интегрировать Lua скрипты и Маtrix Laboratory Engine.


Полное описание :

Библиотека позволяет Lua и Матлаб обмениваться данными при помощи функций :

lua variable = Get( string Matlab varname );  — получение переменной из среды матлаб по имени, поддерживаются Double Array, Cell Array of Strings, Double Value, Integer Value, String Value. Возвращает -1 в случае неудачи.

int Eval ( string MatlabСommand ) — передает команду в MatLab Command Line, в качестве переменной типа string; возвращает -1 в случае неудачи, и 1 в случае успеха.

int PutVal( string Name, string/number Value) — передает в Матлаб значение Value типа string или number под именем Name. 1- успех, -1 — неудача.

int PutDouble( string Name, table T) — передает в Матлаб под именем Name таблицу Луа, заполненную численными значениями. Ответ — аналогичный.

int PutCell( string Name, table T)  — передает в Матлаб под именем Name таблицу Луа, заполненную строковыми или численными значениями, подлежащими преобразованию в строки. Ответ — аналогичный.


( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

Блог им. Kot_Begemot |Интеграция Lua и С++ (2)


Обмен данными между Lua и Сpp осуществляется через Lua-стэк, то есть через специальным образом структурированное (по принципу Last In — First Out) пространство. 


Интеграция Lua и С++ (2)

Иллюстрация процесса добавления переменных в Cтэк (Push) и извлечения переменных из Стэка (Pop).

Иными словами, Lua стэк — это одномерный массив переменных (список, строка) с прямой (от 1 до n) индексацией.



Заполняется стэк командами lua_push (С-side) :

void lua_pushnumber (lua_State *L, lua_Number n);
const char *lua_pushstring (lua_State *L,  const char *s);

и другими. 


Новой переменной в стэке Луа длинной n автоматически присваивается индекс [n+1] или [-1], где n+1 — абсолютный индекс переменной, а -1 — индекс новой переменной относительно конца (!) стэка. 




Доступ, к переменным, соответственно осуществляется функциями lua_to (C-side) :

lua_Number lua_tonumber (lua_State *L, int index);
const char *lua_tostring (lua_State *L, int index);
где L — указатель Lua-стэка, а index — абсолютный или относительный индекс переменной в стэке.

( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

Блог им. Kot_Begemot |Интеграция MatLab Engine и С++ (1)

В сложных вычислительных задачах (или просто при нежелании программировать на Lua, Cpp и т.д., а пользоваться более высокоуровневыми инструментами разработки), незаменимым оказывается API интерфейс Матлаба реализованный в качестве Active-X COM Automation Server.  Для его реализации на языке Си существует специальная библиотека libeng.lib, позволяющая языкам Си, С++, Фортран обмениваться данными и пользоваться всеми ресурсами Матлаба (обычно это обработка видео, автопилоты, ИИ, нейронные сети и т.п.).


Поэтому, в качестве изучения возможностей, попробуем реализовать простейший проект обмена данными и вызова функций Матлаб со стороны Си++ при использовании CodeBlocks и MinGW64.



  • Запуск интерфейса Матлаб

Чтобы адресовать все внешние процессы к единому процессу Матлаб, а не запускать Engine для каждого процесса в отдельности, 
запустим «двигатель» матлаба внутренней командой :

server=actxserver('matlab.application.single'); server.Execute(' enableservice (''AutomationServer'', true)');


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

Блог им. Kot_Begemot |Нейронные сети и ученье о данных


Когда вы занимаетесь искусственным интеллектом, то вам и в голову не приходит использовать нейронные сети! Да… такова их внутренняя сущность — к интеллекту они не имеют ровным счётом никакого отношения. В своё время NN (нейронные сети, Neural Networks) прочно ассоциировались со спиновыми стёклами — аналогом магнитной плёнки — на которую при желании можно записать ту или иную информацию. Да… в то время ещё не было ученых… как бы это правильнее перевести… ученых по данным… и в литературе часто можно было встретить выражение «образец, хранящийся в памяти сети». Другими словами, с самого своего рождения нейронные сети ассоциировались совершенно не с интеллектом, а с обычным хранилищем, своеобразной библиотекой.


Всё «обучение» нейронной сети, в те времена, сводилось к тому, чтобы загрузить в её память наиболее репрезентативную выборку образцов, чтобы с ней, в конце-концов, не случилось конфуза и она не смогла бы с завидной регулярностью идентифицировать афроамериканцев как горилл, как это случилось у Data Scientist'ов из Google Photos. Поэтому, помимо школьной  алгебры мы, как квалифицированные специалисты, изучали ещё и прикладной предмет, чтобы в любой момент, когда практика не согласовывалась бы с теорией, отметать… практику.

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

Блог им. Kot_Begemot |Критерий Келли через нормальное распределение



Ещё до того как я познакомился с критерием Келли, я уже успел наработать собственную широкую базу риск-оценок. И вопрос отказа от этого критерия для меня был, по сути, риторическим, тем более, что Келли, как бы мы того не хотели, достаточно примитивный (упрощённый) критерий. Но прежде чем отказываться от критерия хорошо бы вообще понять что это такое, учитывая, что критерий представляет весьма простое решение сложной задачи и интересен именно этим.


Для примера возьмём игру с нулевым E, в которой выигрыши распределены равномерно, с вероятностью 50/50 и представлены множеством {+50%,-50%}. За некоторое количество повторений, например за два раунда, мы будем иметь следующее распределение финансового результата:

  • 25% случаев — выигрыш 125% капитала до 2.25 (два выигрыша подряд)
  • 25% случаев — проигрыш 75% капитала до 0.25 (два проигрыша подряд)
  • 50% случаев — проигрыш 25% до 0.75 (один выигрыш и один проигрыш)

Рассчитав статистические моменты этого распределения легко убедиться, что средний выигрыш, как это положено, будет равен нулю, а наиболее вероятный вариант (мода) будет представлен проигрышем 25% капитала. Теперь, если варьировать ставку, можно убедиться, что с ростом ставки математическое ожидание по крайней мере не снижается, а мода, то есть наиболее вероятный исход — падает.

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

Блог им. Kot_Begemot |COM интерфейс МаtLab в LUA

Так уж вышло, что пару дней назад я познакомился с терминалом QUICK и языком его скриптов — LUA

   Естественно, сразу возникла необходимость передать полный контроль над этим двумя сложнейшими приложениями чему-то более простому и понятному, например Матлабу, чтобы нажимая разноцветные кнопочки «Обыграть рынок» и «Что там опять у волатильности?» оставить конечному пользователю, то есть мне, только наслаждение от наблюдения за происходящим.


     Теоретически, для этого надо нанять менеджера COM из LUACOM.dll и дать ему в управление пару простых исполнителей — объектов LUA, чтобы высшее руководство МатЛаба могло эффективно распоряжаться ресурсами в иерархии 

 Руководство МатЛаб -> менеджер интерфейса  COM -> исполнитель  объект LUA 


       Но в силу каких-то неведомых причин (от сборки dll, до сборки MS Windows и даже предустановленного железа) сделать по теории управления с ходу не получилось, поэтому была использована альтернативная схема:

( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

Блог им. Kot_Begemot |Создаём рынок волатильности по теории оптимальной улыбки (Market Making Volatility by STO)


Сегодня мы будем выступать в качестве поставщика бесконечной ликвидности по опционам. То есть мы будем безотказно играть в игру с нулевой суммой так, чтобы, как минимум, не проиграть, а это возможно только в том случае, если мы будем продавать и покупать волатильность по цене, соответствующей седловой точке в игре покупателя и продавца, то есть по цене GTO (game theory optimal). Иными словами, мы будем заниматься непосредственно pricing'ом опционов, назначая цены put'ам и call'ам, таким образом, чтобы ни одна стратегия и ни один набор случайных, стохастических стратегий не мог получить положительное преимущество при игре с нами.

Чтобы назначать цену волатильности, для начала, не плохо было бы принять какую-либо модель волатильности. Например, это может быть модель случайного процесса, подчинённого логистическому распределению:

Создаём рынок волатильности по теории оптимальной улыбки (Market Making Volatility by STO)
Рис.1. Распределение логарифмических приращений цен акций ПАО Газпром и их аппроксимация логистическим распределением.


или распределению Лапласа:

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

....все тэги
UPDONW