Exemplo n.º 1
0
def genStkIdxPic(stk_df, stk_code, current_date, root_save_dir, pic_name='stk_idx.png'):

    """
    打印常用指标
    """
    # 按升序排序
    stk_df = stk_df.sort_values(by='date', ascending=True)

    """
    增加指标
    
    'RSI5', 'RSI12', 'RSI30'
    'SAR'
    'slowk', 'slowd'
    'upper', 'middle', 'lower' 
    'MOM'
    """
    stk_df = addStkIndexToDf(stk_df).tail(60)

    fig, ax = plt.subplots(nrows=5, ncols=1)

    ax[0].plot(range(0, len(stk_df['date'])), stk_df['RSI5'], 'b--', label='RSI5线', linewidth=1)
    ax[0].plot(range(0, len(stk_df['date'])), stk_df['RSI12'], 'r--', label='RSI12线', linewidth=1)
    ax[0].plot(range(0, len(stk_df['date'])), stk_df['RSI30'], 'g*--', label='RSI30', linewidth=0.5, markersize=1)

    ax[1].plot(range(0, len(stk_df['date'])), stk_df['SAR'], 'g*--', label='SAR', linewidth=0.5, markersize=1)

    ax[2].plot(range(0, len(stk_df['date'])), stk_df['slowk'], 'g*--', label='slowk', linewidth=0.5, markersize=1)
    ax[2].plot(range(0, len(stk_df['date'])), stk_df['slowd'], 'r*--', label='slowd', linewidth=0.5, markersize=1)

    ax[3].plot(range(0, len(stk_df['date'])), stk_df['upper'], 'r*--', label='布林上线', linewidth=0.5, markersize=1)
    ax[3].plot(range(0, len(stk_df['date'])), stk_df['middle'], 'b*--', label='布林均线', linewidth=0.5, markersize=1)
    ax[3].plot(range(0, len(stk_df['date'])), stk_df['lower'], 'g*--', label='布林下线', linewidth=0.5, markersize=1)

    ax[4].plot(range(0, len(stk_df['date'])), stk_df['MOM'], 'g*--', label='MOM', linewidth=0.5, markersize=1)

    # 准备下标
    xlabel_series = stk_df.apply(lambda x: x['date'][2:].replace('-', ''), axis=1)
    ax[0] = addXticklabel(ax[0], xlabel_series, 40, rotation=45)
    ax[1] = addXticklabel(ax[1], xlabel_series, 40, rotation=45)
    ax[2] = addXticklabel(ax[2], xlabel_series, 40, rotation=45)
    ax[3] = addXticklabel(ax[3], xlabel_series, 40, rotation=45)
    ax[4] = addXticklabel(ax[4], xlabel_series, 40, rotation=45)

    for ax_sig in ax:
        ax_sig.legend(loc='best', fontsize=5)

    # 保存图片
    save_dir = root_save_dir+current_date+'/'+str(stk_code)+'/'
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)

    plt.tight_layout()
    plt.savefig(save_dir+pic_name, dpi=300)
    plt.close()

    return save_dir+pic_name
Exemplo n.º 2
0
def gen_Idx_Pic(stk_df, stk_code=''):
    """
    打印常用指标
    """
    # 按升序排序
    stk_df = stk_df.sort_values(by='date', ascending=True)

    """
    增加指标

    'RSI5', 'RSI12', 'RSI30'
    'SAR'
    'slowk', 'slowd'
    'upper', 'middle', 'lower' 
    'MOM'
    """
    stk_df = addStkIndexToDf(stk_df).tail(60)

    set_background_color(bc='w')

    result_analysis = []

    # 检查SAR
    attention = False
    sar_tail_origin = stk_df.tail(2)
    sar_tail = sar_tail_origin.copy()
    sar_tail['compare'] = sar_tail_origin.apply(lambda x: x['SAR'] - x['close'], axis=1)

    title_tmp = stk_code + ' ' + code2name(stk_code)

    if sar_tail.head(1)['compare'].values[0] * sar_tail.tail(1)['compare'].values[0] < 0:
        if sar_tail.tail(1)['SAR'].values[0] < sar_tail.tail(1)['close'].values[0]:
            title_tmp = stk_code + ' ' + code2name(stk_code) + ' 注意 SAR 指标翻转,后续数天可能上涨!'
            result_analysis.append(title_tmp)
            set_background_color(bc='b_r')
        else:
            title_tmp = stk_code + ' ' + code2name(stk_code) + ' 注意 SAR 指标翻转,后续数天可能下跌!'
            result_analysis.append(title_tmp)
            set_background_color(bc='b_g')

        attention = True

    fig, ax = plt.subplots(nrows=5, ncols=1)

    ax[0].plot(range(0, len(stk_df['date'])), stk_df['RSI5'], 'b--', label='RSI5线', linewidth=1)
    ax[0].plot(range(0, len(stk_df['date'])), stk_df['RSI12'], 'r--', label='RSI12线', linewidth=1)
    ax[0].plot(range(0, len(stk_df['date'])), stk_df['RSI30'], 'g*--', label='RSI30', linewidth=0.5, markersize=1)
    ax[0].plot(range(0, len(stk_df['date'])), [20 for a in range(len(stk_df['date']))], 'b--', linewidth=0.3)
    ax[0].plot(range(0, len(stk_df['date'])), [80 for a in range(len(stk_df['date']))], 'b--', linewidth=0.3)
    ax[0].set_ylim(0, 100)

    ax[1].plot(range(0, len(stk_df['date'])), stk_df['SAR'], 'r--', label='SAR', linewidth=0.5, markersize=1)
    ax[1].plot(range(0, len(stk_df['date'])), stk_df['close'], 'g*--', label='close', linewidth=0.5, markersize=1)

    ax[2].plot(range(0, len(stk_df['date'])), stk_df['slowk'], 'g*--', label='slowk', linewidth=0.5, markersize=1)
    ax[2].plot(range(0, len(stk_df['date'])), stk_df['slowd'], 'r*--', label='slowd', linewidth=0.5, markersize=1)
    ax[2].plot(range(0, len(stk_df['date'])), [20 for a in range(len(stk_df['date']))], 'b--', linewidth=0.3)
    ax[2].plot(range(0, len(stk_df['date'])), [80 for a in range(len(stk_df['date']))], 'b--', linewidth=0.3)
    ax[2].set_ylim(0, 100)

    ax[3].plot(range(0, len(stk_df['date'])), stk_df['upper'], 'r*--', label='布林上线', linewidth=0.5, markersize=1)
    ax[3].plot(range(0, len(stk_df['date'])), stk_df['middle'], 'b*--', label='布林均线', linewidth=0.5, markersize=1)
    ax[3].plot(range(0, len(stk_df['date'])), stk_df['lower'], 'g*--', label='布林下线', linewidth=0.5, markersize=1)

    ax[4].plot(range(0, len(stk_df['date'])), stk_df['MOM'], 'g*--', label='MOM', linewidth=0.5, markersize=1)

    # 准备下标
    xlabel_series = stk_df.apply(lambda x: x['date'][2:].replace('-', ''), axis=1)
    ax[0] = addXticklabel(ax[0], xlabel_series, 40, rotation=45)
    ax[1] = addXticklabel(ax[1], xlabel_series, 40, rotation=45)
    ax[2] = addXticklabel(ax[2], xlabel_series, 40, rotation=45)
    ax[3] = addXticklabel(ax[3], xlabel_series, 40, rotation=45)
    ax[4] = addXticklabel(ax[4], xlabel_series, 40, rotation=45)

    for ax_sig in ax:
        ax_sig.legend(loc='best', fontsize=5)

    fig.tight_layout()  # 调整整体空白
    plt.subplots_adjust(wspace=0, hspace=0)  # 调整子图间距
    ax[0].set_title(title_tmp)

    return fig, ax, attention, result_analysis
Exemplo n.º 3
0
# encoding=utf-8
Exemplo n.º 4
0
def plot_op_result(df):
    """
	打印BS操作效果
	列名字:
		origin_money    :不使用策略时的效益
		strategy_money  :使用策略时的效益
		BS              : 记录操作行为的列
		money_remain    : 剩余的资金

	:param df:
	:return:
	"""
    sh_index = df

    fig, ax = plt.subplots(nrows=3, ncols=1)
    ax[0].plot(range(len(sh_index['date'])), sh_index['close'], 'b--')

    # 打印BS操作
    tuple_bs = list(
        zip(range(len(sh_index['date'])), sh_index['BS'], sh_index['close']))

    tuple_b = list(filter(lambda x: x[1] == 'buy', tuple_bs))
    ax[0].plot(list(map(lambda x: x[0], tuple_b)),
               list(map(lambda x: x[2], tuple_b)),
               'r*',
               label='buy')

    tuple_s = list(filter(lambda x: x[1] == 'sale', tuple_bs))
    ax[0].plot(list(map(lambda x: x[0], tuple_s)),
               list(map(lambda x: x[2], tuple_s)),
               'g*',
               label='sale')

    # 打印对比
    ax[1].plot(range(len(sh_index['date'])),
               sh_index['origin_money'],
               'b--',
               label='no_use_strategy')
    ax[1].plot(range(len(sh_index['date'])),
               sh_index['strategy_money'],
               'r--',
               label='use_strategy')

    # 打印stk数量和剩余money
    ax[2].plot(range(len(sh_index['date'])),
               normal01(sh_index['money_remain']),
               'b--',
               label='剩余money')
    # ax[2].plot(range(len(sh_index['date'])), normal01(sh_index['amount_remain']), 'r--', label='剩余stk数量')

    # 整理x轴label
    x_label = sh_index.apply(lambda x: str(x['date'])[2:].replace('-', ''),
                             axis=1)

    ax[0] = addXticklabel(ax[0], x_label, 40, rotation=45, fontsize=8)
    ax[1] = addXticklabel(ax[1], x_label, 40, rotation=45, fontsize=8)
    ax[2] = addXticklabel(ax[2], x_label, 40, rotation=45, fontsize=8)
    # ax[3] = addXticklabel(ax[3], x_label, 40, rotation=45, fontsize=8)

    for ax_sig in ax:
        ax_sig.legend(loc='best')

    plt.show()
Exemplo n.º 5
0
    ax[2].plot(range(len(sh_index['date'])),
               normal01(sh_index['money_remain']),
               'b--',
               label='剩余money')
    # ax[2].plot(range(len(sh_index['date'])), normal01(sh_index['amount_remain']), 'r--', label='剩余stk数量')

    # # 打印stk数量和剩余money
    ax[1].plot(range(len(sh_index['date'])),
               sh_index['C-M20'],
               'g--',
               label='离心力')
    ax[1].plot(range(len(sh_index['date'])),
               np.zeros(len(sh_index['date'])),
               'b--',
               label='零线')

    # 整理x轴label
    x_label = sh_index.apply(lambda x: str(x['date'])[2:].replace('-', ''),
                             axis=1)

    ax[0] = addXticklabel(ax[0], x_label, 40, rotation=45, fontsize=8)
    ax[1] = addXticklabel(ax[1], x_label, 40, rotation=45, fontsize=8)
    ax[2] = addXticklabel(ax[2], x_label, 40, rotation=45, fontsize=8)
    ax[3] = addXticklabel(ax[3], x_label, 40, rotation=45, fontsize=8)

    for ax_sig in ax:
        ax_sig.legend(loc='best')

    plt.show()

end = 0
Exemplo n.º 6
0
def genStkIdxPicForQQ(stk_df, stk_code=''):
    """
    打印常用指标
    """
    # 按升序排序
    stk_df = stk_df.sort_values(by='date', ascending=True)
    """
    增加指标
    
    'RSI5', 'RSI12', 'RSI30'
    'SAR'
    'slowk', 'slowd'
    'upper', 'middle', 'lower' 
    'MOM'
    """
    stk_df = add_stk_index_to_df(stk_df).tail(60)

    fig, ax = plt.subplots(nrows=5, ncols=1)

    ax[0].plot(range(0, len(stk_df['date'])),
               stk_df['RSI5'],
               'b--',
               label='RSI5线',
               linewidth=1)
    ax[0].plot(range(0, len(stk_df['date'])),
               stk_df['RSI12'],
               'r--',
               label='RSI12线',
               linewidth=1)
    ax[0].plot(range(0, len(stk_df['date'])),
               stk_df['RSI30'],
               'g*--',
               label='RSI30',
               linewidth=0.5,
               markersize=1)
    ax[0].plot(range(0, len(stk_df['date'])),
               [20 for a in range(len(stk_df['date']))],
               'b--',
               linewidth=0.3)
    ax[0].plot(range(0, len(stk_df['date'])),
               [80 for a in range(len(stk_df['date']))],
               'b--',
               linewidth=0.3)
    ax[0].set_ylim(0, 100)

    ax[1].plot(range(0, len(stk_df['date'])),
               stk_df['SAR'],
               'r--',
               label='SAR',
               linewidth=0.5,
               markersize=1)
    ax[1].plot(range(0, len(stk_df['date'])),
               stk_df['close'],
               'g*--',
               label='close',
               linewidth=0.5,
               markersize=1)

    ax[2].plot(range(0, len(stk_df['date'])),
               stk_df['slowk'],
               'g*--',
               label='slowk',
               linewidth=0.5,
               markersize=1)
    ax[2].plot(range(0, len(stk_df['date'])),
               stk_df['slowd'],
               'r*--',
               label='slowd',
               linewidth=0.5,
               markersize=1)
    ax[2].plot(range(0, len(stk_df['date'])),
               [20 for a in range(len(stk_df['date']))],
               'b--',
               linewidth=0.3)
    ax[2].plot(range(0, len(stk_df['date'])),
               [80 for a in range(len(stk_df['date']))],
               'b--',
               linewidth=0.3)
    ax[2].set_ylim(0, 100)

    ax[3].plot(range(0, len(stk_df['date'])),
               stk_df['upper'],
               'r*--',
               label='布林上线',
               linewidth=0.5,
               markersize=1)
    ax[3].plot(range(0, len(stk_df['date'])),
               stk_df['middle'],
               'b*--',
               label='布林均线',
               linewidth=0.5,
               markersize=1)
    ax[3].plot(range(0, len(stk_df['date'])),
               stk_df['lower'],
               'g*--',
               label='布林下线',
               linewidth=0.5,
               markersize=1)

    ax[4].plot(range(0, len(stk_df['date'])),
               stk_df['MOM'],
               'g*--',
               label='MOM',
               linewidth=0.5,
               markersize=1)

    # 准备下标
    xlabel_series = stk_df.apply(lambda x: x['date'][2:].replace('-', ''),
                                 axis=1)
    ax[0] = addXticklabel(ax[0], xlabel_series, 40, rotation=45)
    ax[1] = addXticklabel(ax[1], xlabel_series, 40, rotation=45)
    ax[2] = addXticklabel(ax[2], xlabel_series, 40, rotation=45)
    ax[3] = addXticklabel(ax[3], xlabel_series, 40, rotation=45)
    ax[4] = addXticklabel(ax[4], xlabel_series, 40, rotation=45)

    for ax_sig in ax:
        ax_sig.legend(loc='best', fontsize=5)

    fig.tight_layout()  # 调整整体空白
    plt.subplots_adjust(wspace=0, hspace=0)  # 调整子图间距

    # 检查SAR
    attention = False
    sar_tail = stk_df.tail(2)
    sar_tail['compare'] = sar_tail.apply(lambda x: x['SAR'] - x['close'],
                                         axis=1)

    if sar_tail.head(1)['compare'].values[0] * sar_tail.tail(
            1)['compare'].values[0] < 0:
        plt.title(stk_code + ' 注意 SAR 指标异动!')
        attention = True

    return fig, ax, attention
Exemplo n.º 7
0
def genStkIdxPicForQQ(stk_df):
    """
    打印常用指标
    """
    # 按升序排序
    stk_df = stk_df.sort_values(by='date', ascending=True)
    """
    增加指标
    
    'RSI5', 'RSI12', 'RSI30'
    'SAR'
    'slowk', 'slowd'
    'upper', 'middle', 'lower' 
    'MOM'
    """
    stk_df = addStkIndexToDf(stk_df).tail(60)

    fig, ax = plt.subplots(nrows=5, ncols=1)

    ax[0].plot(range(0, len(stk_df['date'])),
               stk_df['RSI5'],
               'b--',
               label='RSI5线',
               linewidth=1)
    ax[0].plot(range(0, len(stk_df['date'])),
               stk_df['RSI12'],
               'r--',
               label='RSI12线',
               linewidth=1)
    ax[0].plot(range(0, len(stk_df['date'])),
               stk_df['RSI30'],
               'g*--',
               label='RSI30',
               linewidth=0.5,
               markersize=1)
    ax[0].plot(range(0, len(stk_df['date'])),
               [20 for a in range(len(stk_df['date']))],
               'b--',
               linewidth=0.3)
    ax[0].plot(range(0, len(stk_df['date'])),
               [80 for a in range(len(stk_df['date']))],
               'b--',
               linewidth=0.3)
    ax[0].set_ylim(0, 100)

    ax[1].plot(range(0, len(stk_df['date'])),
               stk_df['SAR'],
               'r--',
               label='SAR',
               linewidth=0.5,
               markersize=1)
    ax[1].plot(range(0, len(stk_df['date'])),
               stk_df['close'],
               'g*--',
               label='close',
               linewidth=0.5,
               markersize=1)

    ax[2].plot(range(0, len(stk_df['date'])),
               stk_df['slowk'],
               'g*--',
               label='slowk',
               linewidth=0.5,
               markersize=1)
    ax[2].plot(range(0, len(stk_df['date'])),
               stk_df['slowd'],
               'r*--',
               label='slowd',
               linewidth=0.5,
               markersize=1)
    ax[2].plot(range(0, len(stk_df['date'])),
               [20 for a in range(len(stk_df['date']))],
               'b--',
               linewidth=0.3)
    ax[2].plot(range(0, len(stk_df['date'])),
               [80 for a in range(len(stk_df['date']))],
               'b--',
               linewidth=0.3)
    ax[2].set_ylim(0, 100)

    ax[3].plot(range(0, len(stk_df['date'])),
               stk_df['upper'],
               'r*--',
               label='布林上线',
               linewidth=0.5,
               markersize=1)
    ax[3].plot(range(0, len(stk_df['date'])),
               stk_df['middle'],
               'b*--',
               label='布林均线',
               linewidth=0.5,
               markersize=1)
    ax[3].plot(range(0, len(stk_df['date'])),
               stk_df['lower'],
               'g*--',
               label='布林下线',
               linewidth=0.5,
               markersize=1)

    ax[4].plot(range(0, len(stk_df['date'])),
               stk_df['MOM'],
               'g*--',
               label='MOM',
               linewidth=0.5,
               markersize=1)

    # 准备下标
    xlabel_series = stk_df.apply(lambda x: x['date'][2:].replace('-', ''),
                                 axis=1)
    ax[0] = addXticklabel(ax[0], xlabel_series, 40, rotation=45)
    ax[1] = addXticklabel(ax[1], xlabel_series, 40, rotation=45)
    ax[2] = addXticklabel(ax[2], xlabel_series, 40, rotation=45)
    ax[3] = addXticklabel(ax[3], xlabel_series, 40, rotation=45)
    ax[4] = addXticklabel(ax[4], xlabel_series, 40, rotation=45)

    for ax_sig in ax:
        ax_sig.legend(loc='best', fontsize=5)

    return fig, ax
Exemplo n.º 8
0
# 展示C-M20的分布
count, bins = np.histogram(sh_index['C-M20'], 100, normed=True)
plt.bar(range(len(count)), count)

plt.show()
fig, ax = plt.subplots(nrows=2, ncols=1)

ax[0].plot(range(0, len(sh_index['date'])),
           sh_index['close'],
           'r-',
           label='20日均线',
           linewidth=1)
ax[1].plot(range(0, len(sh_index['date'])),
           sh_index['C-M20'],
           'g*',
           label='C-20日均线',
           linewidth=1)
ax[1].plot(range(0, len(sh_index['date'])),
           np.zeros(len(sh_index)),
           'b',
           label='零线')

# 准备下标
ax[0] = addXticklabel(ax[0], sh_index['date'], 40)
ax[1] = addXticklabel(ax[1], sh_index['date'], 40)

for ax_sig in ax:
    ax_sig.legend(loc='best')

plt.show()