почему моя бета-версия отличается от Yahoo Finance?

У меня есть код, который вычисляет бета-версию S&P 500 по сравнению с любой акцией — в данном случае это тикер «FET». Однако результат, кажется, полностью отличается от того, что я вижу на Yahoo Finance, исторически эта акция была очень волатильной, и это объясняет бета-значение 1,55 на Yahoo Finance - http://finance.yahoo.com/q?s=fet. Может кто-нибудь посоветовать, почему я вижу совершенно другое число (0,0088)? Заранее спасибо.

from pandas.io.data import DataReader
from datetime import datetime
from datetime import date
import numpy
import sys

today = date.today()

stock_one = DataReader('FET','yahoo',datetime(2009,1,1), today)
stock_two = DataReader('^GSPC','yahoo',stock_one['Adj Close'].keys()[0], today)


a = stock_one['Adj Close'].pct_change()
b = stock_two['Adj Close'].pct_change()

covariance = numpy.cov(a[1:],b[1:])[0][1]
variance = numpy.var(b[1:])

beta = covariance / variance

print 'beta value ' + str(beta)

person godzilla    schedule 05.02.2015    source источник
comment
Хм, когда я запустил ваш код, я получил эту ошибку: ValueError: все измерения входного массива, кроме оси конкатенации, должны точно совпадать   -  person Chef1075    schedule 10.02.2015
comment
Кажется, количество дней, отработанных для акции 1, составляет 710, а для акции 2 — 709. Возможно, стоит начать с этого.   -  person Chef1075    schedule 10.02.2015
comment
да, у меня такая же ошибка для тикера aapl!   -  person godzilla    schedule 10.02.2015


Ответы (3)


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

 from pandas.io.data import DataReader
import pandas.io.data as web
from datetime import datetime
from datetime import date
import numpy
import sys

start = datetime(2009, 1, 1)
today = date.today()
stock1 = 'AAPL'
stock2 = '^GSPC'

stocks = web.DataReader([stock1, stock2],'yahoo', start, today)
# stock_two = DataReader('^GSPC','yahoo', start, today)

a = stocks['Adj Close'].pct_change()

covariance = a.cov() # Cov Matrix
variance = a.var() # Of stock2 
var = variance[stock2]

cov = covariance.loc[stock2, stock1]

beta = cov / var

print "The Beta for %s is: " % (stock2), str(beta)

Длина цен не совпадала, поэтому возникла проблема №1. Кроме того, когда ваша последняя строка была выполнена, вы нашли бета-версию для каждого значения матрицы cov, что, вероятно, не то, что вы хотели. Вам не нужно знать, что бета-версия основана на cov (0,0) и cov (1,1), вам просто нужно посмотреть на cov (0,1) или cov (1,0). Это позиции в матрице, а не значения.

Во всяком случае, вот ответ, который я получил:

The Beta for ^GSPC is:  0.885852632799

* Изменить *

Упростили запуск кода и изменили его, чтобы была только одна строка для ввода того, какие акции вы хотите получить от Yahoo.

person Chef1075    schedule 09.02.2015
comment
закрой, но попробуй с AAPL, скрипт не работает - person godzilla; 10.02.2015
comment
почти готово, но теперь я получаю 0,512076334094 для FET! - person godzilla; 10.02.2015
comment
Ваша бета никогда не будет точно такой же. Поскольку данные не очищаются после их извлечения из Yahoo, они могут быть разделены и подвергнуты другим корректировкам. Если вы ищете данные для торговли, вам нужно найти источник данных более высокого качества. - person Chef1075; 10.02.2015
comment
Также о бета-версии, используемой Yahoo: используемая бета-версия — это бета-версия капитала. Бета — это ежемесячное изменение цены конкретной компании относительно ежемесячного изменения цены S&P500. Период времени для бета-версии составляет 3 года (36 месяцев), если она доступна. - person Chef1075; 10.02.2015
comment
Другие вопросы о том, почему ваши цифры от Yahoo могут отличаться, см. на странице справки здесь: help.yahoo.com/kb/finance/SLN2347.html?impressions=true - person Chef1075; 10.02.2015
comment
Я ответил на ваш вопрос. Если вы так не считаете, напишите почему. - person Chef1075; 13.02.2015
comment
ну, я искал что-то для измерения бета-версии, которое было бы отдаленно близко к результатам, которые я вижу в финансах Yahoo, хотя это не достигает этого, я приму ответ, поскольку это самое близкое, что нам удалось получить к тому, что я хотел. - person godzilla; 15.02.2015

Вам нужно преобразовать закрывающий Px в правильный формат для расчета. Эти цены должны быть преобразованы в проценты доходности как для индекса, так и для цены акции.

person sjohnson    schedule 05.02.2015
comment
Вы также должны использовать избыточную доходность, то есть доходность за вычетом некоторого понятия безрисковой ставки. Вы также можете посмотреть, есть ли расхождение в степенях свободы, используемых для вычисления ковариации изначально в numpy, по сравнению с любым методом, который использовался для значения, сообщенного Yahoo. Ключевое слово ddof в Python для таких вещей иногда может иметь существенное значение. Возможно, вам лучше просто запустить его как фактическую регрессию, например. pandas.ols вместо использования формулы ковариации-дисперсии. - person ely; 05.02.2015
comment
Хорошо, я внес изменения, чтобы отразить изменения в закрытых ценах в процентах, хотя это выглядит немного лучше. Я все еще вижу расхождения между результатами кода Python и Yahoo Finance. - person godzilla; 05.02.2015

Чтобы соответствовать Yahoo Finance, вам необходимо использовать ежемесячные скорректированные цены закрытия за три года.

https://help.yahoo.com/kb/finance/SLN2347.html?impressions=true

Бета

Используемая бета – это бета капитала. Бета — это ежемесячное изменение цены конкретной компании относительно ежемесячного изменения цены S&P500. Период времени для бета-версии составляет 3 года (36 месяцев), если она доступна.

person Alexander    schedule 12.04.2015