wlm1ke / poptimizer_old Goto Github PK
View Code? Open in Web Editor NEWОптимизация долгосрочного портфеля акций
License: The Unlicense
Оптимизация долгосрочного портфеля акций
License: The Unlicense
File "<ipython-input-3-0972a52afb4b>", line 1, in <module>
runfile('C:/Users/PogrebnyakEV/Desktop/mini-kep/po/src/optimizer/portfolio.py', wdir='C:/Users/PogrebnyakEV/Desktop/mini-kep/po/src/optimizer')
File "D:\Continuum\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 880, in runfile
execfile(filename, namespace)
File "D:\Continuum\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/PogrebnyakEV/Desktop/mini-kep/po/src/optimizer/portfolio.py", line 96, in <module>
value=3_728_568.41)
File "C:/Users/PogrebnyakEV/Desktop/mini-kep/po/src/optimizer/portfolio.py", line 40, in __init__
self._create_df(cash)
File "C:/Users/PogrebnyakEV/Desktop/mini-kep/po/src/optimizer/portfolio.py", line 54, in _create_df
df = getter.security_info(self.tickers)
File "C:\Users\PogrebnyakEV\Desktop\mini-kep\po\src\optimizer\getter\local_securities_info.py", line 109, in get_security_info
df = update_local_securities_info(tickers)
File "C:\Users\PogrebnyakEV\Desktop\mini-kep\po\src\optimizer\getter\local_securities_info.py", line 75, in update_local_securities_info
validate(df, df_update)
File "C:\Users\PogrebnyakEV\Desktop\mini-kep\po\src\optimizer\getter\local_securities_info.py", line 60, in validate
f'{df_update}')
ValueError: Загруженные данные ['VSMO', 'GAZP', 'TTLK'] не стыкуются с локальными.
COMPANY_NAME REG_NUMBER LOT_SIZE
TICKER
VSMO Р’РЎРњРџРћ-РђР’РЎРњ 1-01-30202-D 1
GAZP ГАЗПРОМ ао 1-02-00028-A 10
TTLK Таттел. ао 1-02-50049-A 10000
COMPANY_NAME REG_NUMBER LOT_SIZE
TICKER
VSMO ВСМПО-АВСМ 1-01-30202-D 1
GAZP ГАЗПРОМ ао 1-02-00028-A 10
TTLK Таттел. ао 1-02-50049-A 10000
В выдаче IIS иногда бывают пропущенные значения - функция quotes_history(ticker, first=None)
должна удалять их из выдачи
Конструктор:
Данные:
Методы:
Не очень понятно зачем оборачивать функцию ticker_url - видимых выигрышей нет:
надо ли для проверки парсить эти данные по дивидендам?
Необходимо реализовать метрики доходности по следующей приблизительной схеме:
Свежим взглядом - мое предложение насчет двух функций сейчас мне кажется перегружает понимание функций. Предлагаю для конечного пользователи оставить quotes_history(ticker, start_date)
и index_history(ticker, start_date)
, где start_date
- опциональный. Внутри кода можно использовать *_from_start() функции.
История котировок акций источник данных - quotes_history(ticker, start_date) и index_history_from_start(ticker)
Итория значений индекса MOEX Russia Net Total Return (Resident) источник данных - index_history(ticker, start_date) и index_history_from_start(ticker)
Тикеры акций могут меняться. Так у текущего тикера UPRO очень не глубокая история, так как тикер менялся
Каждому типу данных соответсвует класс (или набор функций)
Конструктор класса принимает один или два параметра:
Данные хранятся в формате csv (при необходимости в xlsx)
Корневая папка с данным задается глобальной переменной на уровне пакета - первоначально папка data в корне проекта
Типы данных, содержащие один элемент, хранятся в корне папки данных в файле с именем соответствующего типа данных. Пример: класс данных инфляция - один элемент CPI - хранится в корне папки данных
Типы данных, содержащих несколько элементов, хранятся в отдельных папках с именем класса и файлами внутри с именем соответствующего элемента. Пример: класс котировки - много элементов, соответствующих отдельным тикерам - создается папка котировки и в ней файлы для каждого тикера
Вопросы:
Необходимо для реализации #28
В текущей реализации функции quotes_history(ticker, first=None) выгружается одна котировка для каждой даты за счет элемента boards/TQBR/
в URL. В результате история котировок неглубокая - с начала работы режима Т+2 (TQBR). В результате не захватывается 2008 год.
Если исключить этот элемент из URL - длина истории возрастает, но на каждую дату может приходиться несколько котировок.
Необходимо реализовать:
Возможное решение с помощь groupby и idxmax
Suggested to separate functions for:
Кроме изменения тикеров у некоторых бумаг меняются и регистрационные номера - пример SBER.
Необходимость реализации под вопросом - если по ключевым бумагам текущая история уходит за 2008 год, то большого смыслы в реализации такой возможности нет
Необходима возможно динамически анализировать портфель и вести статистику:
Разделить запрос последней цены и информации по тикерам
Запрос информации должен требовать одного похода в интернет в день
Запрос по последней цене требует обязательного обновления данных
FAIL Required test coverage of 99% not reached. Total coverage: 93.95%
где это сконфигурировано? надо поскорее отключить
R = (p1 + div) / p0
Сейчас при расчете константы сглаживания отбрасываются первые 100 значений
Необходимо реализовать более формализованный подход:
Лог нормального или лог Стьюдента
На MOEX насчитывается значение индексов полной доходности (учитывает дивиденды) с учетом налогов - больше всего подходит MCFTRR - MOEX Russia Net Total Return (Resident)
По некоторым бумагам нет дивидендов: MSRS - необходимо придумать и реализовать альтернативную схему загрузки данных
В развитие #12
Данные
pd.read_excel('I_ipc.xlsx', sheet_name='ИПЦ', header=3,skiprows=[4], skip_footer=3)
File "C:\Users\PogrebnyakEV\Desktop\mini-kep\po\src\optimizer\download\tickers.py", line 11, in get_json
respond = requests.get(url)
...
SSLError: HTTPSConnectionPool(host='iss.moex.com', port=443): Max retries exceeded with url: /iss/securities.json?q=1-02-00028-A (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),))
Описание протокола доступа к ИИС MOEX
Можно узнать дату начала торгов бумаги
Пример запроса истории котировок
Для оптимизации дивидендного потока портфеля необходимо максимизировать нижнюю границу его доверительного интервала для t-статистики=T (по умолчанию 2)
Необходимо последовательно рассчитать метрики дивидендного потока по следующей схеме:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.