예제 #1
0
    def cal_reverse_5days(self):
        """
        每天开盘前计算 前5个交易日 各个基金的股票成交情况
        不能自反向 :若每只基金自身 前五天有卖出(买入)情况某只股票的情况 那么基金当天不能买入(卖出)
        """
        day_period = 5

        end_date = Date().get_trade_date_offset(self.today, -1)
        beg_date = Date().get_trade_date_offset(end_date, -(day_period - 1))
        trade_series = Date().get_trade_date_series(beg_date, end_date)

        manager_info = MfcData().get_mfc_manage_info()

        for i_col in range(len(manager_info.columns)):

            person_name = manager_info.columns[i_col]
            manager_fund = manager_info[person_name]
            manager_fund = manager_fund.dropna()
            fund_list = list(manager_fund.values)

            for i_fund in range(len(fund_list)):

                fund_name = fund_list[i_fund]
                print(" Cal Fund Reverse 5 days ", fund_name, person_name)
                result = pd.DataFrame([])

                for i_date in range(len(trade_series)):

                    cur_date = trade_series[i_date]
                    data = MfcData().get_trade_statement(cur_date)
                    data = data.dropna(subset=['基金名称'])
                    data = data[['基金名称', '证券代码', '委托方向', '成交数量', '资产类别']]
                    data.columns = [
                        'FundName', 'StockCode', 'Direction', 'TradeNumber',
                        'Type'
                    ]
                    data = data[data.FundName == fund_name]
                    data = data[data.Type == '股票资产']
                    data.StockCode = data.StockCode.map(
                        CodeFormat().stock_code_add_postfix)
                    data.Direction = data.Direction.map(lambda x: 2
                                                        if x == '卖出' else 1)

                    result_date = pd.DataFrame(data.Direction.values,
                                               index=data.StockCode.values,
                                               columns=[cur_date])
                    try:
                        result = pd.concat([result, result_date], axis=1)
                    except Exception as e:
                        pass

                result = result.fillna(0)
                result.index.name = 'CODE'
                result = result.astype(np.int)

                my_result = []

                for i_row in range(len(result)):

                    vals_list = list(result.ix[i_row, trade_series])
                    vals_set = list(set(result.ix[i_row, trade_series]))

                    if 2 in vals_set:
                        append_row = [result.index[i_row], 2]
                        append_row.extend(vals_list)
                        my_result.append(append_row)

                    if 1 in vals_set:
                        append_row = [result.index[i_row], 1]
                        append_row.extend(vals_list)
                        my_result.append(append_row)

                col = ['CODE', 'FLAG']
                col.extend(trade_series)
                my_result = pd.DataFrame(my_result, columns=col)

                out_sub_path = os.path.join(self.data_path, person_name,
                                            self.today, 'reverse_5days')
                if not os.path.exists(out_sub_path):
                    os.makedirs(out_sub_path)
                out_file = os.path.join(out_sub_path, fund_name + '.csv')
                my_result.to_csv(out_file, index=None)
                print(fund_name, len(result), len(my_result))
예제 #2
0
def cal_reverse_5days(today, project_path, out_path):

    # 参数
    ###########################################################################
    person_list = ['liuxin', 'yangchao', 'caolongjie', 'liuyang']
    day_period = 5

    # 日期参数
    ###########################################################################
    before_trade_data = Date().get_trade_date_offset(today, -1)
    trade_series = Date().get_trade_date_series(end_date=before_trade_data)
    trade_series = pd.DataFrame(trade_series, index=trade_series)
    trade_series = list(trade_series.index[-day_period:])

    # 基金经理管理的基金
    ###########################################################################
    fund = pd.read_excel(project_path + 'Manage_Fund_Name.xlsx',
                         encoding='gbk')
    result = pd.DataFrame([])

    # 开始计算每只基金的5日五日反向
    #######################################################################################################
    for i_col in range(len(person_list)):

        person_name = person_list[i_col]
        fund_val = fund.ix[:, person_name]
        fund_val = fund_val.dropna()
        fund_list = list(fund_val.values)

        for i_fund in range(len(fund_list)):

            fund_name = fund_list[i_fund]
            print(" Cal Fund Reverse 5 days ", fund_name)

            for i_date in range(len(trade_series)):

                cur_date = trade_series[i_date]
                data = MfcData().get_trade_statement(cur_date)
                data = data.dropna(subset=['基金名称'])
                data = data[['基金名称', '证券代码', '委托方向', '成交数量', '资产类别']]
                data.columns = [
                    'FundName', 'StockCode', 'Direction', 'TradeNumber', 'Type'
                ]
                data = data[data.FundName == fund_name]
                data = data[data.Type == '股票资产']
                data.StockCode = data.StockCode.map(stock_code_add_postfix)
                data.Direction = data.Direction.map(lambda x: 2
                                                    if x == '卖出' else 1)

                result_date = pd.DataFrame(data.Direction.values,
                                           index=data.StockCode.values,
                                           columns=[cur_date])
                if i_date == 0:
                    result = result_date
                else:
                    try:
                        result = pd.concat([result, result_date], axis=1)
                    except:
                        pass

            result = result.fillna(0)
            result.index.name = 'CODE'
            result = result.astype(np.int)

            my_result = []

            for i_row in range(len(result)):

                vals_list = list(result.ix[i_row, trade_series])
                vals_set = list(set(result.ix[i_row, trade_series]))

                if 2 in vals_set:
                    append_row = [result.index[i_row], 2]
                    append_row.extend(vals_list)
                    my_result.append(append_row)

                if 1 in vals_set:
                    append_row = [result.index[i_row], 1]
                    append_row.extend(vals_list)
                    my_result.append(append_row)

            col = ['CODE', 'FLAG']
            col.extend(trade_series)
            my_result = pd.DataFrame(my_result, columns=col)

            out_sub_path = os.path.join(out_path, person_name, today,
                                        'reverse_5days')
            if not os.path.exists(out_sub_path):
                os.makedirs(out_sub_path)
            out_file = os.path.join(out_sub_path, fund_name + '.csv')
            my_result.to_csv(out_file, index=None)
            print(fund_name, len(result), len(my_result))