示例#1
0
def predict_stock_base_on_similars(code):
    tops = find_similar_of_a_stock(code)

    if tops is None:
        return None

    tops = tops.head(config.nb_similar_make_prediction)
    pred_ratios1, pred_ratios5, pred_ratios10, pred_ratios20 = 0, 0, 0, 0

    for _, top in tops.iterrows():
        pred = market.get_data(start_date=top['DATE'], code=top['CODE'])

        if config.speed_method in ['rm_market_vr_fft']:
            pred_market_ratios1 = market.get_span_market_ratio(pred, 1)
            pred_market_ratios5 = market.get_span_market_ratio(pred, 5)
            pred_market_ratios10 = market.get_span_market_ratio(pred, 10)
            pred_market_ratios20 = market.get_span_market_ratio(pred, 20)
        else:
            pred_market_ratios1, pred_market_ratios5, pred_market_ratios10, pred_market_ratios20 = 0, 0, 0, 0

        pred_ratios1 += (pred.iloc[1]['CLOSE'] - pred.iloc[0]['CLOSE']
                         ) / pred.iloc[0]['CLOSE'] - pred_market_ratios1
        pred_ratios5 += (pred.iloc[5]['CLOSE'] - pred.iloc[0]['CLOSE']
                         ) / pred.iloc[0]['CLOSE'] - pred_market_ratios5
        pred_ratios10 += (pred.iloc[10]['CLOSE'] - pred.iloc[0]['CLOSE']
                          ) / pred.iloc[0]['CLOSE'] - pred_market_ratios10
        pred_ratios20 += (pred.iloc[20]['CLOSE'] - pred.iloc[0]['CLOSE']
                          ) / pred.iloc[0]['CLOSE'] - pred_market_ratios20

    size = tops.shape[0]
    return [
        code, pred_ratios1 / size, pred_ratios5 / size, pred_ratios10 / size,
        pred_ratios20 / size
    ]
示例#2
0
def make_index_prediction():

    pool = Pool(processes=config.cores)
    all_stocks_avg_pred_results = pool.map(predict_stock_base_on_similars,
                                           market.codes)
    pool.close()

    pred1, pred5, pred10, pred20 = 0, 0, 0, 0
    for result in all_stocks_avg_pred_results:
        if result is None:
            continue
        pred1 += result[1] / len(all_stocks_avg_pred_results)
        pred5 += result[2] / len(all_stocks_avg_pred_results)
        pred10 += result[3] / len(all_stocks_avg_pred_results)
        pred20 += result[4] / len(all_stocks_avg_pred_results)

    m = market.get_data(start_date=market.current_date)
    act1 = (m['800_MARKET'].iloc[1] -
            m['800_MARKET'].iloc[0]) / m['800_MARKET'].iloc[0]
    act5 = (m['800_MARKET'].iloc[5] -
            m['800_MARKET'].iloc[0]) / m['800_MARKET'].iloc[0]
    act10 = (m['800_MARKET'].iloc[10] -
             m['800_MARKET'].iloc[0]) / m['800_MARKET'].iloc[0]
    act20 = (m['800_MARKET'].iloc[20] -
             m['800_MARKET'].iloc[0]) / m['800_MARKET'].iloc[0]
示例#3
0
    def test_get_historical_data(self):
        config.start_date = pd.to_datetime('2015-11-20')

        from codes.market import market
        pattern = market.get_data(start_date=config.start_date,
                                  code='603883.SH')
        self.assertEqual(pattern.shape[0], 30)
        self.assertEqual(str(market.current_date.date()), '2015-12-31')
示例#4
0
def make_prediction():

    pool = Pool(processes=config.cores)
    all_stocks_avg_pred_results = pool.map(predict_stock_base_on_similars,
                                           market.codes)
    pool.close()
    all_stocks_avg_pred_results = [
        x for x in all_stocks_avg_pred_results if x is not None
    ]

    pred_ratios1, pred_ratios5, pred_ratios10, pred_ratios20 = [], [], [], []
    act_ratios1, act_ratios5, act_ratios10, act_ratios20, codes = [], [], [], [], []

    for avg_pred_result in all_stocks_avg_pred_results:
        codes.append(avg_pred_result[0])

        pred_ratios1.append(avg_pred_result[1])
        pred_ratios5.append(avg_pred_result[2])
        pred_ratios10.append(avg_pred_result[3])
        pred_ratios20.append(avg_pred_result[4])

        act = market.get_data(start_date=market.current_date,
                              code=avg_pred_result[0])

        if config.speed_method in ['rm_market_vr_fft']:
            act_market_ratios1 = market.get_span_market_ratio(act, 1)
            act_market_ratios5 = market.get_span_market_ratio(act, 5)
            act_market_ratios10 = market.get_span_market_ratio(act, 10)
            act_market_ratios20 = market.get_span_market_ratio(act, 20)
        else:
            act_market_ratios1, act_market_ratios5, act_market_ratios10, act_market_ratios20 = 0, 0, 0, 0

        act_ratios1.append((act.iloc[1]['CLOSE'] - act.iloc[0]['CLOSE']) /
                           act.iloc[0]['CLOSE'] - act_market_ratios1)
        act_ratios5.append((act.iloc[5]['CLOSE'] - act.iloc[0]['CLOSE']) /
                           act.iloc[0]['CLOSE'] - act_market_ratios5)
        act_ratios10.append((act.iloc[10]['CLOSE'] - act.iloc[0]['CLOSE']) /
                            act.iloc[0]['CLOSE'] - act_market_ratios10)
        act_ratios20.append((act.iloc[20]['CLOSE'] - act.iloc[0]['CLOSE']) /
                            act.iloc[0]['CLOSE'] - act_market_ratios20)

    preds = [pred_ratios1, pred_ratios5, pred_ratios10, pred_ratios20]
    acts = [act_ratios1, act_ratios5, act_ratios10, act_ratios20]

    get_prediction_and_calcu_corr(codes, preds, acts)
示例#5
0
    def apply(x):
        x_ = x.head(config.nb_similar_make_prediction).copy()
        pattern_code = x_['pattern'].values[0]

        pred_ratio1, pred_ratio2, pred_ratio3, pred_ratio4, pred_ratio5, pred_ratio10, pred_ratio20 = 0, 0, 0, 0, 0, 0, 0
        size = 0
        for index, top in x_.iterrows():
            pred = market.get_data(start_date=top['DATE'], code=top['CODE'])

            if pred.shape[0] != 30:
                print('---Cannot found 30 ', top['CODE'], ' for ',
                      pattern_code, ' start form ', str(top['DATE']))
                continue
            size += 1
            pred_ratio1 += market.get_span_ret(
                pred, 1) / market.get_span_market_ratio(pred, 1) - 1
            pred_ratio2 += market.get_span_ret(
                pred, 2) / market.get_span_market_ratio(pred, 2) - 1
            pred_ratio3 += market.get_span_ret(
                pred, 3) / market.get_span_market_ratio(pred, 3) - 1
            pred_ratio4 += market.get_span_ret(
                pred, 4) / market.get_span_market_ratio(pred, 4) - 1
            pred_ratio5 += market.get_span_ret(
                pred, 5) / market.get_span_market_ratio(pred, 5) - 1
            pred_ratio10 += market.get_span_ret(
                pred, 10) / market.get_span_market_ratio(pred, 10) - 1
            pred_ratio20 += market.get_span_ret(
                pred, 20) / market.get_span_market_ratio(pred, 20) - 1

        if config.is_regression_test:
            act = market.get_data(start_date=market.current_date,
                                  code=pattern_code)
            act_ratios1.append(
                market.get_span_ret(act, 1) /
                market.get_span_market_ratio(act, 1) - 1)
            act_ratios2.append(
                market.get_span_ret(act, 2) /
                market.get_span_market_ratio(act, 2) - 1)
            act_ratios3.append(
                market.get_span_ret(act, 3) /
                market.get_span_market_ratio(act, 3) - 1)
            act_ratios4.append(
                market.get_span_ret(act, 4) /
                market.get_span_market_ratio(act, 4) - 1)
            act_ratios5.append(
                market.get_span_ret(act, 5) /
                market.get_span_market_ratio(act, 5) - 1)
            act_ratios10.append(
                market.get_span_ret(act, 10) /
                market.get_span_market_ratio(act, 10) - 1)
            act_ratios20.append(
                market.get_span_ret(act, 20) /
                market.get_span_market_ratio(act, 20) - 1)
        # else:
        #     print('正在进行实际预测, 无实际值...', pattern_code)

        pred_ratios1.append(pred_ratio1 / size)
        pred_ratios2.append(pred_ratio2 / size)
        pred_ratios3.append(pred_ratio3 / size)
        pred_ratios4.append(pred_ratio4 / size)
        pred_ratios5.append(pred_ratio5 / size)
        pred_ratios10.append(pred_ratio10 / size)
        pred_ratios20.append(pred_ratio20 / size)

        codes.append(pattern_code)