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
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
# encoding=utf-8
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()
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
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
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
# 展示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()