Избранное трейдера Роман Давыдов
Самый большой и известный в мире биржевой фонд REITов.
Краткий обзор VNQ
Фонд инвестирует в акции REITов и компаний, которые покупают офисные здания, отели и другую недвижимость. Цель фонда - близко следовать за результатами индекса MSCI US REIT Index.
Доходность фонда
На момент написания поста среднегодовой рост цены за 10 лет составляет 4,56%. Дивиденды за 2016 к цене пая — 4,7%. Если сложить эти цифры, то получится впечатляющая годовая доходность — 9,26% в долларах. При этом дивиденды растут из года в год.
Любители сдавать в наем московские квартиры только позавидуют такой доходности.
Комиссии
0,12% в год. Очень низкая плата. Нельзя даже сравнивать с уровнем комиссий российских ЗПИФов недвижимости (от 2-5% ежегодно + 1,5% надбавка при покупке пая).
Финансовые показатели
Статья из блога Robot Wealth.
Продолжая мои исследования в области моделирования временных серий, я решил изучить авторегрессивные и условные гетероскедатичные модели. В частности, я взял авторегрессивную модель ARIMA и общую авторегрессивную гетероскедатичную модель GARCH, так как на них часто сылаются в финансовой литературе. Далее следует описание того, что я узнал об этих моделях и основной процесс нахождения их параметров, а также простая торговая стратегия, основанная на предсказаниях полученной модели.
Сначала дадим несколько необходимых определений. Я не хочу воспроизводить всю теорию целиком, ниже дан краткий обзор моделирования временных серий, в частности ARIMA и GARCH моделей:
В первую очередь, вычисление ARIMA и GARCH моделей это способ узнать, при каких прошлых наблюдениях, шуме и дисперсии временной серии возможно предсказать следующее значения этой серии. Такие модели, параметры которых правильно установлены, имеют некоторую предсказательную способность, предполагая, конечно, что эти параметры остаются постоянными на некоторое время для данного процесса.
1. История улыбки теперь не сохраняется если сделаны сделки только фьючерсом. История сохраняется, если были сделки только над опционами.
2. При удалении стратегии, файл истории этой стратегии теперь тоже удаляется, раньше не удалялся в итоге эти файлы росли.
3. Сделал возможность скрытия портфеля нажатием одной кнопки, при нажатии её еще раз, портфель примет предыдущее состояние.
4. Сделал отображение греков и профита в подвале главной формы. Это необходимо для того чтобы контролировать их при свернутой форме «Портфель».
Статья из блога "Trading with Python" об элементарной стратегии, которая демонстрирует последовательный подход к разработке алгоритмов.
Недавно я прочел пост на сайте turingfinance.com "Как стать квантом". Вкратце, он описывает научный подход к созданию торговых стратегий. Для меня, наблюдение за данными, обдумывание модели и формирование гипотезы является второй натурой, как это и должно быть для любого хорошего инженера.
В данной статье я собираюсь показать такой подход по шагам, которые нужны для разработки стратегии.
Давайте возьмем наиболее популярный инструмент — S&P 500 ETF «SPY». Начнем с наблюдений.
Обзор данных
Мне кажется, что большую часть времени в СМИ говорят об обрушении рынков (больших потерь в течение нескольких дней), умалчивая о значительном росте, который следует за ними.
Небольшая статья с ресурса http://www.talaikis.com/ о построении простой стратегии, использующую наивный байесовский классификатор при создании процесса возврата к среднему. Весь код в статье приведен на языке Python.
Это достаточно большая область исследований, но расскажем все очень кратко. Мы попытаемся найти взаимоотношение между временными сериями (в данном случае возьмем в качестве сигнала взаимный фонд XLF из финансового сектора, сдвинутый по времени на 1 день назад), а нашей целью будет фьючерс S&P500 в форме CFD. Будем входить в длинную позицию по этой бумаге при нулевой вероятности приращения. Логически нулевая вероятность ни о чем не говорит, другими словами, будем покупать возврат к среднему.
1. Получение данных
Y = read_mongo(dbase, "S&P5001440") X = read_mongo(dbase, syms[s]).shift() #готовим набор данных res = pd.concat([X.CLOSE, Y.CLOSE], axis=1, join_axes=[X.index]).pct_change().dropna() res.columns = ['X', 'Y']