Избранное трейдера Роман Давыдов
Когда-то давно я устроился на работу в небольшой брокерской компании. Помню, первый вопрос на рабочем месте от начальника отдела, старого многоопытного спокойного еврея, поверг меня в шок: «Покажите как вы определяете лучшие акции?» А я-то думал, мне все расскажут и покажут! Сильно смутившись, я начал что-то лепетать про P/E, P/S и количество абонентов. «Ну это фигня какая-то! Идите думайте» — тихим голосом неожиданно изрек вежливый начальник, во мгновенье растоптав во мне всякое самоуважение. Я думал — меня уволят в ту же неделю, но оказалось, это нормальный способ руководства у шефа. Дело было в крайне презрительном отношении начальника к P/S, ведь этот коэффициент не учитывает долги компании. Тогда, в начале нулевых стандарты задавал Стивен Дашевский, прекрасный аналитик из Атона. Этот экспат, рулевой и светоч аналитиков, любил и продвигал три мультипликатора P/E, EV/EBITDA и EV/S. Эта тройка мультов и до сих пор на пьедестале в крупных домах, например в Сбербанк-КИБ. Проделав это исследование, я могу уверенно сказать, что мой подход в прошлом был не так уж и плох. А указанная тройка вовсе не объект для поклонения, другие параметры работают не хуже.
Для начала, все таки, немного зауми.
1. Об опционах рекомендую почитать книгу — А.Н.Балабушкин Опционы и фьючерсы. Кратко, сжато, все по делу и без воды. Много хорошей математики. В общем, математику можно пропустить, нужно уловить только общий смысл — о чем эта математика.
2. На сайте eLearning есть 6-7 бесплатных лекций Твардовского — просто, ясно, доступно. Он хорошо и интересно излагает. Смотрел лет 10 назад, 2 раза. Очень рекомендую.
Теперь непосредственно об опционных стратегиях.
Простейшей стратегией является — покупка опциона. Если цена базового актива (БА) растет или будет расти — покупаем опцион CALL вне денег, в нескольких страйках (лучше не более 4-5) от центрального. Если БА падает, аналогично покупаем опцион PUT. Больше стоимости опциона при его покупке вы никак не проиграете (хотя, теперь уж и не знаю )). ГО опциона равно его стоимости, и об этом можно не беспокоится.
Теперь более сложная стратегия для совсем ленивых. Если вы считаете, что актив будет хорошо расти или падать, на центральном страйке покупаем CALL и PUT — такая позиция называется Стрэддл. Теперь, куда бы не пошла цена БА, мы будем в выигрыше. Однако, если цена за пару дней никуда существенно не сдвинется, мы проиграем из за уменьшения внутренней стоимости опциона. Это называется временной распад.
Позиция Стрэддл хороша тем, что думать вообще ни о чем не надо, однако, она, пожалуй, очень, даже слишком, дорогая, и, далеко не самая хорошая за такие-то деньги.) Вообще, начинающим в позиции типа Стрэддлы лучше не лезть.
Пожалуй наилучшей позицией в опционах является Стрэнгл. Суть его в том, что мы покупаем опцион CALL вне денег в нескольких страйках от центрального (тоже желательно не более 4-5), и примерно симметрично ему покупаем опцион PUT. Теперь, как и в случае со Стрэддлом, куда бы цена не пошла, мы получаем прибыль. Такая позиция гораздо дешевле Стреддла, и у нее есть масса других преимуществ, но это уже ближе к зауми.
Ну, и недостатки у Стрэнгла аналогичны Стрэддлу — если цена 2-3 дней никуда существенно не пойдет, мы опять получим убытки от временного распада.
Кроме того, Стрэнгл сложнее конструировать, чем Стрэддл, для которого вообще думать не надо.
В опционах есть такой параметр — Дельта, это скорость изменения цены опциона от изменения цена БА
Дельта = (Изменение стоимости опциона)/(Изменение стоимости БА)
Т.е., на сколько рублей изменится стоимость опциона, при изменении стоимости БА на 1 рубль. От страйка к страйку эта скорость меняется, и при приближении нашего опциона к центральному страйку и переходе опциона в деньги она будет возрастать.
Дельта транслируется в Quik, и ее можно добавить в таблицу опционов.
При выборе Стрэнгла желательно, чтобы параметры Дельта для опционов CALL и PUT были равны или близки друг к другу. Можно купить несколько опционов CALL и PUT в разных страйках, чтобы суммы их Дельт были примерно равны для CALL и PUT. Если же вы считаете, что актив скорее пойдет, например вверх, то Дельту для CALL можно выбрать и побольше, чем для PUT. И наоборот, в случае уменьшения стоимости БА.
Графически позиция Стрэнгл выглядит так:
Тем, кто не читал предыдущий топик этой темы, рекомендую для начала ознакомиться с ним [1].
В комментариях к предыдущему топику меня критиковали за неоптимальность кода Python. Однако, текст читают люди с совершенно разной подготовкой — от почти не знающих Python или знающих другие языки программирования, до продвинутых пользователей. Последние легко могут обнаружить неоптимальность кода и заменить его своим. Тем не менее, код должен быть доступен и новичкам, возможно не обладающим знанием пакетов и продвинутых методов. Поэтому, в коде я буду, по возможности, использовать только базовые конструкции Python, не требующие глубоких знаний, и которые могут легко читаться людьми, программирующими на других языках. Вместе с тем, по мере изложения, без фанатизма, буду вводить и новые элементы Python.
Если вы хотите как-то улучшить или оптимизировать код, приводите его в комментариях — это только расширит и улучшит изложенный материал.
Ну, а сейчас мы займемся разработкой и тестированием индикаторов. Для начала нам нужна простейшая стратегия с использованием МА — его и построим. Самой лучшей по характеристикам МА является ЕМА. Формула ЕМА:
В этом видео мы разберем один из эффективных способов анализа финансового состояния компании на основе метода Piotroski F-Score. Подробнее об алгоритме анализа читайте на блоге здесь: https://mindspace.ru/46884-pio...
Полезные ссылки:
Курс Как читать отчеты компании: https://mindspace.ru/study/08-kak-chitat-otchetnost-kompanii/
Блог Mindspace.ru: https://mindspace.ru/
Instragam: https://www.instagram.com/oxan...
Telegram: @Mindspace_ru
Всем привет!
Вдохновился данным постом ( 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 больше подходит для запуска и работы с уже отлаженными законченными программами.
По мотивам поста https://smart-lab.ru/blog/616708.php
Вот и мой велосипед на питоне для получения котировок с Мосбиржи
from urllib import request, error from json import loads import pprint class GetRawDataException(Exception): pass class GetPricesException(Exception): pass def get_prices(start_date: str, end_date: str, ticker: str) -> dict: """ Возвращает словарь: {дата:цена закрытия} """ req = 'https://iss.moex.com/iss/history/engines/stock/markets/shares/boards/TQBR/securities/{}.json?from={}&till={}'.format(ticker, start_date, end_date) contents = get_raw_data(req) try: data = loads(contents) prices = {x[1] : x[11] for x in data['history']['data']} return(prices) except Exception as err: raise GetPricesException(err) def get_raw_data(req: str) -> str: """ Возвращает результат запроса к серверу Мосбиржи """ try: contents = request.urlopen(req).read() return(contents) except URLError as err: raise GetRawDataException(err) try: prices = get_prices('2019-05-23', '2019-05-30', 'GAZP') pprint.pprint(prices) except GetRawDataException as err: print('Error getting raw data: ', str(err)) except GetPricesException as err: print('Error parsing json: ', str(err))
Вывод данных происходит с помощью функции get_prices(). Механизм простой: формируется url для GET-запроса. Мосбиржа в ответ присылает json, из которого забираются нужные данные и выводятся на экран.
Есть и другие способы получения данных: yfinance, pandas-datareader и универсальный BeautifulSoup, ещё более универсальный Selenium. Но это уже совсем другая история...