投资优化

投资组合 求对数收益 协方差

sum(W) =1

预期收益

最优化投资组合

所有最优化投资组合一一即目标收益率水平俨波动率最小的所有投资者(或者纷走风 险水平下收益率最大的所有投资组合)


对数收益率

收益相关性

  • 线性回归
  • pd.corr rolling_corr 不同时期相关性

回归分析

numpy

1
2
3
4
5
6
7
8
def np_deg(x, y, deg=1):
    """线性单项式x x^2 x^3"""
    p = np.polyfit(x, y, deg=deg)
    """
    N = len(p)
    p[0]*x**(N-1) + p[1]*x**(N-2) + ... + p[N-2]*x + p[N-1]
    """
    return np.polyval(p, x)
1
2
3
4
5
6
7
8
9
10
11
def spi_k(x, y, k=1):
    """
    插值
    在两个相邻数据点之 间进行回归,
    不仅产生的分段插值函数完全匹配数据点,而且函数在数据点上连续可 微分。
    
    比回归效果好
    必须有排序(且"无噪声" )的数据,该方 法仅限于低维度问题.样条插值的计算要求也更高,在某些用例中可 能导致花费的时间比回归方法长得多.
    """
    p = spi.splrep(x, y, k=k)
    return spi.splev(x, p)

statsmodels

1
2
3
4
5
6
7
import pandas as pd
import statsmodels.api as sm

df = pd.DataFrame({"A": [10, 20, 30, 40, 50], "B": [20, 30, 10, 40, 50], "C": [32, 234, 23, 23, 42523]})
result = sm.OLS(df['A'], sm.add_constant(df[['B', 'C']])).fit()
# print(result.summary())
print(df['B'] * result.params['B'] + df['C'] * result.params['C'] + result.params['const'])

sklearn

1
2
3
4
5
6
7
from sklearn import linear_model

reg = linear_model.LinearRegression()
reg.fit(df[['B', 'C']], df['A'])
# print(reg.coef_)
# print(reg.intercept_)
print(df['B'] * reg.coef_[0] + df['C'] * reg.coef_[1] + reg.intercept_)

持久化

pickle .pkl csv sql sqlite

快 numpy save .npy load pd HDFStore 空间小 使用numpy的结构数组 保存到PyTable 更好

PyTable内存外计算