apscheduler是一个python定时任务框架,我们可以利用它来完成一个每天自动获取数据并且发出交易指令的系统。

from apscheduler.schedulers.blocking import BlockingScheduler
import tusharepro = ts.pro_api(token = token)def update_data():'''获取指数价格以及市盈率等数据的函数'''a = data.IndexDataCrawler(pro)a.update_index()scheduler = BlockingScheduler()
#设定每周一至周五晚上7.30分爬取数据
scheduler.add_job(update_data, 'cron', day_of_week='1-5', hour=19, minute=30)
scheduler.start()

这里我们设置了一个blockingscheduler,这个函数可以帮助我们在指定时间点自动运行设定好的update_data函数,并通过这个函数来进行爬取数据。这里IndexDataCrawler是一个设定好的类,主要用来辅助爬取数据,这里也分享一下类中的爬取数据的函数。

import loggingclass IndexDataCrawler(object):"""docstring for ClassName"""def __init__(self, pro):super(IndexDataCrawler, self).__init__()self.log_path = './log/'self.pro = prodef set_logger(self):'''根据自己喜好来设置logger'''passdef update_index(self):connect, cursor = connect_sql()eng_con = con_eng()#1.\获取所有基金列表sql = 'SELECT * FROM `Index`'cursor.execute(sql)col = cursor.descriptionfund_list = cursor.fetchall()#2.对每个指数获取数据for fund_tuple in fund_list:print(fund_tuple)ts_code = fund_tuple[2]table_name = ts_code.split('.')[0] + 'i'try:lack_date_list = get_lack_date(table_name, cursor, start_date = fund_tuple[5].date())except Exception as e:self.logger.warning('no date', e)lack_date_list = get_today_date(cursor)self.logger.info(str(lack_date_list))result_df = pd.DataFrame()try:for date in lack_date_list:time_str = datetime_to_str(date)#获取指数的价格等信息df = get_index_daily(self.pro, ts_code, time_str)#获取pe,pb等信息pe, pb = self.get_index_basic(ts_code, time_str)if pe == 0 and pb == 0:passelse:df.loc[0,'pe'] = pedf.loc[0,'pb'] = pbresult_df = result_df.append(df)except Exception as e:self.logger.error(e)pd.io.sql.to_sql(result_df, table_name, con=eng_con, schema='stock_db', if_exists='append', index = False)self.logger.info('update index %s success' % (ts_code)) close_sql(connect, cursor)close_eng(eng_con)def get_index_basic(self, ts_code, trade_date):'''更新基金的pe与pbts_code: 基金的tushare代码trade_date: 基金的日期'''total_pe = 0total_pb = 0#获取离当天最近的一次指数权重更新if ts_code in ['000001.SH', '000016.SH', '000300.SH', '000905.SH']:#可以直接获得pe信息df = get_main_index_basic(self.pro, ts_code, trade_date)total_pe = df.loc[0,'pe']total_pb = df.loc[0,'pb']else:index_weight = get_index_weight(self.pro, ts_code, trade_date)if index_weight is None or len(index_weight) == 0:#输出,暂无指数权重数据passelse:#选取最近的一次index_weight = index_weight[index_weight.trade_date == index_weight.trade_date.max()]#获取pe值pe_df = get_basic(self.pro, trade_date = trade_date)merge_df = pd.merge(index_weight, pe_df, left_on='con_code', right_on='ts_code', how = 'inner')total_pe = merge_df.weight.sum() / (merge_df.weight / merge_df.pe).sum()total_pb = merge_df.weight.sum() / (merge_df.weight / merge_df.pb).sum()return total_pe, total_pb        

更新数据的函数主要分为两部分,一部分是用来获取指数的价格,成交量等信息,另外一部分则是用来获取指数的市盈率,市净率。这里对于上证指数,中证500等成分股较多的指数,由于tushare恰巧提供了这些指数的市盈率数据,所以我们可以直接爬取,而不用再去算了。

简单的低频指数投资二:每天定时获取数据相关推荐

  1. 简单的低频指数投资一:利用tushare计算指数市盈率

    对于广大的投资者来说,投资指数基金是最简单而有效的选择.而目前一种投资指数的方法就是通过市盈率等指标来计算指数的估值,并通过低估买入,高估卖出的方法投资. 然而tushare只提供了上证50,沪深30 ...

  2. 客户端网页API(二)——从服务器获取数据

    在现代网站和应用中另一个常见的任务是从服务端获取个别数据来更新部分网页而不用加载整个页面. 这看起来是小细节却对网站性能和行为产生巨大的影响.所以我们将在这篇文章介绍概念和技术使它成为可能,例如: X ...

  3. Ajax定时获取数据

    有时候在写网页时需要保证数据每隔一段时间进行更新,但又不能让整个页面刷新,所以可以定时的调用ajax帮我们完成数据的更新. 效果图 jsp页面代码: <%@ page language=&quo ...

  4. Datatables学习(二)ajax获取数据

    上一篇文章,讲解了datatables的基本创建,这一讲讲解datatables通过ajax异步获取数据 1.前提准备 以一个图书管理的表格为例,后台java代码就不细说了,这里主要讲解前端 数据库表 ...

  5. 基于python的量化投资(二) ---- 获取量化数据

    进行量化投资最基础的工作,就是获取量化的基础数据.有了基础数据,才能对数据进行加工处理,构建量化策略,进行量化分析,回测和回溯. 基于python进行量化投资的开发,获取数据的方式比较丰富,主要介绍以 ...

  6. Node微信公众号开发 - 定时获取最新文章同步到MySQL数据库

    0.介绍 本文源码:https://github.com/Jameswain/... ​ ​ ​ 最近有一个需求:把5个公众号的所有文章定时同步到小程序的数据库里,10分钟同步一次.实现这个需求当时我 ...

  7. mongodb定时删除数据(索引删除)

    一 简介:本文介绍创建自动删除数据的TTL索引 二 目的 定时删除数据 三 创建方法    db.collection.createIndex(keys, options)    options:   ...

  8. 基于Python的指数基金量化投资 - 指数投资技巧(三)不定期定额

    指数投资方式中有四种基本的方法,分别是定期定额.定期不定额.不定期定额和不定期不定额,这四种方式投资效果不同,对投资者的要求也不同,定期定额最简单,但收益不算高,不定期不定额最复杂,对投资者的要求最高 ...

  9. 手把手MATLAB 简单连续信号表示 指数 正弦 抽样 矩形 三角波 信号

    MATLAB 简单连续信号表示 指数 正弦 抽样 矩形 三角波 信号 开头想法:因为今天刚考完玩信号与系统,感觉自己学到的东西特别的空洞,所以将自己又将实验重新做一次,加深理解,希望温故而知新!下面进 ...

最新文章

  1. CodeForces - 566A Matching Names(字典树上贪心)
  2. 用手动和自动分别实现使用其DVD安装盘作为本地yum源
  3. EBS中Java并发程序笔记(1)
  4. wordpress 首页调用指定分类文章_怎样给wordpress网站分类目录页面,添加文章列表和分页效果?...
  5. Agile Web Application Development with Yii 1.1 and PHP5
  6. android 外接u盘格式化,u盘格式(安卓u盘格式化工具apk)
  7. Warez 组织的64K 3D动画下载
  8. keil4.72 自带jlink驱动升级到V6.94b
  9. 阅读《吴军·硅谷来信》一年的回顾与思考
  10. dota英雄出装备大全
  11. 体验部署ThinkAdmin
  12. 二零零九年经典雷人语录总汇四百零五条[转的]
  13. 计算机和共享打印机不在一个网络打印机共享,不在同一个局域网怎么样设置打印机共享...
  14. jzoj5331 【NOIP2017提高A组模拟8.23】壕游戏
  15. linux安装git及使用
  16. 【PTA】C语言 7-3 大炮打蚊子
  17. nested exception is java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/exc/Invalid.....
  18. 另类的唯品会和得物比价
  19. 从零开始快速入门Transformer注意力机制
  20. 打印机后台服务程序没有运行的解决办法

热门文章

  1. 60集Python入门视频PPT整理 | Python代码的测试、调试与探查
  2. PHP LFI 利用临时文件 Getshell 姿势
  3. 数据库“拣屎” (三)之 四大金刚 我们不一样
  4. Boostnote:适合程序员的笔记软件【转】
  5. 新手入门 Git GitHub
  6. Python循环语句(while)(for)经典简单练习题
  7. python100天进阶学习第一天
  8. Android音频系统之AudioTrack与AudioFlinger数据交互
  9. 02-mongodb基本命令操作
  10. MySQL 多种查询方法