Ejemplo n.º 1
0
def sendConcernedStkPicToSelf_T():

    """
    将自己关心的数据打印出图,发送到qq
    :return:
    """
    towho = '影子2'
    send_qq(towho, '以下是已入的stk的形势图:')

    stk_buy = readConfig()['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()
Ejemplo n.º 2
0
def sendConcernedStkPicToSelf_V2():

    """
    将自己关心的数据打印出图,发送到qq
    相较于之前版本,本次改进为:
    1、使用json文件中的code列表代替数据库中的列表
    2、进行判断,出发发送条件再予以发送
    :return:
    """
    towho = '影子2'
    send_qq(towho, '以下是已入的stk的形势图:')
    code_list = readConfig()['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)
Ejemplo n.º 3
0
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()
Ejemplo n.º 4
0
def sendM305Pic(win_qq_name, stk_code):
    df = ts.get_k_data(stk_code, start=add_date_str(get_current_date_str(), -400))

    # 测试相对均值偏移度
    df['m5'] = df['close'].rolling(window=5).mean()
    df['m30'] = df['close'].rolling(window=30).mean()

    df['diff_m305'] = df.apply(lambda x: x['m5'] - x['m30'], axis=1)
    df['rank'] = df.apply(lambda x: relativeRank(df['diff_m305'], x['diff_m305']), axis=1)

    df = df.dropna(axis=0)

    df.plot('date', ['close', 'diff_m305', 'rank'], subplots=True)
    plt.title(stk_code+'M5-M30 分数')

    output = BytesIO()                              # BytesIO实现了在内存中读写byte
    buf_save = BytesIO()

    plt.savefig(output)
    output.seek(0)
    img = Image.open(output)                        # Image.open可以打开网络图片与本地图片。

    img.convert("RGB").save(buf_save, "BMP")        # 以RGB模式保存图像
    data = buf_save.getvalue()[14:]
    buf_save.close()
    output.close()
    plt.close()

    send_pic_qq(win_qq_name, data)
Ejemplo n.º 5
0
def checkWeekStrayForAll():

    win_qq_name = '影子'

    df_total = ts.get_stock_basics()
    for stk in df_total.index:
        if int(str(df_total.loc[stk, 'timeToMarket'])[:4]) >= int(get_current_date_str()[:4]) - 4:
            print('函数 checkWeekStrayForAll:'+stk+'年龄不够4岁!')
            continue

        try:
            stray_flag = week_macd_stray_judge(stk, win_qq_name)
        except:
            print('函数 checkWeekStrayForAll:' + stk + '判断翻转出错!')
            stray_flag = False

        if stray_flag:
            df = get_k_data_JQ(stk, count=400, end_date=get_current_date_str())
            fig, _ = genStkPicForQQ(df)

            plt.title(str(stk))
            send_pic_qq(win_qq_name, fig)
            plt.close()

            fig, _ = genStkIdxPicForQQ(df)

            plt.title(str(stk))
            send_pic_qq(win_qq_name, fig)
            plt.close()
        else:
            print('No weed-stray in '+stk)
Ejemplo n.º 6
0
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], calStkPlevel(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()
Ejemplo n.º 7
0
def printStkListPic2QQ(code_list, win_qq_name, 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(win_qq_name, fig)
        plt.close()

        fig, _ = genStkIdxPicForQQ(df)

        plt.title(str(x) + title_str)
        send_pic_qq(win_qq_name, fig)
        plt.close()
Ejemplo n.º 8
0
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()
Ejemplo n.º 9
0
def sendConcernedStkPicToSelf_T():
    """
    将自己关心的数据打印出图,发送到qq
    :return:
    """

    for x in stk_list:

        df = get_k_data_JQ(x, 400)
        fig, _ = genStkPicForQQ(df)

        plt.title(str(x))
        send_pic_qq('影子2', fig)
        plt.close()

        fig, _ = genStkIdxPicForQQ(df)

        plt.title(str(x))
        send_pic_qq('影子2', fig)
        plt.close()
Ejemplo n.º 10
0
def sendMainIndexPicToPublic():
    """
    不准,因为历史数据获取的不够

    :return:
    """

    for x in ['sh', 'sz', 'cyb']:
        # df = ts.get_k_data(x, start=add_date_str(get_current_date_str(), -400))

        stk_code_normal = {
            'sh': '000001.XSHG',
            'sz': '399001.XSHE',
            'cyb': '399006.XSHE'
        }[x]
        df = jqdatasdk.get_price(stk_code_normal,
                                 frequency='daily',
                                 count=100,
                                 end_date=get_current_date_str())

        df['datetime'] = df.index
        df['date'] = df.apply(lambda x: str(x['datetime'])[:10], axis=1)

        # 计算MACD
        df['MACD'], df['MACDsignal'], df['MACDhist'] = talib.MACD(
            df.close, fastperiod=12, slowperiod=26, signalperiod=9)

        # 测试相对均值偏移度
        df['m9'] = df['close'].rolling(window=9).mean()
        df['diff_m9'] = df.apply(lambda x: x['close'] - x['m9'], axis=1)

        df['rank'] = df.apply(
            lambda x: relativeRank(df['diff_m9'], x['diff_m9']), axis=1)

        df_plot = df.tail(50)
        # df.tail(50).plot('date', ['close', 'rank', 'MACD'],
        #                  subplots=True,
        #                  title=['历史收盘价', '历史分数', 'MACD指标'],
        #                  legend=True)

        fig, ax = subplots(ncols=1, nrows=3)
        ax[0].plot(range(0, len(df_plot)),
                   df_plot['close'],
                   'g--',
                   label='收盘价')
        ax[1].plot(range(0, len(df_plot)),
                   df_plot['rank'],
                   'r--',
                   label='上涨概率')
        ax[2].bar(range(0, len(df_plot)), df_plot['MACD'])

        for ax_sig in ax:
            ax_sig.set_xticks(range(0, len(df_plot)))
            ax_sig.set_xticklabels(
                [x[-5:] for x in list(df_plot['date'].values)], rotation=90)
            ax_sig.legend(loc='best')

        ax[0].set_title({'sh': "上证", 'sz': '深证', 'cyb': '创业板'}[x])

        # ----------------------- 将图片发到qq -----------------------------------

        send_pic_qq('大盘上涨概率公示', fig)
        plt.close()
Ejemplo n.º 11
0
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()
Ejemplo n.º 12
0
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()
Ejemplo n.º 13
0
# encoding=utf-8
"""
将原先使用email发送的图转为使用qq发送
"""
from CornerDetectAndAutoEmail.Sub import genStkPicForQQ, genStkIdxPicForQQ
from SDK import plot_agg
from General.AutoStkConfig import stk_list
import tushare as ts

from pylab import *
from SendMsgByQQ.SendPicByQQ import send_pic_qq

for stk in stk_list[:3]:

    df = ts.get_k_data(stk)
    fig, _ = genStkPicForQQ(df)

    plt.title(str(stk))
    send_pic_qq('影子2', fig)
    plt.close()

    fig, _ = genStkIdxPicForQQ(df)

    plt.title(str(stk))
    send_pic_qq('影子2', fig)
    plt.close()
Ejemplo n.º 14
0
def checkSingleStkHourMACD(stk_code, source='jq'):
    if source == 'jq':
        df_30 = get_k_data_JQ(stk_code, start_date=add_date_str(get_current_date_str(), -20), freq='30m')
        df_60 = get_k_data_JQ(stk_code, start_date=add_date_str(get_current_date_str(), -20), freq='60m')
    elif source == 'ts':
        df_30 = my_pro_bar(stk_code, start=add_date_str(get_current_date_str(), -20), freq='30min')
        df_60 = my_pro_bar(stk_code, start=add_date_str(get_current_date_str(), -20), freq='60min')

    # 去掉volume为空的行
    df_30 = df_30.loc[df_30.apply(lambda x: not (x['volume'] == 0), axis=1), :]
    df_60 = df_60.loc[df_60.apply(lambda x: not (x['volume'] == 0), axis=1), :]

    df_30['MACD'], _, _ = talib.MACD(df_30.close,
                                     fastperiod=12, slowperiod=26,
                                     signalperiod=9)

    df_60['MACD'], _, _ = talib.MACD(df_60.close,
                                     fastperiod=12, slowperiod=26,
                                     signalperiod=9)

    l_60 = df_60.tail(3)['MACD'].values
    l_30 = df_30.tail(3)['MACD'].values

    print('函数 checkSingleStkHourMACD:'+stk_code+':\n30min:'+str(l_30)+'\n60min:'+str(l_60)+'\n')

    if l_60[1] == np.min(l_60):

        title_str = '60分钟开始上涨'
        sts = 1

    elif l_60[1] == np.max(l_60):
        title_str = '60分钟开始下跌'
        sts = 2

    elif l_30[1] == np.max(l_30):
        title_str = '30分钟开始下跌'
        sts = 3

    elif l_30[1] == np.min(l_30):
        title_str = '30分钟开始上涨'
        sts = 4

    else:
        title_str = '当前无拐点'
        sts = 0

    # 避免重复发图!
    if stk_code in MACD_min_last.keys():
        if MACD_min_last[stk_code] != sts:
            send_pic = True
            MACD_min_last[stk_code] = sts
        else:
            send_pic = False
    else:
        send_pic = True
        MACD_min_last[stk_code] = sts

    print('函数 checkSingleStkHourMACD:' + stk_code + ':\nsend_pic标志位:' + str(send_pic) + '\nsts标志位:' + str(sts) + '\n')

    # 生成图片
    df_30 = df_30.dropna()
    df_60 = df_60.dropna()

    fig, ax = subplots(ncols=1, nrows=4)

    ax[0].plot(range(0, len(df_30)), df_30['close'], 'g*--', label='close_30min')
    ax[1].bar(range(0, len(df_30)), df_30['MACD'], label='macd_30min')
    ax[2].plot(range(0, len(df_60)), df_60['close'], 'g*--', label='close_60min')
    ax[3].bar(range(0, len(df_60)), df_60['MACD'], label='macd_60min')

    for ax_sig in ax:
        ax_sig.legend(loc='best')
    plt.title(stk_code + '-' + title_str)

    if send_pic & (sts != 0):
        send_pic_qq('影子', fig)

    # send_pic_qq('影子', fig)
    plt.close()
Ejemplo n.º 15
0
# encoding=utf-8