Esempio n. 1
0
def check_single_stk_middle_level(stk_code, dict):
    """
    输入代码,返回level
    :param stk_code:
    :return:
    """
    # 获取当前价格
    current_price = get_RT_price(stk_code, source='jq')

    if stk_code in dict.keys():
        l = relativeRank(dict[stk_code], current_price)
    else:
        df_hour = get_k_data_JQ(stk_code,
                                count=None,
                                start_date=add_date_str(
                                    get_current_date_str(), -60),
                                freq='60m')
        dict[stk_code] = list(df_hour['close'].values)

        l = relativeRank(list(df_hour['close'].values), current_price)

        with open(data_dir + 'middlePeriodHourData.json', 'w') as f:
            json.dump(dict, f)

    return l
Esempio n. 2
0
    df = df.dropna(how='any', axis=0)

    """
    画图语句
    df.plot('date', ['upper', 'lower', 'high', 'low'], style=['-', '-', '*', '*'])

    """

    # 计算短期波动率(3天)
    near_days = 3
    df['low_near'] = df['low'].rolling(window=near_days).min()
    df['high_near'] = df['high'].rolling(window=near_days).max()

    df['wave_near'] = df.apply(lambda x: x['high_near'] - x['low_near'], axis=1)

    df['wave_near_rank'] = df.apply(lambda x: 100 - relativeRank(df['wave_near'], x['wave_near']), axis=1)
    """
    df.plot('date', ['close', 'wave_near_rank', 'wave_near'], style=['--*', '--*'], subplots=True)
    """

    """
    如何调节买卖比例:

    用移动均线-未成熟随机值(RSV)来对买卖比例进行分配,
    实现在上涨时,易买难卖,在下跌时,易卖难买,最终能够实现随着趋势线调整仓位重心的目的。
    避免在迅速下跌时爆仓,在迅速上涨时空仓的情况。
    """

    #
    # def updateRSVRecord():
    #     try:
Esempio n. 3
0
def predict_tomorrow(
        stk_code,
        label,
        N_STEPS=N_STEPS,
        feature_cols=feature_cols,
        HIDDEN_SIZE=HIDDEN_SIZE,
        NUM_LAYERS=NUM_LAYERS
):

    """

    :param stk_code:    例子 '300508'
    :param label:       例子 'high'
    :param N_STEPS:
    :param feature_cols:
    :param HIDDEN_SIZE:
    :param NUM_LAYERS:
    :return:
    """

    """ ---------------------- 读取json中存储的极值 ---------------------- """
    with open(rootPath + '\Function\LSTM\AboutLSTM\stk_max_min.json', 'r') as f:
        max_min_info = json.load(f)

    """ ---------------------- 获取实时数据 ---------------------- """
    data_now = ts.get_k_data(stk_code)[-(N_STEPS+30):]

    # 增加M9 Rank
    data_now['m9'] = data_now['close'].rolling(window=9).mean()
    data_now['diff_m9'] = data_now.apply(lambda x: (x['close'] - x['m9']) / x['close'], axis=1)
    data_now['rank'] = data_now.apply(lambda x: relativeRank(max_min_info[stk_code]['m9_history'], x['diff_m9']), axis=1)

    # rootPath = 'C:/Users\paul\Desktop\软件代码\Git-Clone'

    for c in ['close', 'high', 'low', 'open']:
        data_now[c] = (data_now[c].values - max_min_info[stk_code]['p_min'])/(max_min_info[stk_code]['p_max'] - max_min_info[stk_code]['p_min'])

    data_now['volume'] = (data_now['volume'].values - max_min_info[stk_code]['v_min'])/(max_min_info[stk_code]['v_max'] - max_min_info[stk_code]['v_min'])

    # 进行归一化
    input_normal = data_now.loc[:, feature_cols].tail(20).values

    tf.reset_default_graph()

    """ ---------------------- 创建模型 ---------------------- """
    predictions, loss, train_op, X, y = lstm_model(
        n_steps=N_STEPS,
        n_inputs=len(feature_cols),
        HIDDEN_SIZE=HIDDEN_SIZE,
        NUM_LAYERS=NUM_LAYERS)

    # 创建保存器用于模型
    saver = tf.train.Saver()

    # 初始化
    sess = tf.Session()
    model_name = stk_code + '_' + label
    model_dir = rootPath + 'Function\LSTM\AboutLSTM\modelDir/'

    if os.path.exists(model_dir + model_name + '/' + model_name + '.ckpt.meta'):

        saver = tf.train.import_meta_graph(
            model_dir + model_name + '/' + model_name + '.ckpt.meta')
        saver.restore(sess, tf.train.latest_checkpoint(
            model_dir + model_name + '/'))

        # graph = tf.get_default_graph()
        # 防报错
        tf.reset_default_graph()

        r_rela = sess.run([predictions], feed_dict={X: [input_normal]})[0][0][0]

        return max_min_info[stk_code]['p_min'] + (max_min_info[stk_code]['p_max'] - max_min_info[stk_code]['p_min'])*r_rela

    else:
        print('加载模型' + model_name + '失败!')
        return -1
Esempio n. 4
0
    """
    画图语句
    df.plot('date', ['upper', 'lower', 'high', 'low'], style=['-', '-', '*', '*'])

    """

    # 计算短期波动率(3天)
    near_days = 3
    df['low_near'] = df['low'].rolling(window=near_days).min()
    df['high_near'] = df['high'].rolling(window=near_days).max()

    df['wave_near'] = df.apply(lambda x: x['high_near'] - x['low_near'],
                               axis=1)

    df['wave_near_rank'] = df.apply(
        lambda x: 100 - relativeRank(df['wave_near'], x['wave_near']), axis=1)
    """
    df.plot('date', ['close', 'wave_near_rank', 'wave_near'], style=['--*', '--*'], subplots=True)
    """
    """
    如何调节买卖比例:

    用移动均线-未成熟随机值(RSV)来对买卖比例进行分配,
    实现在上涨时,易买难卖,在下跌时,易卖难买,最终能够实现随着趋势线调整仓位重心的目的。
    避免在迅速下跌时爆仓,在迅速上涨时空仓的情况。
    """

    #
    # def updateRSVRecord():
    #     try:
    #         (conn_opt, engine_opt) = genDbConn(localDBInfo,  'stk_opt_info')