深证成指(399001.XSHE),'2008-06-30'和'2008-08-31'返回的买入信号异常,求助

来源:5-6 动量策略:计算组合收益率(等权重)

探寻神性的汪星人

2021-07-18

用下面的代码跑,测得最后没搞明白,返回的买入信号超过设置的 前N个收益率

def get_top_stocks(data, top_n=4):
    '''
    找到n个的极值,并转换为交易信号
    :param data:
    :param top_n:最佳 和 最差 组合分别的个数
    :return: 买入卖出信号的整合表
    '''
    # 交易信号容器
    buy_signal = pd.DataFrame(index=data.index, columns=data.columns)
    sell_signal = pd.DataFrame(index=data.index, columns=data.columns)

    for index, row in data.iterrows(): # 遍历每行数据
        buy_signal.loc[index] = row.isin(row.nlargest(top_n)).astype(int) # 形成并合并买入信号
        
        # 查找出错日期
        if index in pd.to_datetime(['2008-06-30', '2008-08-31']):
            for i in row.nlargest(top_n): 
            
		        # 打印前N 收益率
                a = row.nlargest(top_n) 
                print(a)
                # 大于前n 买入信号
                a = row.isin(row.nlargest(top_n))[row.isin(row.nlargest(top_n)) != 0] 
                print(a)
    exit()
写回答

1回答

DeltaF

2021-07-20

有点没太看懂?要么贴一下结果?和你觉得应该正确的结果?可以开一个新的问题

0
1
探寻神性的汪星人
隔天搞定了。 记得是因为那两天成分股普遍大跌,导致筛选靠前的n个收益里面包含0%收益。又因为jqdate会把停牌的股票对应的交易日填充最近的收盘价,所以用df.isin()筛选了多个停牌股,造成多个买入信号。
2021-07-24
共1条回复

程序员理财课 Python量化交易系统实战

打造一个自动交易平台,新手也能提升理财收益

1986 学习 · 405 问题

查看课程