Избранное трейдера Роман Давыдов

по

График выплат и погашений ОФЗ в наглядной форме

Недавно интересовались графиком выплат / погашений ОФЗ в наглядной форме. Например, это может понадобиться при построении облигационного портфеля с определенным графиком поступлений. Их есть у меня.

Для начала разберемся с погашениями:

График выплат и погашений ОФЗ в наглядной форме

Зеленым обозначены ОФЗ с фиксированным номиналом и купоном
Желтым — бумаги с переменным купоном
Оранжевым — облигации с индексируемым номиналом (ОФЗ-ИН)
Синим — с амортизируемым номиналом ОФЗ-АД

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

Теперь определимся с купонами. Вот:

График выплат и погашений ОФЗ в наглядной форме

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

Исторические данные с ММВБ (мой велосипед)

По мотивам поста 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. Но это уже совсем другая история...


Принципы Рэя Далио. Принцип 2: Используй 5 шагов, чтобы получить от жизни все что хочешь

5 ступенчатый процесс, чтобы получить от жизни все что хочешь:
👉Ставь ясные цели
👉Определи проблемы которые стоят на пути к целям и не будь толерантен к ним
👉Точно определи проблемы чтобы добраться до корня проблем
👉Разработай план который позволит обойти проблемы
👉Делай что необходимо, чтобы протолкнуть план к результату

Надо проходить этот процесс последовательно и каждый пункт по порядку (а не параллелить их). Ставишь цели — просто ставь цели. Не думай о том, как будешь их достигать. Когда определяешь проблемы — не думай как будешь их решать.

📌 2.1. Ставь ясные цели

👉2.1.А. Расставь приоритеты. Вы конечно можете взять что хотите, но не сможете забрать всё.
Выбрать цель иногда значит отказаться от чего-то менее важного.
Не думайте преследовать слишком много целей одновременно.

👉2.1.Б. Не путай цели с желаниями.
Цель — это то, что вам действительно надо достичь.
Желания — это вещи, которые могут стоять на пути ваших целей.

👉2.1.В. Определите чего вы хотите от жизни, примиряя ваши цели и желания. 

👉2.1.Г. Не путайте внешние проявления успеха с успехом

👉2.1.Д. Никогда не исключайте цель, потому что она кажется вам недостижимой 

👉2.1.Е. Помните: великие ожидания создают великие возможности

👉2.1.Ж. Почти ничто вас не остановит перед успехом, если вы а) гибкие б) ответственны перед собой
а) позволяет реальности учить вас. б) нужна чтобы увидеть, что если вы ошиблись, то вы сами сделали что-то не так.

👉2.1.З. Чтобы двигаться двигаться вперед, надо знать как реагировать на неудачи


✏️ Вступление
✏️ Главы 1-2. Познание рынков
✏️ Глава 3. Познание рынка и себя
✏️ Глава 4. Торговые системы 
✏️ Глава 5. Расширение компании
✏️ Глава 6. Движители прогресса
✏️ Глава 7,8. О деньгах и счастье 

✏️ Принцип 1: Прими реальность и работайте с ней
✏️ Принципы 1.5-1.10. Боль + рефлекия = прогресс 
✏️ Принцип 2: Используй 5 шагов, чтобы получить от жизни все что хочешь 

Искусственный трейдер. Часть 3. Или ТСЛаb в 20 строк кода.

Надеюсь, все живы и здоровы!
Предупреждаю сразу — текста будет больше чем когда кОда (сам код в конце топика).
Перед тем как перейти к созданию алгоритмов машинного обучения, напишем код для тестирования стратегий и отображения результатов.
Мне нужно: описать логику сигналов на покупку и продажу, затем эти сигналы передать симулятору, который в течение конкретной торговой сессии будет показывать на графике точки, соответствующие этим сигналам, а также рассчитывать изменение прибыли и текущей позиции в каждый момент времени. Данные должны загружаться в хронологическом порядке в цикле по торговым сессиям. После завершения обработки нужно создать итоговый график «эквити» по дням, на графике видеть значения максимальной прибыли и «просадки» за каждую торговую сессию, максимальный уровень риска (величину открытой позиции), количество совершенных сделок и соотношение убыточных-прибыльных дней. Вроде бы все пока. Короче, нужно по-быстрому написать ТСЛаb.

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

Использование метода Монте-Карло для создания портфеля

    • 26 апреля 2020, 14:17
    • |
    • Aleks
  • Еще

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

В этом посте будет рассмотрено то, как оптимизировать портфель при помощи Python и симуляции Монте Карло. Под оптимизацией портфеля понимается такое соотношение весов, которое будет удовлетворять одному из условий:

  • Портфель с минимальным уровнем риском при желаемой доходности;
  • Портфель с максимальной доходностью при установленном риске;
  • Портфель с максимальным значением доходности

Для расчета возьмем девять акций, которые рекомендовал торговый робот одного из брокеров на начало января 2020 года и так же он устанавливал по ним оптимальные веса в портфеле: 'ATVI','BA','CNP','CMA', 'STZ','GPN','MPC','NEM' и 'PKI'. Для анализа будет взяты данные по акциям за последние три года.

#Загружаем библиотеки

import pandas as pd
import yfinance as yf
import numpy as np
import matplotlib.pyplot as plt

# Получаем данные по акциям
ticker = ['ATVI','BA','CNP','CMA', 'STZ','GPN','MPC','NEM', 'PKI']

stock = yf.download(ticker,'2017-01-01', '2019-01-31')


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

Качаем исторические данные с MOEX!

Итак, передо мной, уверен, как и перед многими, встал вопрос поиска исторической информации с Мосбиржи. Немного зная python, я написал вот такой парсер:
import requests
import datetime
import pathlib

SECIDs = ["GAZP", "BANEP", "LKOH"]
DISK = "E"
for SECID in SECIDs:
    from_date = "2020-05-04"
    to_date = "2005-01-03"
    while str(to_date) != from_date:
        to_date = str(to_date)
        to_date = to_date.split('-')
        a = datetime.date(int(to_date[0]), int(to_date[1]), int(to_date[2]))
        b = datetime.timedelta(days=140)
        to_date = a + b
        pathlib.Path("{}:/{}/{}".format(DISK, "Database_MOEX", SECID)).mkdir(parents=True, exist_ok=True)
        filename = SECID + "_" + str(to_date) + ".csv"
        with requests.get("http://iss.moex.com/iss/history/engines/stock/markets/shares/boards/tqbr/securities/{}.csv?date={}".format(SECID, to_date)) as response:
            with open("{}:/Database_MOEX/{}/{}".format(DISK, SECID, filename), 'wb') as f:
                for chunk in response.iter_content():
                    f.write(chunk)
Для начала пройдемся по его плюсам и минусам. Самый главный минус, что этот парсер качает только определенный период, который уникален для каждой акции, судя по всему для увеличения этого периода надо кинуть бирже на лапу:), и то что информация предоставляется за день, теперь перейдем к плюсам: можно выкачивать историю за определенный период для нескольких инструментов сразу (их количество ограничивается лишь количеством инструментов на мосбиржи), есть возможность назначать диск для сохранения информации, быстрота выгрузки данных.

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

USDRUB исходя из стоимости нефти по формуле Немцова

Правительство РФ заинтересовано поддерживать курс доллара на таком уровне, чтобы цена нефти, пересчитанная в рубли, не падала ниже, чем заложено в бюджет. На 2020 год, с учетом поправок к бюджету РФ, ориентиром цены нефти стала сумма 2709 руб. за баррель. То есть бюджет сверстан исходя из предположения, что нефть будет стоить $42,4 за баррель, а доллар – 63,9 руб. А раз бюджет принят, его нужно исполнять, падение рублевой цены барреля ниже 2709 рублей крайне нежелательно (часто эту формулу называют формулой Немцова). Повлиять на цену нефти Россия не может, а вот «подкрутить» курс доллара к рублю Центробанк может. Итак, сколько должен стоит доллар по этой формуле (по состоянию на 22.04.2020 10:30 МСК):

USDRUB исходя из стоимости нефти по формуле Немцова
Также обратите внимание, что мы взяли для расчета цену нефти сорта Brent, хотя указанная «бюджетная» цена установлена для марки Urals. Цена Urals обычно ниже Brent (порой до 10%), поэтому полученный выше курс доллара можно считать немного заниженным в рамках данной логики расчета. То есть полученный результат можно интерпретировать следующим образом – это самый минимальный курс доллара, который необходим российскому бюджету, чтобы не прибегать к проеданию созданных ранее накоплений.

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

А еще , на опционах можно зарабатывать такими стратегиями.

    • 17 апреля 2020, 17:51
    • |
    • FZF
  • Еще

Сегодня сделал извращение на волатильностях  Si и  RTS. Это были недельные опционы с экспирацией 23/04/2020.  На центральном 107500 страйке   RTS волатильность была  60 , а на центральном 75000 страйке Si  волатильность опустилась до 20. 

Волатильность Si я купил, а RTS  продал. Сделал я это  через стредлы.
А еще , на опционах можно зарабатывать такими стратегиями.

Пропорции выбирал следующим образом.  Фьючерс   RTS в рублях стоит 158709 руб., а фьючерс Si  =75000 руб. На один  RTS приходится 2,116 Si .

Поскольку Si  я покупал, а  RTS продавал, то пропорцию взял с запасом 1:3

Дальше подразумевалось дельтахеджирование по следующим правилам:

Когда у RTS дельта становится 1, выравнивать ее в ноль, и в этот же момент выравнивать в ноль позицию Si.  Ведущей должна быть проданная позиция.

Позицию я сделал в 12:30, а к 16:20 волатильности немного сошлись. Закрыл позицию с прибылью 5400 руб.

Ждать не стал, поскольку у меня нет математического описания для таких позиций. Делаю я так редко и по интуиции. Но если в рублях выразить центры стредлов, то Si примерно на 18-19 тыс. руб. дешевле, чем  RTS.  Так что, 5 тысяч мне для получения удовольствия вполне хвалило. Жадничать не надо.




Наивный прогноз волатильности

Берём РИ.
Смотрим на high-low за сегодня, вчера и позавчера.

Проверяем гипотезу о чередовании волатильности и её контртрендовости.

Если позавчера было больше, чем вчера, то сегодня должно быть также больше чем вчера.
Если угадали, то получили +1. Если не угадали, то -1. В итоге получаем в среднем +0,28.
Работает.

Если позавчера было меньше, чем вчера, то сегодня должно быть также меньше, чем вчера.
По такой же схеме баллы +1 и -1. В итоге +0,38 в среднем.
Опять работает.

Перейдем к процентам. Что будет в относительных величинах, если делать ставку на изменение дневного диапазона цены
по отношению к средней сегодняшней цене.

Для первого случая получаем среднюю «сделку» в +0,54%. Это что-то типа купленного стрэддла.
Для второго случая получаем среднюю «сделку» в +0,61%. Это что-то типа проданного стрэддла.

Заглянув в стаканы опционов, понимаем, что издержки могут измеряться процентами, поэтому грааля тут нет,
но, как факт, любопытно.

Возможной стратегией, реализующей эти случаи была бы покупка/продажа стрэддла, например, в 18:30, удержание в один день и скидывание на следующий день в такие же 18:30.

....все тэги
UPDONW
Новый дизайн