예제 #1
0
 def get_adj_factor(self, adjustment_mode):
     folder_name = LocalDataFolderName.ADJ_FACTOR.value
     path = LocalDataPath.path + folder_name + '/'
     data = pd.DataFrame({})
     if adjustment_mode == RightsAdjustment.BACKWARD.value:
         data = get_local_data(
             path, AdjustmentFactor.BACKWARD_ADJ_FACTOR.value + '.h5')
     elif adjustment_mode == RightsAdjustment.FROWARD.value:
         data = get_local_data(
             path, AdjustmentFactor.FROWARD_ADJ_FACTOR.value + '.h5')
     return data
예제 #2
0
 def get_all_sws_index(self):
     folder_name = LocalDataFolderName.SWS_INDEX.value
     path = LocalDataPath.path + folder_name + '/'
     data_name = folder_name + '.h5'
     self.all_sws_index = get_local_data(
         path, data_name).sort_values(by='time_tag')
     return self.all_sws_index
예제 #3
0
 def cache_all_stock_data(self,
                          period=Period.DAILY.value,
                          dividend_type=RightsAdjustment.NONE.value,
                          field=None):
     if field is not None:
         self.field = field
     folder_name = LocalDataFolderName.MARKET_DATA.value
     sub_folder_name = LocalDataFolderName.KLINE_DAILY.value
     sub_sub_folder_name = LocalDataFolderName.A_SHARE.value
     path = LocalDataPath.path + folder_name + '/' + sub_folder_name + '/' + sub_sub_folder_name + '/'
     all_market_date = {}
     adj_factor = 1
     if dividend_type == RightsAdjustment.FROWARD.value:
         adj_factor = self.adj_factor_obj.get_adj_factor(
             RightsAdjustment.FROWARD.value)
     elif dividend_type == RightsAdjustment.BACKWARD.value:
         adj_factor = self.adj_factor_obj.get_adj_factor(
             RightsAdjustment.BACKWARD.value)
     for i in self.field:
         data_name = i + '.h5'
         data = get_local_data(path, data_name)
         if isinstance(adj_factor, int):
             all_market_date[i] = data
         else:
             if i in ['open', 'high', 'low', 'close']:
                 all_market_date[i] = data.multiply(adj_factor)
             else:
                 all_market_date[i] = data
     return all_market_date
예제 #4
0
 def cache_all_index_data(self, period=Period.DAILY.value):
     folder_name = LocalDataFolderName.MARKET_DATA.value
     sub_folder_name = LocalDataFolderName.KLINE_DAILY.value
     sub_sub_folder_name = LocalDataFolderName.INDEX.value
     path = LocalDataPath.path + folder_name + '/' + sub_folder_name + '/' + sub_sub_folder_name + '/'
     index_date = {}
     for i in self.field:
         data_name = i + '.h5'
         index_date[i] = get_local_data(path, data_name)
     return index_date
예제 #5
0
    def get_share(self, field=None):
        """

        :param field: 'total_share', 'float_a_share', 'total_share_value',  'float_a_share_value'
        :return:
        """
        if field is None:
            field = 'total_share'
        folder_name = LocalDataFolderName.INDICATOR_EVERYDAY.value
        path = LocalDataPath.path + folder_name + '/'
        data_name = field + '.h5'
        self.share_data = get_local_data(path, data_name)
        return self.share_data
예제 #6
0
                acf_result=self.acf_result,
                # 因子收益率,单利,复利, 日收益率
                factor_return=factor_return,
                # 单因子检测的T值, Series, index为时间
                factor_t_value=factor_t_value,
                # 单因子检测的T值的统计值,'t_value_mean': 绝对值均值, 't_value_greater_two':绝对值序列大于2的占比
                factor_t_value_statistics=self.factor_t_value_statistics,
                # 净值分析结果
                net_analysis_result=self.net_analysis_result)
            doc.save()


if __name__ == '__main__':
    factor_name = 'factor_ma10'
    path = LocalDataPath.path + LocalDataFolderName.FACTOR.value + '/'
    factor_ma5 = get_local_data(path, factor_name + '.h5')
    # 指数数据不全,需要删一部分因子数据
    factor_ma5 = factor_ma5[factor_ma5.index < datetime.datetime(2020, 1, 1)]

    kline_object = GetKlineData()
    market_data = kline_object.cache_all_stock_data(
        dividend_type=RightsAdjustment.BACKWARD.value, field=['close'])
    market_close_data = kline_object.get_market_data(market_data,
                                                     field=['close'])

    # 指数行情,沪深300代替
    all_index_data = kline_object.cache_all_index_data()
    benchmark_df = kline_object.get_market_data(
        all_index_data, stock_code=['000300.SH'],
        field=['close']).to_frame(name='close')
    # 沪深300 的日线,有脏数据,后续单独处理
예제 #7
0
        result = factor_ic_mean.apply(cal_weight,
                                      args=(factor_ic_cov, ),
                                      axis=1,
                                      result_type="expand")
        result.columns = factor_ic.keys()
        return result.div(result.sum(1), axis=0)


if __name__ == '__main__':
    factor_list = ['factor_ma5', 'factor_ma10']

    path = LocalDataPath.path + LocalDataFolderName.FACTOR.value + '/'
    factor_data = {}
    for factor_name in factor_list:
        factor_single_data = get_local_data(path, factor_name + '.h5')
        # 指数数据不全,需要删一部分因子数据
        factor_data[factor_name] = factor_single_data[
            factor_single_data.index < datetime(2020, 1, 1)]

    with MongoConnect(DatabaseName.MULTI_FACTOR_DATA.value):
        factor_ic = {}
        factor_return = {}
        for factor_name in factor_list:
            factor_regression_analysis_result = FactorRegressionAnalysisResult.objects(factor_name=factor_name) \
                .only('factor_name') \
                .only('begin_date') \
                .only('end_date') \
                .only('factor_return') \
                .as_pymongo()
            factor_return[factor_name] = pd.DataFrame(
                close_price = close_price_all['close'][stock]
                if np.isnan(close_price):
                    continue
                buy_share = int(
                    self.single_stock_value / close_price / 100) * 100
                Trade(self).order_shares(stock_code=stock,
                                         shares=buy_share,
                                         price_type='fix',
                                         order_price=close_price,
                                         account_id=self.account[0])
                Environment.logger.info(self.time_tag, 'buy', stock, buy_share,
                                        'fix', close_price, self.account[0])


if __name__ == '__main__':
    path = LocalDataPath.path + LocalDataFolderName.FACTOR.value + '/'
    factor_ma5 = get_local_data(path, 'factor_ma5.h5')
    # 指数数据不全,需要删一部分因子数据
    factor_ma5 = factor_ma5[factor_ma5.index < datetime(2020, 1, 1)]
    stratification_analysis_obj = StratificationAnalysis(
        factor_ma5, 'factor_ma5')
    stratification_analysis_obj.add_group()
    group_hold = stratification_analysis_obj.cal_group_hold(
        stratification_analysis_obj.group_key[0])
    stratification_strategy = StratificationStrategy(group_hold)
    import time

    a = time.time()
    stratification_strategy.run(save_trade_record=True)
    print(time.time() - a)
예제 #9
0
 def get_all_index_members(self):
     folder_name = LocalDataFolderName.INDEX_MEMBER.value
     path = LocalDataPath.path + folder_name + '/'
     data_name = folder_name + '.h5'
     self.all_index_members_df = get_local_data(path, data_name)
     return self.all_index_members_df
예제 #10
0
 def get_calendar(self, market):
     folder_name = LocalDataFolderName.CALENDAR.value
     path = LocalDataPath.path + folder_name + '/'
     data_name = 'calendar_' + market + '.h5'
     data = get_local_data(path, data_name)
     return list(data[0])
예제 #11
0
 def get_index_class(self):
     folder_name = LocalDataFolderName.INDUSTRY_CLASS.value
     path = LocalDataPath.path + folder_name + '/'
     data_name = 'sw_industry_one' + '.h5'
     self.index_class_df = get_local_data(path, data_name)
     return self.index_class_df