
Друзья, хочу рассказать о том, чем мне удалось заняться в режиме самоизоляции.
Надо сказать, что я не сижу безвылазно дома, и поскольку явлюсь управляющим партнёром Инвестиционного партнёрства ABTRUST, а с юридической точки зрения – лицом, имеющим право действовать без доверенности от юридического лица – в «простонародии» Генеральным директором, то я все равно периодически езжу на работу в офис. Конечно, у меня есть QR-пропуск и я подавал разные списки на mos.ru. Но как говорится – «Береженного Бог бережет», поэтому я стараюсь минимизировать свои передвижения и принимаю все возможные меры предосторожности, несмотря на сомнительность их эффективности.
Как и у многих, кто работает в сфере управления инвестициями, я несильно привязан к месту своей работы. Просто у меня в офисе прекрасно оборудовано рабочие место, установлена масса полезных программ, таких как Matlab, и там же находится вся моя инвестиционная библиотека. Перевезти всё это домой не представляется возможным, да к тому же дети всё равно не дадут полноценно всем этим пользоваться. Но работать надо, и желательно минимизировать все возможные издержки.
После всех вычислений, приведенных в этой и этой публикациях, можно углубиться в статистический анализ и рассмотреть метод наименьших квадратов. Для этой цели используется библиотека statsmodels, которая позволяет пользователям исследовать данные, оценивать статистические модели и выполнять статистические тесты. За основу были взяты эта статья и эта статья. Само описание используемой функции на английском доступно по следующей ссылке.
Сначала немного теории:
О линейной регрессии
Линейная регрессия используется в качестве прогнозирующей модели, когда предполагается линейная зависимость между зависимой переменной (переменная, которую мы пытаемся предсказать) и независимой переменной (переменная и/или переменные, используемые для предсказания).
Я уже писал, что у меня сделана C++ DLL, которая получает данные из Lua и пишет их в БД SQLite. Уже писал также, что DLL под Lua делается на раз, и даже приводил коды и шаблон проекта простенькой C++ DLL. Посмотрело несколько тысяч, скачало, аж 12 человек, применят от силы двое. КПД постов, прямо скажем, оч низкий.)
В DLL реализована как связь с Lua, и будет реализована сама стратегия, вот только не решил какая из них. Повторять старые стратегии на новой для меня платформе Quik уже неинтересно, а новых моделей АТС отработано уже несколько. Все моделируется в Python. Часть стратегий не требует сложной математики, и могут быть легко перенесены непосредственно на С++. Другие непосредственно в DLL перенесены быть не могут, т.к. используют пакеты Python — всяческие регрессии и машинное обучение.
В общем, получилось, что DLL является шаблоном для любой стратегии. Все необходимые для АТС данные доступны АТС — реал-тайм данные поступают в DLL непосредственно из терминала, а необходимая история пишется DLL в БД SQLite и читается АТС из базы данных.
# Выделяю скорректированную цену закрытия adj_close_px = sber['Adj Close'] # Вычисляю скользящую среднию moving_avg = adj_close_px.rolling(window=40).mean() # Вывожу результат print(moving_avg[-10:])

# Вычисление короткой скользящей средней sber['40'] = adj_close_px.rolling(window=40).mean() # Вычисление длинной скользящей средней sber['252'] = adj_close_px.rolling(window=252).mean() # Построение полученных значений sber[['Adj Close', '40', '252']].plot(figsize=(20,20)) plt.show()
try:
txt=urlopen(url, timeout=20).readlines()
except timeout:
print ("Exception!\nWait...")
sleep (20)
try:
txt=urlopen(url, timeout=20).readlines()
except timeout:
print ("Exception!\nWait...")
sleep (20)
try:
txt=urlopen(url, timeout=20).readlines()
except timeout:
print ("Котировки с Финама не пришли")
Как это написать красиво внутри цикла?
print ("Котировки с Финама не пришли")