优化交易策略的滚动平均窗口(python)
我有一个时间序列叫做“价差”,我试图最大化交易策略的夏普比率,这取决于:优化交易策略的滚动平均窗口(python),python,scipy-optimize,scipy-optimize-minimize,Python,Scipy Optimize,Scipy Optimize Minimize,我有一个时间序列叫做“价差”,我试图最大化交易策略的夏普比率,这取决于: 滚动平均数 滚动标准偏差的次数(在滚动平均值上创建上下秩) 问题是我无法优化,因为: “ValueError:窗口必须是整数” 如何为最小化函数指定x1(滚动周期)中的整数值 战略职能是: def statarb(x): x1 = x[0] x2 = x[1] df['RollingMean'] = df['Spread'].rolling(x1).mean() df['Desv'] = d
def statarb(x):
x1 = x[0]
x2 = x[1]
df['RollingMean'] = df['Spread'].rolling(x1).mean()
df['Desv'] = df['Spread'].rolling(x1).std()
df['superior'] = df['RollingMean'] + (df['Desv'] * x2)
df['inferior'] = df['RollingMean'] - (df['Desv'] * x2)
df['signal'] = np.where(df['Spread']>df['superior'],-1,np.nan)
df['signal'] = np.where(df['Spread']<df['inferior'],1,df['signal'])
#Returns
df['ret'] = (df['Spread']/df['Spread'].shift()-1)
df['BnH'] = df['ret'].cumsum()
#Position
df['positions'] = df['signal'].fillna(method='ffill')
#Strategy return
df['Stratr'] = df['ret']*df['positions'].shift()
df['Strat_ret'] = df['Stratr'].cumsum()
#Sharpe Ratio
prom = df['Stratr'].mean()*252
desv = df['Stratr'].std()*np.sqrt(252)
sharpe = prom/desv
return -sharpe
致意
import numpy as np
from scipy.optimize import minimize
x0 = [50, 1]
print(statarb(x0))
n = (10, 500)
m = (1, 3)
bnds = (n, m)
sol = minimize(statarb, x0, bounds=bnds)
print(sol)