Tushare 行情数据用asyncio实现周k线同步

周k线在量化中非常重要 

任务核心

    # ----------------- 周k线 ----------------------------------
    async def pro_weekly_bar(self,code):
        logger.info(f'starting:{code}')
        fields='ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount'
        table_name=Settings.STOCKS.WEEKLY_BAR.value  
        tmp=self.weekly_bar.query('ts_code==@code')
        # df = pro.weekly(ts_code='000001.SZ', start_date='20180101', end_date='20181101', fields='ts_code,trade_date,open,high,low,close,vol,amount')
        df = self.pro.weekly(ts_code=code, start_date='20160101', end_date=TimeUtils.fmt_cur_trade_date())
        df =df[::-1]
        # 查找未同步的交易日
        filter=df[~df['trade_date'].isin(tmp['trade_date'])]
        filter.fillna(0,inplace=True)
        return (fields,table_name,filter,code)

    def pro_weekly_bar_callback(self,obj):
        fields,table_name,df,code=obj.result()
        rows,_=df.shape
        if rows>0:
            DBUtils.store(self.db,fields=fields,table_name=table_name,df=df)
        logger.info(f'finish:{code}')

处理回调

    def pro_weekly_bar_callback(self,obj):
        fields,table_name,df,code=obj.result()
        rows,_=df.shape
        if rows>0:
            DBUtils.store(self.db,fields=fields,table_name=table_name,df=df)
        logger.info(f'finish:{code}')

任务创建

    async def pro_weekly_bar_tasks(self):
        # 算法调整 从交易日历中找
        self.weekly_bar=pd.read_sql('select ts_code,trade_date from weekly_bar',self.db)
        # 获取股票代码
        df=pd.read_sql('select ts_code from stock_basic',self.db)
        works=[]
        for symbol in zip(df['ts_code']):
            code,= symbol
            work=asyncio.create_task(self.pro_weekly_bar(code))
            work.add_done_callback(self.pro_weekly_bar_callback)
            works.append(work)
        await asyncio.wait(works) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恒云客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值