Продолжаю сидеть на самоизоляции и учусь программировать на Python. Написал полноценный калькулятор для сравнения двух любых активов.
Считает такие показатели как:
✅ Ожидаемая доходность
✅ Волатильность
✅ Коэффициент Шарпа для каждого актива
✅ Корреляцию
✅ Бету
✅ Альфу
✅ Долю волатильности исследуемого актива в базовом (удобно для сравнения с индексными фондами или индексами, если их брать в качестве базового актива)
✅ Коэффициент Трейнора
✅ Альфу Дженсена
Можно задать период на котором необходимо произвести расчеты. Строить графики для сравнения.
Обновление содержит следующие изменения:
Тем, кто не читал предыдущий топик этой темы, рекомендую для начала ознакомиться с ним [1].
В комментариях к предыдущему топику меня критиковали за неоптимальность кода Python. Однако, текст читают люди с совершенно разной подготовкой — от почти не знающих Python или знающих другие языки программирования, до продвинутых пользователей. Последние легко могут обнаружить неоптимальность кода и заменить его своим. Тем не менее, код должен быть доступен и новичкам, возможно не обладающим знанием пакетов и продвинутых методов. Поэтому, в коде я буду, по возможности, использовать только базовые конструкции Python, не требующие глубоких знаний, и которые могут легко читаться людьми, программирующими на других языках. Вместе с тем, по мере изложения, без фанатизма, буду вводить и новые элементы Python.
Если вы хотите как-то улучшить или оптимизировать код, приводите его в комментариях — это только расширит и улучшит изложенный материал.
Ну, а сейчас мы займемся разработкой и тестированием индикаторов. Для начала нам нужна простейшая стратегия с использованием МА — его и построим. Самой лучшей по характеристикам МА является ЕМА. Формула ЕМА:
Всем привет!
В этом топике напишу способ, как можно отобразить свои сделки на графике у брокера сбербанк.
Есть способы сделать это через Excel, есть, наверное через quik или какой либо другой сторонний сервис. Я буду делать через Python, так как по сравнению с экселем, питон будет давать нам актуальные данные, а эксель придется забивать руками(да я знаю, что можно и в него авто подгрузку вкрутить, но это на мой взгляд еще сложнее чем на python).
Коротко:
На входе нам нужен файл с тикерами(смотри на яндекс диске https://yadi.sk/d/hpfgtS1BEiVRiQ) и история сделок с сайта сбербанка.
На выходе мы получим вот такую вот карикатуру
Да, тут кривой текст, и нет столбиков объема, которые я так бы хотел, но кому и в таком формате пойдет, тот может читать дальше, а если тут есть добрые люди, то возможно, они смогут в комментариях кинуть исправленный фрагмент кода, чтобы была картинка по круче, особенно столбики объема добавить, как ни корячился, не допер, ибо опыт программирования у меня = школьный паскаль.
Не вдохновлено ссылками ниже, но напомнило о выкладывании в публичный доступ.
smart-lab.ru/blog/620330.php
smart-lab.ru/blog/616708.php
Всем привет!
В ходе тестов калькулятора портфелей
github.com/Oppositus/CalculatorAA
возникло понимание, что его внутренние инструменты импорта котировок уже не работают. Так давайте напишем скрипт, который будет получать их через MOEX ISS API. Вывод скрипта-CSV файл.
Репозиторий github.com/helpau/MOEX_ETFs/blob/master/main.py
Тот же код:
tickers=["FXGD","FXUS","FXIT","SBSP","FXRL","FXRB","FXRU","SBCB","SBGB","SBRB"] import requests import apimoex import pandas as pd df=pd.DataFrame() for ticker in tickers: with requests.Session() as session: data = apimoex.get_board_history(session, ticker,board="TQTF") df1 = pd.DataFrame(data) df1.set_index('TRADEDATE', inplace=True) df.info() df[ticker]=df1["CLOSE"] df.to_csv("your_table.csv",sep=";")
P.S. Касательно самого калькулятора портфелей-полученный файл необходимо дополнительно обработать, чтобы на 1 год для 1 ETF было 12 записей. Особо пытливые могут исследовать, в какой день лучше проводить ребалансировку.
Навеяло этим постом от очередного энтузиаста: https://smart-lab.ru/blog/620330.php
Коллеги! Предлагается помнить, что нас довольно много, и ответственно относиться к предоставляемым возможностям бесплатно забирать данные с бирж и добрых брокеров.
Ну вставляйте вы вызовы sleep() в циклы, это же не ХФТ у вас!
С той стороны тоже могут сидеть не вполне пряморукие товарищи, которым может быть проще прикрыть эту всю халяву, чем делать так чтобы она всегда работала, кто бы какой своей поделкой в неё не долбил. Опять же чуть что начнёте возмущаться.
И если вы не в состоянии корректно написать закачивалку данных, то может вообще не стоит заниматься алготорговлей, это же минимум в сто раз сложнее!
Всем привет!
Вдохновился данным постом ( https://smart-lab.ru/blog/616708.php ) и решил немного подпилить код, пока карантин делать нечего.
Кто не знал как скачивать котировки по одной компании вручную — сайт для скачивания котировок по одному тикеру (финам):
www.finam.ru/profile/moex-akcii/gazprom/export/
Тут через питон скачиваем котировки из текстового файла, в который вносим желаемые тикеры компаний:
Сайт для скачивания среды программирования Python (PyCharm), пойдет обычная версия:
www.jetbrains.com/ru-ru/pycharm/download/#section=windows
Файлы из видео, в том числе и со списком тикеров:
yadi.sk/d/R3BSbFjV3Pfydg
Код программы:
import requests import datetime import pathlib import apimoex import pandas as pd board = 'TQBR' with open("C:/PYEX/TICK.txt", "r") as TICKs: TICKs = [line.rstrip() for line in TICKs] pathlib.Path("C:/PYEX/Database/{}".format(board)).mkdir(parents=True, exist_ok=True) process = 0 with requests.Session() as session: for TICK in TICKs: process = process + 1 print((process / len(TICKs)) * 100, ' %') data = apimoex.get_board_history(session, TICK, board=board) if data == []: continue df = pd.DataFrame(data) df = df[['TRADEDATE','CLOSE']] df.to_excel("C:/PYEX/Database/{}/{}.xlsx".format(board,TICK), index=False)
Для моделирование ТС на Python, прежде всего нужен сам Python. Pythonы бывают очень разные.
Самый большой и длинный Python — Anaconda (https://anaconda.org/). Скачать дистрибутив Anaconda можно здесь — Индивидуальное издание -https://www.anaconda.com/products/individual.
Я работаю именно с Anaconda. Установив Anaconda мы получаем сам Python, уже установленные значительную часть нужных и ненужных пакетов с библиотеками Python, и несколько сред разработки. И все это сразу готово к работе, и нам, по большей части, уже не придется дополнительно устанавливать пакеты и среды.
Самый маленький Python последней версии 3.8.2. скачивается с сайта самого Python — https://www.python.org/. Это, практически, только сам язык, компилятор и минимальный набор пакетов. Сделать с ним практически ничего невозможно, и для работы придется постоянно устанавливать нужные пакеты. Среду разработки придется также устанавливать самостоятельно.
Этот Python больше подходит для запуска и работы с уже отлаженными законченными программами.