我是一个入门者,一直找不出错误!谁能帮帮我呀!!非常感谢!!!!

这个多因子模型一直出错,因为是入门者,所以找不到原因,还请会的大神帮忙指点一下,非常感谢!第一次使用CSDN!

下面的代码是在优矿平台上实现的:

def get_data(context,stocks,factors):
    """
    获得股票多因子数据
    Parameter:
        context:策略运行环境
        stocks:将获取的股票代码列表
        factors:获得的因子列表
    return:
        包含所有股票因子数据的DataFrame
    """
    
    field = ['secID']
    field.extend(factors)
    data = DataAPI.MktStockFactorsOneDayGet(tradeDate=context.previous_date,secID=stocks,ticker=u"",field=field,pandas="1")
    data.dropna(inplace=True)
    data.set_index('secID',inplace=True)
    
    return data
import numpy as np
def grade_stock_by_sorting(data,factor,ascending=True):
    """
    将股票按照单个因子factor按照升序(或降序)排序后,从0N赋予分值
    Parameter:
        data: 股票因子数据
        factor: 用来进行评分的单个因子
        ascending: 默认为True,将股票按因子大小排序,默认采用升序排列
    return:
        data: 包含经过排序打分后的因子评分数据
    """
    
    data.sort_index(by=factor,ascending=ascending,inplace=True) # 排序
    data[factor + '_adjusted'] = np.arange(len(data))           # 打分
    
    return data
def handle_factors(data,function,factors,ascending):
    """
    对数据利用某一种因子处理方式,对所有因子进行处理,返回包含处理结果的DataFrame
    parameter:
        data: 待处理的数据,是来打分的DataFrame,是从get_data中返回过来的
        function: 处理因子用方法(grade_stock_by_sorting)
        factors: 因子列表
        ascending: 因子处理函数的其他参数,是一个列表
    """
    
    # 生成处理因子时是否升序处理的字典,键为因子名,值为bool值
    factor_parameter_dictionary = dict(zip(factors,ascending))
    
    for factor in factor_parameter_dictionary.keys():
    # 利用以处理当前factor的参数,调用因子处理方法function进行因子处理
        data = function(data,factor,factor_parameter_dictionary[factor])
    
    return data
import pandas as pd
def grade_stock_by_weight(data,factors,weight):
    """
    对处理后的股票因子得分进行加权平均,得出各股票最终评分并排序
    parameter:
        data: 包含已处理好的股票因子数据,这里传进来已经打好分的DataFrame
        factors: 将进行加权平均的股票因子名称列表
        weight: 进行加权平均时使用的因子权重
    """
    
    factors = list(map(lambda x : x + '_adjusted',factors))
    
    factor_weight_dictionary = dict(zip(factors,weight))
    # 计算最终评分
    data['final_factor_grade'] = 0
    
    for factor in factor_weight_dictionary.keys():
        data['final_factor_grade'] += factor_weight_dictionary[factor] * data[factor]
    # 根据最终评分排序
    data.sort_index(by='final_factor_grade',ascending=False,inplace=True)
    sorted_stock = list(data.index)
    
    return sorted_stock
def buy_stock(context,buy_list,N):
    """
    清空当前所有持仓,并买入buy_list中前N只股票
    parameter:
        buy_list: 买入股票列表
        N: 买入股票个数
    """
    account = context.get_account('self_account')
    account.close_all_positions()
    for stock in buy_list[:N]:
        account.order_pct[stock,1.0/N]
start = '2020-01-01'
end = '2020-06-12'
universe = DynamicUniverse('A')
benchmark = 'HS300'
freq = 'd'
refresh_rate = Monthly(1)

accounts = {
    'self_account' : AccountConfig(account_type='security',capital_base=10000000)
}

def initialize(context):
    context.factors = ['VOL240','MFI','LCAP']
    context.ascending = [True,True,False]			# 因子是否按照大小升序后按照从1N进行打分,是为按升序,否为按降序
    context.weight = [0.3,0.3,0.4]
    context.N = 50									# 买入股票数量
    
def handle_data(context):
    universe = context.get_universe(exclude_halt=True)
    
    # 获取数据
    raw_data = get_data(context,universe,context.factors)
    
    # 处理因子,将每个因子进行打分
    data = handle_factors(raw_data,grade_stock_by_sorting,context.factors,ascending=context.ascending)
    
    # 计算最终因子评分,并获得降序排序后的股票代码列表
    sorted_stock = grade_stock_by_weight(data,context.factors,context.weight)
    
    # 按照因子评分买入股票
    buy_stock(context,sorted_stock,context.N)

下面是优矿给出的报错:
报错图片

希望有会的人可以帮我找出错误!谢谢你!

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值