Пример #1
0
    def caculation(self):
        df_t = pd.read_sql(self.today, con=self.engine1)
        # df_t = ts.get_today_all()
        for i in self.df['代码'].values:
            self.df.loc[self.df['代码'] == i, '当前日期'] = self.today

            pchange = df_t.loc[df_t['code'] == i, 'changepercent'].values[0]
            self.df.loc[self.df['代码'] == i, '今日涨幅'] = pchange

            trade = df_t[df_t['code'] == i]['trade'].values[0]
            self.df.loc[self.df['代码'] == i, '当前价格'] = trade

            current_profit = (trade - self.df[self.df['代码'] == i]['买入价格'].values[0]) / \
                             self.df[self.df['代码'] == i]['买入价格'].values[0]

            self.df.loc[self.df['代码'] == i,
                        '目前盈亏'] = round(current_profit * 100, 2)

        self.df.to_excel(self.name, encoding='utf-8', index=None)
        self.df.to_sql('tb_simulation', self.engine, if_exists='replace')
        # ali_engine = get_engine('',False)
        # self.df.to_sql('tb_simulation',ali_engine,if_exists='replace')
        del self.df['买入理由']
        df_str = self.df.to_html()
        # print(df_str)
        sender_139('模拟盘 {}'.format(self.today), df_str, types='html')
Пример #2
0
    def caculation(self):
        df_t = pd.read_sql(self.today,con=self.engine1)
        # df_t = ts.get_today_all()
        for i in self.df['代码'].values:
            self.df.ix[self.df['代码'] == i, '当前日期'] = self.today

            pchange = df_t.ix[df_t['code'] == i, 'changepercent'].values[0]
            self.df.ix[self.df['代码'] == i, '今日涨幅'] = pchange

            trade = df_t[df_t['code'] == i]['trade'].values[0]
            self.df.ix[self.df['代码'] == i, '当前价格'] = trade

            current_profit = (trade - self.df[self.df['代码'] == i]['买入价格'].values[0]) / \
                             self.df[self.df['代码'] == i]['买入价格'].values[0]

            self.df.ix[self.df['代码'] == i, '目前盈亏'] = round(current_profit * 100, 2)

        self.df.to_excel(self.name, encoding='utf-8',index=None)
        self.df.to_sql('tb_simulation',self.engine,if_exists='replace')
        # ali_engine = get_engine('',False)
        # self.df.to_sql('tb_simulation',ali_engine,if_exists='replace')
        del self.df['买入理由']
        df_str = self.df.to_html()
        # print(df_str)
        sender_139('模拟盘 {}'.format(self.today),df_str,types='html')
Пример #3
0
 def download(self, url, data, retry=5):
     for i in range(retry):
         try:
             r = requests.post(url, headers=self.headers, data=data)
             if not r.text or r.status_code != 200:
                 continue
             else:
                 return r
         except Exception as e:
             logger.info(e)
             sender_139('jisilu可转债', '异常信息>>>>{}'.format(e))
             continue
     return None
Пример #4
0
 def download(self, url, data, retry=5):
     for i in range(retry):
         try:
             r = requests.post(url, headers=self.headers, data=data)
             if not r.text or r.status_code != 200:
                 continue
             else:
                 return r
         except Exception as e:
             logger.info(e)
             sender_139('jisilu可转债', '异常信息>>>>{}'.format(e))
             continue
     return None
Пример #5
0
    def save_to_dataframe(self, data, indexx, choice, post_fix):
        engine = setting.get_engine('db_zdt')
        if not data:
            exit()
        data_len = len(data)
        if choice == 1:
            for i in range(data_len):
                data[i][choice] = data[i][choice]

        df = pd.DataFrame(data, columns=indexx)

        filename = os.path.join(self.path,
                                self.today + "_" + post_fix + ".xls")

        # 今日涨停
        if choice == 1:
            df['今天的日期'] = self.today
            df.to_excel(filename, encoding='gbk')
            try:
                df.to_sql(self.today + post_fix, engine, if_exists='fail')
            except Exception as e:
                logger.info(e)
        # 昨日涨停
        if choice == 2:
            df = df.set_index('序号')
            df['最大涨幅'] = df['最大涨幅'].map(lambda x: round(x * 100, 3))
            df['最大跌幅'] = df['最大跌幅'].map(lambda x: round(x * 100, 3))
            df['今日开盘涨幅'] = df['今日开盘涨幅'].map(lambda x: round(x * 100, 3))
            df['昨日涨停强度'] = df['昨日涨停强度'].map(lambda x: round(x, 0))
            df['今日涨停强度'] = df['今日涨停强度'].map(lambda x: round(x, 0))
            try:
                df.to_sql(self.today + post_fix, engine, if_exists='fail')
            except Exception as e:
                logger.info(e)

            avg = round(df['今日涨幅'].mean(), 2)
            median = round(df['今日涨幅'].median(), 2)
            min_v = round(df['今日涨幅'].min(), 2)

            current = datetime.datetime.now().strftime('%Y-%m-%d')
            title = '昨天涨停个股今天{}\n的平均涨幅{}\n'.format(current, avg)
            content = '昨天涨停个股今天{}\n的平均涨幅{}\n涨幅中位数{}\n涨幅最小{}\n'.format(
                current, avg, median, min_v)
            try:
                sender_139(title, content)
            except Exception as e:
                print(e)
Пример #6
0
 def getdata(self, url, headers, retry=5):
     for i in range(retry):
         try:
             resp = requests.get(url=url, headers=headers)
             content = resp.text
             md_check = re.findall('summary|lasttradedate', content)
             if content and len(md_check) > 0:
                 return content
             else:
                 time.sleep(60)
                 logger.info('failed to get content, retry: {}'.format(i))
                 continue
         except Exception as e:
             sender_139('获取涨跌停数据出错', '{}'.format(e))
             logger.error(e)
             time.sleep(60)
             continue
     return None
Пример #7
0
    def save_to_dataframe(self, data, indexx, choice, post_fix):
        engine = setting.get_engine('db_zdt')
        if not data:
            exit()
        data_len = len(data)
        if choice == 1:
            for i in range(data_len):
                data[i][choice] = data[i][choice]

        df = pd.DataFrame(data, columns=indexx)

        filename = os.path.join(
            self.path, self.today + "_" + post_fix + ".xls")

        # 今日涨停
        if choice == 1:
            df['今天的日期'] = self.today
            df.to_excel(filename, encoding='gbk')
            try:
                df.to_sql(self.today + post_fix, engine, if_exists='fail')
            except Exception as e:
                logger.info(e)
        # 昨日涨停
        if choice == 2:
            df = df.set_index('序号')
            df['最大涨幅'] = df['最大涨幅'].map(lambda x: round(x * 100, 3))
            df['最大跌幅'] = df['最大跌幅'].map(lambda x: round(x * 100, 3))
            df['今日开盘涨幅'] = df['今日开盘涨幅'].map(lambda x: round(x * 100, 3))
            df['昨日涨停强度'] = df['昨日涨停强度'].map(lambda x: round(x, 0))
            df['今日涨停强度'] = df['今日涨停强度'].map(lambda x: round(x, 0))
            try:
                df.to_sql(self.today + post_fix, engine, if_exists='fail')
            except Exception as e:
                logger.info(e)

            avg = round(df['今日涨幅'].mean(), 2)
            current = datetime.datetime.now().strftime('%Y-%m-%d')
            title = '昨天涨停个股今天{}\n的平均涨幅{}\n'.format(current, avg)
            try:
                sender_139(title, title)
            except Exception as e:
                print(e)
Пример #8
0
 def convert_json(self, content):
     p = re.compile(r'"Data":(.*)};', re.S)
     if len(content) <= 0:
         logger.info('Content\'s length is 0')
         exit(0)
     result = p.findall(content)
     if result:
         try:
             # print(result)
             t1 = result[0]
             t2=re.sub('[\\r\\n]', '', t1)
             t2=re.sub(',,',',0,0',t2)
             t2 = re.sub('Infinity','-1',t2)
             t2 = list(eval(t2))
             return t2
         except Exception as e:
             sender_139('获取涨跌停数据出错','e{}'.format(e))
             logger.info(e)
             return None
     else:
         return None
Пример #9
0
def save_list_mongo(source_list):
    current = datetime.datetime.now()
    title = current.strftime('%Y-%m-%d') + '可转债周涨幅的前10和后10'
    top10 = source_list[:10]
    last10 = source_list[-10:]
    top_str = ['{} : {}'.format(i[0], i[1]) for i in top10]
    last_str = ['{} : {}'.format(i[0], i[1]) for i in last10[::-1]]
    top_str = '\n'.join(top_str)
    last_str = '\n'.join(last_str)
    content = '跌幅前10:::\n' + last_str + '\n涨幅前10:::\n' + top_str
    try:
        sender_139(title, content)
    except Exception as e:
        print(e)

    d = dict(source_list)
    d['updated'] = current

    try:
        db['db_parker']['kzz_weekly_raise'].insert(d)
    except Exception as e:
        print(e)
Пример #10
0
    def analysis(self,date=None,head=300):
        if date is None:
            date=datetime.date.today().strftime('%Y-%m-%d')
        # date='2019-05-08'
        kzz_big_deal_count =[]

        for code in self.jisilu_df['可转债代码'].values:
            kzz_big_deal_count.append(self.get_volume_distribition(code,date))

        kzz_big_deal_order = list(sorted(kzz_big_deal_count,key=lambda x:x[1],reverse=True))
        # print(kzz_big_deal_order)
        send_content=[]

        for item in kzz_big_deal_order[:head]:
            self.logger.info('{} ::: 大单出现次数 {}'.format(self.code_name_dict.get(item[0]),item[1]))
            send_content.append('{} ::: 大单出现次数 {}'.format(self.code_name_dict.get(item[0]),item[1]))
        # 入库的
        big_deal_doc = self.db['db_stock']['big_deal_logger']
        for item in kzz_big_deal_order:
            d={'Date':date,'name':self.code_name_dict.get(item[0]), 'times':int(item[1])}
            try:
                big_deal_doc.insert(d)
            except Exception as e:
                self.logger.error(e)
                self.logger.error(d)
            # send_content.append('{} ::: 大单出现次数 {}'.format(self.code_name_dict.get(item[0]),item[1]))

        content ='\n'.join(send_content)
        title='{}-大单监控'.format(date)

        try:

            sender_139(title,content)

        except Exception as e:
            self.logger.error(e)
        else:
            self.logger.info('发送成功')
Пример #11
0
    def caculation(self):
        df_t = ts.get_today_all()
        for i in self.df[u'代码'].values:
            self.df.ix[self.df[u'代码'] == i, u'当前日期'] = self.today

            pchange = df_t.ix[df_t['code'] == i, 'changepercent'].values[0]
            self.df.ix[self.df[u'代码'] == i, u'今日涨幅'] = pchange

            trade = df_t[df_t['code'] == i]['trade'].values[0]
            self.df.ix[self.df[u'代码'] == i, u'当前价格'] = trade

            current_profit = (trade - self.df[self.df[u'代码'] == i][u'买入价格'].values[0]) / \
                             self.df[self.df[u'代码'] == i][u'买入价格'].values[0]

            self.df.ix[self.df[u'代码'] == i,
                       u'目前盈亏'] = round(current_profit * 100, 2)

        self.df.to_excel(self.name, encoding='utf-8')
        self.df.to_sql('tb_simulation', self.engine, if_exists='replace')
        ali_engine = get_engine('', False)
        self.df.to_sql('tb_simulation', ali_engine, if_exists='replace')
        df_str = self.df.to_html()
        sender_139('模拟盘 {}'.format(self.today), df_str, types='html')
Пример #12
0
def pledge_weekly_update():
    url = 'http://www.chinaclear.cn/cms-rank/downloadFile?queryDate={}&type=proportion'

    crawl_time = datetime.datetime.now().strftime('%Y.%m.%d')
    current = datetime.datetime.strptime('{}'.format(crawl_time), '%Y.%m.%d')

    now = current + datetime.timedelta(days=-3)
    now_str = now.strftime('%Y.%m.%d')

    logger.info('当前日期 >>>> {}'.format(now_str))

    filename = 'gpzyhgmx_' + now_str + '.xls'
    try:
        r = requests.get(url.format(now_str), headers=headers)
    except Exception as e:
        sender_139('股权质押爬取异常 {}', '异常信息{}'.format(now_str, e))
        return
    # 保存到本地
    full_path = os.path.join('D:\OneDrive\Stock_Data\pledge', filename)
    with open(full_path, 'wb') as f:
        f.write(r.content)

    # 写入数据集
    updat_db(full_path)
Пример #13
0
def weekly_update():

    # 第一次循环获取所有的数据
    crawl_time = datetime.datetime.now().strftime('%Y-%m-%d')
    current = datetime.datetime.strptime('{}'.format(crawl_time), '%Y-%m-%d')
    columns = [
        '新增投资者数量', '新增投资者数量-自然人', '新增投资者数量-非自然人', '期末投资者数量', '期末投资者数量-自然人',
        '已开立A股账户投资者-自然人', '已开立B股账户投资者-自然人', '期末投资者数量-非自然人', '已开立A股账户投资者-非自然人',
        '已开立B股账户投资者-非自然人', '期末持仓投资者数量', '期末持仓投资者数量-A股', '期末持仓投资者数量-B股',
        '期间参与交易的投资者数量', '期间参与交易的投资者数量-A股', '期间参与交易的投资者数量-B股'
    ]
    doc = db['db_parker']['investor_trend_2015_05_after']
    # 2017.02.10 后面的只有10项

    t = -4
    now = current + datetime.timedelta(days=t)
    now_str = now.strftime('%Y.%m.%d')
    if now_str == '2015.05.01':
        exit()

    logger.info('当前日期 >>>> {}'.format(now_str))
    data = {
        'dateType': '',
        'dateStr': now_str,
        'channelIdStr': value,
    }
    try:
        s = session.post(url=home_page, headers=headers, data=data)
    except Exception as e:
        logger.error('请求出错{}'.format(e))
        sender_139('<开户数> 爬取异常 {}', '异常信息{}'.format(crawl_time, e))
        return

    if '没有找到相关信息' in s.text:
        logger.info('没有找到相关信息')
        return

    root = etree.HTML(s.text)
    content = root.xpath('string(.)')
    content = re.search('新增投资者数(.*)', content, re.S).group(1)
    # 共有10个数字,分 别对应网站上的
    num_list = re.findall('\s*([\d*\.*,*\-*]+)\s*\d*、*', content)
    # num_list = re.findall('>([\d+\.,]+\S?)<', s.text)
    logger.info('列表数据 {}'.format(num_list))
    l = len(num_list)
    if l != 10:
        logger.warning('length not equal 10')
        logger.warning('实际长度为{}'.format(l))

    d = {}
    d['publish_date'] = now_str
    for idx, name in enumerate(columns):

        # 避免17年2月后长度只有10的时候越界
        if l == 10 and idx == 10:
            break
        try:
            logger.info('{}\t{}'.format(name, num_list[idx]))
        except Exception as e:
            logger.error('index出错')
            continue
        try:
            item = re.sub(',', '', num_list[idx])
            if len(item.split('.')[1]) > 2:
                item = item[:len(item) - 1]
        except Exception as e:

            d[name] = 0

        else:
            d[name] = item

    d['crawl_time'] = crawl_time
    content = []
    for k, v in d.items():
        content.append('{}:{}'.format(k, v))
    # try:
    #     sender_139('{} 新增投资者信息'.format(crawl_time), '\n'.format(content))
    # except Exception as e:
    #     logger.error('发送邮件出错')

    # 写入mongo
    doc.insert(d)
    del d['_id']
    d_list = [d]
    # df = pd.DataFrame.from_dict(d,orient='index').T
    df = pd.DataFrame(d)
    # df['publish_date']
    try:
        df.to_sql('tb_chinaclear', con=engine, if_exists='append', index=None)

    except Exception as e:
        sender_139('<开户数> 入库异常', '异常信息{} -{}'.format(e, crawl_time))
        logger.error('异常 >>>{}'.format(e))
def find_zz_zg_diff():
    current = datetime.date.today().strftime('%Y-%m-%d')
    if ts.is_holiday(current):
        logger.info('假期')
        return

    # engine=get_engine('db_stock','local')
    # df = pd.read_sql('tb_bond_jisilu',con=engine)
    # df[(df['正股涨跌幅']<=0) & (df['正股涨跌幅']>=df['可转债涨幅'])]
    con = get_mysql_conn('db_stock', 'local')
    cursor = con.cursor()
    query_cmd = 'select count(*) from tb_bond_jisilu WHERE `正股涨跌幅`>=`可转债涨幅` and `正股涨跌幅`<=0'
    minus_count_cmd = 'select count(*) from tb_bond_jisilu where `可转债涨幅`<0'
    plug_count_cmd = 'select count(*) from tb_bond_jisilu where `可转债涨幅`>=0'

    cursor.execute(query_cmd)
    get_count = cursor.fetchone()
    num = get_count[0]

    cursor.execute(minus_count_cmd)
    minus_count = cursor.fetchone()[0]

    cursor.execute(plug_count_cmd)
    plug_count = cursor.fetchone()[0]

    try:
        search_sql = 'select `溢价率` from `tb_bond_jisilu`'
        cursor.execute(search_sql)

    except Exception as e:
        logger.error(e)

    else:
        content = cursor.fetchall()
        data = []
        for item in content:
            data.append(item[0])

        np_data = np.array(data)
        max_value = np.round(np_data.max(), 2)
        min_value = np.round(np_data.min(), 2)
        mean = np.round(np_data.mean(), 2)
        median = np.round(np.median(np_data), 2)
        count = len(np_data)
        t_value = (current, float(mean), float(max_value), float(min_value),
                   float(median), count)
        update_sql = 'insert into tb_bond_avg_yjl (Date,溢价率均值,溢价率最大值,溢价率最小值,溢价率中位数,转债数目) values (%s,%s,%s,%s,%s,%s)'
        try:
            cursor.execute(update_sql, t_value)
            con.commit()

        except Exception as e:
            logger.error(e)
            con.rollback()
        else:
            logger.info('update')

    cal_query = 'select `可转债涨幅` from tb_bond_jisilu'

    cursor.execute(cal_query)
    cal_result = cursor.fetchall()
    cal_result_list = []
    for i in cal_result:
        cal_result_list.append(i[0])

    cal_result_np = np.array(cal_result_list)
    max_v = cal_result_np.max()
    min_v = cal_result_np.min()
    mean = round(cal_result_np.mean(), 2)
    median = np.median(cal_result_np)

    title = '{}转债跌》正股数:{}'.format(current, num)
    content = f'转债跌>正股数:{num}\n可转债涨幅>=0----{plug_count}\n可转债涨幅<0----{minus_count}\n涨幅最大值:{max_v}\n涨幅最小值:{min_v}\n涨幅均值:{mean}\n涨幅中位数:{median}'

    try:
        sender_139(title, content)
    except Exception as e:
        logger.error(e)
    else:
        logger.info('发送成功')
        logger.info(content)

    # 写入数据库
    insert_sql = 'insert into tb_bond_analysis (date,转债跌大于正股数量,可转债涨幅大于0,可转债涨幅小于0) values (%s,%s,%s,%s)'
    try:
        cursor.execute(insert_sql, (current, num, plug_count, minus_count))
        con.commit()
    except Exception as e:
        logger.error(e)
        con.rollback()
    else:
        logger.info('入库成功')