Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
优化交易策略的滚动平均窗口(python)_Python_Scipy Optimize_Scipy Optimize Minimize - Fatal编程技术网

优化交易策略的滚动平均窗口(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

我有一个时间序列叫做“价差”,我试图最大化交易策略的夏普比率,这取决于:

  • 滚动平均数
  • 滚动标准偏差的次数(在滚动平均值上创建上下秩)
  • 问题是我无法优化,因为: “ValueError:窗口必须是整数”

    如何为最小化函数指定x1(滚动周期)中的整数值

    战略职能是:

    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)