def calc_beta(symbol): # ohlc = dl.data.OHLC()# 生成数据获取对象 # SHci = ohlc.get('000001.ss')['Adj Close']# 获取市场数据 # stock = ohlc.get(symbol)['Adj Close']# 获取股票数据 SHci = data.get_data_yahoo('000001.ss', start=start, end=end)['Adj Close'] stock = data.get_data_yahoo(symbol, start=start, end=end)['Adj Close'] df = pd.DataFrame({'SHci': SHci, symbol: stock}).dropna() # 将股票数据与市场数据结合 SHci_rets = fc.log_rets(df['SHci']) # 计算市场对数收益率 rets = fc.log_rets(df[symbol]) # 计算股票对数收益率 beta, _ = np.polyfit(SHci_rets, rets, 1) # 拟合beta系数 print(symbol) # annualize & percentify return beta, 250 * rets.mean() * 100 # 返回beta系数,年化收益率
def variance_return(stocka, stockb, stds): ohlc = dl.data.OHLC() dfa = data.get_data_yahoo(stockb, start=start, end=end) dfb = data.get_data_yahoo(stockb, start=start, end=end) #dfa = ohlc.get(stocka) #dfb = ohlc.get(stockb) merged = pd.merge(left=dfa, right=dfb, right_index=True, left_index=True, suffixes=('_A', '_B')).dropna() retsa = fc.log_rets(merged['Adj Close_A']) retsb = fc.log_rets(merged['Adj Close_B']) corr = np.corrcoef(retsa, retsb)[0][1] return 0.25 * (stds[stocka] ** 2 + stds[stockb] ** 2 + 2 * stds[stocka] * stds[stockb] * corr)
return ratio fc.delete_not_safe(infoClass.STOCKS, infoClass.STOCKS_ZH) zh_font = mpl.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc') # 为每一只股票计算平均收益和标准偏差 means = {} stds = {} ohlc = dl.data.OHLC() for stock in infoClass.STOCKS: print(stock) close = data.get_data_yahoo(stock, start=start, end=end)['Adj Close'] # close = ohlc.get(stock)['Adj Close'] rets = fc.log_rets(close) means[stock] = rets.mean() stds[stock] = rets.std() # 计算所有股票的所有组合的网格比率 pairs = dl.collect.grid_list(infoClass.STOCKS) sorted_pairs = [[sorted(row[i]) for row in pairs] for i in range(len(infoClass.STOCKS))] ratios = {} grid = [[ calc_ratio(row[i][0], row[i][1], means, stds, ratios) for row in sorted_pairs ] for i in range(len(infoClass.STOCKS))] print(grid) # 使用tensorflow求最大值及每行最大值索引
import numpy as np from scipy.stats import norm from IPython.display import HTML import matplotlib as mpl from datetime import datetime zh_font = mpl.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc') # 计算股票收益 ohlc = dl.data.OHLC() rets_dict = {} start = datetime(2018,12,1,0,0,0,0) end = datetime(2019,5,11,0,0,0,0) for i, symbol in enumerate(infoClass.STOCKS): print(symbol) rets = fc.log_rets(fc.get_historical_data(symbol, start=start, end=end)['Adj Close']) rets_dict[symbol] = rets # SHci = fc.log_rets(ohlc.get('000001.ss')['Adj Close']) # 计算收益的偏度和峰度 skews = [skew(rets_dict[s]) for s in infoClass.STOCKS] kurts = [kurtosis(rets_dict[s]) for s in infoClass.STOCKS] std_skews = np.std(skews) std_kurts = np.std(kurts) print(std_skews) print(std_kurts) #构建输出样式 dfb = dl.report.DFBuilder(cols=['ZH', 'Ticker', 'Skew/std', 'Kurt/std'])