系统在计算上是奇异的:倒数条件数=1.59968e21

2024-05-28 20:05:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我用R来计算SP500中所有股票的相切投资组合。在

权益列表是通过python脚本加载的

import urllib2
import pytz
import pandas as pd
import numpy as np

from bs4 import BeautifulSoup
from datetime import datetime
from pandas.io.data import DataReader


SITE = "http://en.wikipedia.org/wiki/List_of_S%26P_500_companies"
START = datetime(1900, 1, 1, 0, 0, 0, 0, pytz.utc)
END = datetime.today().utcnow()


def scrape_list(site):
    hdr = {'User-Agent': 'Mozilla/5.0'}
    req = urllib2.Request(site, headers=hdr)
    page = urllib2.urlopen(req)
    soup = BeautifulSoup(page)

    table = soup.find('table', {'class': 'wikitable sortable'})
    sector_tickers = dict()
    for row in table.findAll('tr'):
        col = row.findAll('td')
        if len(col) > 0:
            sector = str(col[3].string.strip()).lower().replace(' ', '_')
            ticker = str(col[0].string.strip())
            if sector not in sector_tickers:
                sector_tickers[sector] = list()
            sector_tickers[sector].append(ticker)
    return sector_tickers



# export sp500 in a list    
def get_sp500_all():
    sector_tickers = scrape_list(SITE)
    a = sector_tickers.values()
    b = a[0]
    for i in range(1, len(a)):
        b.extend(a[i])
    return b

if __name__ == '__main__':
    all_symbols = get_sp500_all()
    all_symbols.sort()
    print len(all_symbols)


np.savetxt('all_symbols.csv',all_symbols, delimiter=',',fmt="%s")

然后将包含所有股票的csv加载到R中,在R中计算相切投资组合

^{pr2}$

但总有错误

Error in solve.default(cov(returns_df), mu2) : 
  system is computationally singular: reciprocal condition number = 1.59968e-21

我也可以使用函数相切。投资组合.r

##Tangency portfolio

# download tangency.portfolio.r
# https://r-forge.r-project.org/scm/viewvc.php/pkg/IntroCompFinR/R/tangency.portfolio.R?view=markup&root=introcompfinr
source("D:\\MOOC\\compfinance\\excise\\tangency.portfolio.r")

#The tangency portfolio

# risk free rate
t_bill_rate = 0.00001
# Tangency portfolio short sales allowed
tangency_portfolio_short = tangency.portfolio(mu_hat_month, cov_mat_month, risk.free=t_bill_rate, shorts=TRUE)

有错误

 Error in chol.default(cov.mat) : 
  the leading minor of order 25 is not positive definite 

似乎返回的数据有问题,但不知道哪里出错了。有人能帮忙吗?在


Tags: infromimportdatetimeiftablecolall

热门问题