Esempio n. 1
0
    def get_benchmark_net_asset_value(self, period, benchmark):
        data_class = GetKlineData()
        benchmark_close = None
        if period == Period.DAILY.value:
            start_time = Environment.benchmark_index[0]
            end_time = Environment.benchmark_index[-1]

            benchmark_close = data_class.get_market_data(
                Environment.index_daily_data,
                stock_code=[benchmark],
                field=['close'],
                start=start_time,
                end=end_time)
        elif period == Period.ONE_MIN.value:
            start_time = millisecond_to_date(
                millisecond=Environment.benchmark_index[0],
                format='%Y-%m-%d %H:%M:%S')
            end_time = millisecond_to_date(
                millisecond=Environment.benchmark_index[-1],
                format='%Y-%m-%d %H:%M:%S')
            benchmark_close = data_class.get_market_data(
                Environment.index_daily_data,
                stock_code=[benchmark],
                field=['close'],
                start=start_time,
                end=end_time)

        benchmark_close = list(benchmark_close)
        benchmark_net_asset_value = [
            current_close / benchmark_close[0]
            for current_close in benchmark_close
        ]
        return benchmark_net_asset_value
Esempio n. 2
0
 def get_kline_data(self):
     kline_data = GetKlineData()
     all_stock_data = kline_data.cache_all_stock_data()
     self.kline = kline_data.get_market_data(all_stock_data,
                                             stock_code=self.stock_list,
                                             field=['close'])
     return self.kline
Esempio n. 3
0
    def show_backtesting_indicator(cls, event):
        benchmark = event.event_data_dict['strategy_data'].benchmark
        account = event.event_data_dict['strategy_data'].account
        data_class = GetKlineData()
        start_time = Environment.benchmark_index[0]
        end_time = Environment.benchmark_index[-1]

        account_df = Environment.backtesting_record_account
        benchmark_df = data_class.get_market_data(Environment.index_daily_data, stock_code=[benchmark],
                                                  field=['close'], ).to_frame(name='close')
        account_df = account_df[account_df.index.get_level_values(1) == account[0]]
        account_df.reset_index(level='account_id', drop=True, inplace=True)
        net_value_analysis_obj = NetValueAnalysis(account_df, benchmark_df, start_time, end_time)

        net_analysis_result = net_value_analysis_obj.cal_net_analysis_result()
        for i in net_analysis_result:
            Environment.logger.info(i, net_analysis_result[i])

        # 持仓数据转pandas
        position_data_df = Environment.backtesting_record_position

        position_data_df = position_data_df[position_data_df.index.get_level_values(1) == account[0]]
        position_analysis_obj = PositionAnalysis(position_data_df)
        position_analysis_result = position_analysis_obj.cal_position_analysis_result()
        for i in position_analysis_result:
            Environment.logger.info(i, position_analysis_result[i])
Esempio n. 4
0
 def update_market_data(cls, event):
     current_date = event.event_data_dict["strategy_data"].time_tag
     data_class = GetKlineData()
     stock_code_list = []
     for position_data in Environment.bar_position_data_list:
         stock_code_list.append(position_data.instrument + "." +
                                position_data.exchange)
     stock_code_list = list(set(stock_code_list))
     cls.current_close_price_all = data_class.get_market_data(
         Environment.daily_data,
         stock_code=stock_code_list,
         field=["close"],
         start=current_date,
         end=current_date)
Esempio n. 5
0
                # 净值分析结果
                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 的日线,有脏数据,后续单独处理
    if datetime.datetime(2016, 1, 1) in benchmark_df.index:
        benchmark_df = benchmark_df.drop(datetime.datetime(2016, 1, 1))
    regression_analysis_obj = RegressionAnalysis(factor_ma5, 'factor_ma5',
                                                 market_close_data,
                                                 benchmark_df)
    regression_analysis_obj.cal_factor_return('float_value_inverse')
    regression_analysis_obj.cal_t_value_statistics()
    regression_analysis_obj.cal_net_analysis()
Esempio n. 6
0
        self.get_month_ratio_average()
        self.get_day_volatility()
        self.get_month_volatility()
        self.get_selection_timing()


if __name__ == '__main__':
    start_time = datetime(2010, 1, 4)
    end_time = datetime(2019, 11, 4)
    kline_object = GetKlineData()
    #
    # 指数行情,沪深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'],
        start=start_time,
        end=end_time).to_frame(name='close')
    # 策略净值数据,index 为 datetime,取单个账户分析,后续可做多个账户
    net_value_df = pd.read_csv('account_data.csv', index_col=0)
    net_value_df.index = pd.DatetimeIndex(net_value_df.index)
    net_value_single_account_df = pd.DataFrame({})
    for i in net_value_df.groupby('account_id'):
        net_value_single_account_df = i[1]
        break

    net_value_analysis_obj = NetValueAnalysis(net_value_single_account_df,
                                              benchmark_df, start_time,
                                              end_time)
    net_value_analysis_obj.cal_net_value()
    net_value_analysis_obj.cal_profit_ratio()