def sendConcernedStkPicToSelf_T(): """ 将自己关心的数据打印出图,发送到qq :return: """ towho = '影子2' send_qq(towho, '以下是已入的stk的形势图:') stk_buy = read_config()['buy_stk'] for x in stk_buy + ['sh', 'sz', 'cyb']: df = get_k_data_JQ(x, 400) fig, _, attention = genStkPicForQQ(df, x) if attention: send_pic_qq(towho, fig) send_W_M_MACD(x, towho) plt.close() # 打印第二张套图 fig, _, attention = genStkIdxPicForQQ(df, x) if attention: send_pic_qq(towho, fig) plt.close()
def sendConcernedStkPicToSelf_V2(): """ 将自己关心的数据打印出图,发送到qq 相较于之前版本,本次改进为: 1、使用json文件中的code列表代替数据库中的列表 2、进行判断,出发发送条件再予以发送 :return: """ towho = '影子2' send_qq(towho, '以下是已入的stk的形势图:') code_list = read_config()['buy_stk'] for x in code_list + ['sh', 'sz', 'cyb']: df = get_k_data_JQ(x, 400) fig, _ = genStkPicForQQ(df) plt.title(str(x)) send_pic_qq(towho, fig) # plt.show() plt.close() fig, _ = genStkIdxPicForQQ(df) plt.title(str(x)) send_pic_qq(towho, fig) # plt.show() plt.close() send_W_M_MACD(x, towho)
def sendPLevel2QQ(df, towho): """ 将stk的价格水平发送到qq :df: code, level :return: """ r_df = df # 按level从低到高进行排序 r_df_sort = r_df.sort_values(by='level', ascending=True).head(12) fig, ax = plt.subplots(ncols=1, nrows=1) ax.bar(range(0, len(r_df_sort)), r_df_sort['level']) # ax.plot(range(0, len(r_df_sort)), [0.1 for x in r_df_sort['level']], 'r--') # ax.plot(range(0, len(r_df_sort)), [0.5 for x in r_df_sort['level']], 'r--') # 获取code2name字典 c2n = code2name_dict() ax.set_xticks(range(0, len(r_df_sort))) ax.set_xticklabels([c2n[x] for x in r_df_sort['code']], rotation=45) plt.ylim((0, 1)) plt.grid() plt.title('注意低位囤货!') send_pic_qq(towho, fig) plt.close()
def checkWeekStrayForAll(): towho = '影子2' send_qq(towho, '以下是今晚海选结果:') df_total = ts.get_stock_basics() # 过滤掉年龄小于四岁的 df_age_filter = df_total[df_total.apply(lambda x: int( str(x['timeToMarket'])[:4]) <= int(get_current_date_str()[:4]) - 4, axis=1)] # 根据week反转情况进行过滤,保留有反转的单位 df_age_filter_stray = list(df_age_filter.reset_index().apply( lambda x: (x['code'], week_MACD_stray_judge(x['code'], towho)), axis=1)) # 过滤掉非反转的情况 df_age_f2 = list(filter(lambda x: x[1][0], df_age_filter_stray)) # 增加stk的水平信息 df_level = [(x[0], x[1][1], cal_stk_p_level(x[1][1]['close'].values)) for x in df_age_f2] # 按总体水平排序,筛选优异者 df_level.sort(key=lambda x: x[2]['total_last']) df_level = df_level[:math.floor(len(df_level) / 3 * 2)] # 按照近30的波动率进行排序,筛选优异者 df_level.sort(key=lambda x: x[2]['std'], reverse=True) df_level = df_level[:math.floor(len(df_level) / 3 * 2)] # 按照近30的水平排序,留下最后8只 df_level.sort(key=lambda x: x[2]['t30_last'], reverse=False) df_level = df_level[:np.min([math.floor(len(df_level) / 3 * 2), 15])] # 打印信息 stk_list = [k[0] for k in df_level] for stk in stk_list: # 打印周与月信息 send_W_M_MACD(stk_code=stk, towho=towho) # 打印日线信息 df = get_k_data_JQ(stk, count=400, end_date=get_current_date_str()) fig, _, _ = genStkPicForQQ(df) plt.title(str(stk)) send_pic_qq(towho, fig) plt.close() fig, _, _ = genStkIdxPicForQQ(df) plt.title(str(stk)) send_pic_qq(towho, fig) plt.close()
def printStkListPic2QQ(code_list, towho, title=None): if title is not None: title_str = title else: title_str = '' for x in code_list: df = get_k_data_JQ(x, 400) fig, _ = genStkPicForQQ(df) plt.title(str(x) + title_str) send_pic_qq(towho, fig) plt.close() fig, _ = genStkIdxPicForQQ(df) plt.title(str(x) + title_str) send_pic_qq(towho, fig) plt.close()
def sendMainIndexStkPic2Public(): """ 将自己关心的数据打印出图,发送到qq :return: """ for x in ['sh', 'sz', 'cyb']: df = get_k_data_JQ(x, 400) fig, _ = genStkPicForQQ(df) plt.title(str(x)) send_pic_qq('大盘上涨概率公示', fig) plt.close() fig, _ = genStkIdxPicForQQ(df) plt.title(str(x)) send_pic_qq('大盘上涨概率公示', fig) plt.close()
def send_W_M_MACD(stk_code, towho): """ :param stk_code: :param towho: :return: """ # 获取今天的情况,涨幅没有超过3%的不考虑 # df_now = get_k_data_JQ(stk_code, count=2, end_date=get_current_date_str()).reset_index() # # if (df_now.tail(1)['close'].values[0]-df_now.head(1)['close'].values[0])/df_now.head(1)['close'].values[0] < 0.03: # print('函数week_MACD_stray_judge:' + stk_code + '涨幅不够!') # return False df = get_k_data_JQ(stk_code, count=400, end_date=get_current_date_str()).reset_index() if len(df) < 350: print('函数week_MACD_stray_judge:' + stk_code + '数据不足!') return False # 规整 df_floor = df.tail(math.floor(len(df) / 20) * 20 - 19) # 增加每周的星期几 df_floor['day'] = df_floor.apply( lambda x: calendar.weekday(int(x['date'].split('-')[ 0]), int(x['date'].split('-')[1]), int(x['date'].split('-')[2])), axis=1) # 增加每周的星期几 df_floor['day'] = df_floor.apply( lambda x: calendar.weekday(int(x['date'].split('-')[ 0]), int(x['date'].split('-')[1]), int(x['date'].split('-')[2])), axis=1) # 隔着5个取一个 if df_floor.tail(1)['day'].values[0] != 4: df_floor_slice_5 = pd.concat( [df_floor[df_floor.day == 4], df_floor.tail(1)], axis=0) else: df_floor_slice_5 = df_floor[df_floor.day == 4] # 获取最后的日期 date_last = df_floor_slice_5.tail(1)['date'].values[0] # 计算指标 df_floor_slice_5['MACD'], df_floor_slice_5['MACDsignal'], df_floor_slice_5[ 'MACDhist'] = talib.MACD(df_floor_slice_5.close, fastperiod=6, slowperiod=12, signalperiod=9) # 隔着20个取一个(月线) df_floor_slice_20 = df_floor.loc[::20, :] # 计算指标 df_floor_slice_20['MACD'], df_floor_slice_20[ 'MACDsignal'], df_floor_slice_20['MACDhist'] = talib.MACD( df_floor_slice_20.close, fastperiod=4, slowperiod=8, signalperiod=9) """ --------------------------------------- 生成图片 -------------------------------------""" fig, ax = plot_W_M(df_floor_slice_5, df_floor_slice_20) # 增加标题 plt.title(stk_code + 'month-stray' + date_last) # 发送图片 send_pic_qq(towho, fig) # 关闭图片 plt.close()
def week_MACD_stray_judge(stk_code, towho, debug_plot=False): try: # 获取今天的情况,涨幅没有超过3%的不考虑 df_now = get_k_data_JQ(stk_code, count=2, end_date=get_current_date_str()).reset_index() if (df_now.tail(1)['close'].values[0] - df_now.head(1) ['close'].values[0]) / df_now.head(1)['close'].values[0] < -0.05: print('函数week_MACD_stray_judge:' + stk_code + '涨幅不够!') return False, pd.DataFrame() df = get_k_data_JQ(stk_code, count=400, end_date=get_current_date_str()).reset_index() if len(df) < 350: print('函数week_MACD_stray_judge:' + stk_code + '数据不足!') return False, pd.DataFrame() # 规整 df_floor = df.tail(math.floor(len(df) / 20) * 20 - 19) # 增加每周的星期几 df_floor['day'] = df_floor.apply(lambda x: calendar.weekday( int(x['date'].split('-')[0]), int(x['date'].split('-')[1]), int(x['date'].split('-')[2])), axis=1) # 增加每周的星期几 df_floor['day'] = df_floor.apply(lambda x: calendar.weekday( int(x['date'].split('-')[0]), int(x['date'].split('-')[1]), int(x['date'].split('-')[2])), axis=1) # 隔着5个取一个 if df_floor.tail(1)['day'].values[0] != 4: df_floor_slice_5 = pd.concat( [df_floor[df_floor.day == 4], df_floor.tail(1)], axis=0) else: df_floor_slice_5 = df_floor[df_floor.day == 4] # 计算指标 df_floor_slice_5['MACD'], df_floor_slice_5[ 'MACDsignal'], df_floor_slice_5['MACDhist'] = talib.MACD( df_floor_slice_5.close, fastperiod=6, slowperiod=12, signalperiod=9) # 隔着20个取一个(月线) df_floor_slice_20 = df_floor.loc[::20, :] # 计算指标 df_floor_slice_20['MACD'], df_floor_slice_20[ 'MACDsignal'], df_floor_slice_20['MACDhist'] = talib.MACD( df_floor_slice_20.close, fastperiod=4, slowperiod=8, signalperiod=9) # 获取最后的日期 date_last = df_floor_slice_5.tail(1)['date'].values[0] # 判断背离 MACD_5 = df_floor_slice_5.tail(3)['MACD'].values MACD_20 = df_floor_slice_20.tail(4)['MACD'].values if (MACD_5[1] == np.min(MACD_5)) & (MACD_20[1] != np.max(MACD_20)) & ( MACD_20[2] != np.max(MACD_20)): if debug_plot: """ --------------------------------------- 生成图片 -------------------------------------""" fig, ax = plot_W_M(df_floor_slice_5, df_floor_slice_20) # 增加标题 plt.title(stk_code + 'month-stray' + date_last) # 发送图片 send_pic_qq(towho, fig) # 关闭图片 plt.close() return True, df else: return False, pd.DataFrame() except Exception as e: send_qq(towho, stk_code + '出错:\n' + str(e)) return False, pd.DataFrame()
# encoding=utf-8