百天计划之第24天,关于“智能量化,财富自由与个人成长”。
继续昨天基于tushare和mongo,玩转qlib自带的数据库,继续构建我们的数据库。
01 qlib的dump_bin
三种模式:DumpDataAll,就是完全重建,这个很好理解,相当于把原来的抹掉。DumpDataUpdate,其实是追加(日期必须在之后)(已存在的date数据不修改),DumpDataFix就是修改(不存在的date不追加)。
update和fix模式有点互补的意味。
一般历史数据一次性创建出来,然后连续往后的日期update(追加)即可。
02 qlib的股票数据normalize
与我们通常的后复权不同,不过这个差异点留着后续再说。
03 财务数据
tushare取财务指标:
把查询出来的财务指标变成pit的导入格式:
def get_fin_from_mongo(symbol, indicators, start_report_date=None): query = {'code': symbol} if start_report_date: query['end_date'] = {'$gte': start_report_date} filters = {'date': 1, 'period': 1, '_id': 0} for ind in indicators: filters[ind] = 1 items = get_db()['stock_fin'].find(query, filters) items = list(items) csv = [] for item in items: for ind in indicators: csv.append({'date':item['date'], 'period':item['period'], 'field':ind, 'value':item[ind], 'symbol':symbol}) df = pd.DataFrame(csv) return df
正则化:
# 正则化 dt = df["period"].apply( lambda x: ( pd.to_datetime(x) + pd.DateOffset(days=45) ).date() ) df["date"] = df["date"].fillna(dt.astype(str)) df["period"] = pd.to_datetime(df["period"]) #df["period2"] = pd.to_datetime(df["period"]) df["period"] = df["period"].apply( lambda x: x.year * 100 + (x.month - 1) // 3 + 1 )
核心就是“报告期”period变成“年第X期”的格式:
整理好格式后,dump倒是比较简单:
def dump_csv_to_pit(): dump = DumpPitData(csv_path=PIT_CSVS, qlib_dir=CN_DATA_TEST) dump.dump()
到目前为止,我们完成了茅台的时间序列数据,以及财务指标数据从tushare采集入mongo,而后从mongo读取并整合到qlib的数据库中。
主要的时间花在数据整理上,如同传统机器学习的项目一样,数据整理与特征工程本身就是花费大量时间的地方。
后续可以把这个机制写成定时任务,定期增量更新数据。
成长感悟:
和很多人的很多事比起来,我们应该珍惜已经拥有的。
没有什么东西是理所应当,像健康,自由,至少有一份稳定的工作等。
常怀感恩的心。
努力活在当下,尽量规避风险没有问题。
做好自己的ABZ计划,谋事在人,成事在天,很多事情不要勉强也勉强不来,尽力而为然后顺其自然就好。
春种秋收是自然规律,你现在的生活是三年前的决策决定的。而你想要的生活,需要今天去努力。没有什么好的改变会在瞬间发生,都是潜移默化,量化到质变的结果。读一本书有多少用处,感觉不出来,但你读了很多本书之后,你的认知水平就上了一个台阶。所以做“时间的朋友”,“有复利”的东西。
阅读,运动,成体系的投资理财。
假设回到大学毕业,告诉年轻时的自己(不能透露未来信息,比如房价,茅台和腾讯股票之类的未来信息),那站在今天的认知水平上,我们会告诉自己什么呢?
财富管理(理财)或者说财富思维。
海量阅读并快速建立认知体系。
学会写作与系统化表达。
最近的文章:
qlib高阶应用之财务数据库与自定义表达式