打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Arctic用于读写真实的A股数据:转债的正股价

持续行动1期 45/100,“AI技术应用于量化投资研资”之可转债投资。

昨天尝试了Arctic,一个基于mongo的高性能量化数据库,使用的感受不错。

今天要重点做一件事情,转债的数据入Arctic,并与Qlib的数据库对比,全量加载转债的性能,如果更好或者相差无几,那么Qlib框架使用的必要性将会降低。

01 构建Arctic bond_daily数据库

Arctic的设计理念就是“pandas in, pandas out”,直接写一个dataframe,读一个dataframe,连index都保留着,自动完成日期字段的序列化和反序列化。

最常用的lib_type=CHUNK_STORE,按symbol存储。

from arctic import CHUNK_STORE, Arctic


def get_store(db_name):
a = Arctic('localhost')
a.initialize_library(db_name, lib_type=CHUNK_STORE)
lib = a[db_name]
print(lib)
return lib


def write_df(store, tb, df, chunk_size='M'):
lib = get_store(store)
if tb not in lib.list_symbols():
lib.write(tb,df,chunk_size=chunk_size)
else:
lib.update(tb, df, chunk_size=chunk_size)

然后特征遍历读数据并写入Arctic。

def update_all_bond_daily(all=False):
# 获取所有列表,有日期,从最近的日期开始读。
items = list(get_db()['bond_basic'].find({}, {'ts_code': 1, '_id': 0}))
if items and len(items) == 0:
logger.error("读可转债列表为空")
return
for i, item in enumerate(items):
code = item['ts_code']
logger.debug("{}-{}-{}".format(i, code, i / len(items)))
# date = get_daily_last_date(code, tb_name='bond_daily')
date = None
if all == False:
date = '20220901'
logger.debug('{}开始更新'.format(date))
df = get_bond_daily(code, date)
if df is None or len(df) == 0:
logger.info('取不到数据')
continue
# df['_id'] = df['ts_code'] + '_' + df['trade_date']
df.rename(columns={'trade_date': 'date', 'ts_code': 'code'}, inplace=True)
df['date'] = df['date'].apply(lambda x: datetime.strptime(x, '%Y%m%d'))
df.index = df['date']
del df['date'], df['code']
print(df.tail())
write_df('bond_daily', code, df)

02 转股价

主要代码是读tushare整理格式,存储在Arctic的bond_stk_chg库中。

03 正股价

正股价的逻辑也类似,tushare的复权因子是分开存的,这个可以整合到一起。

我们所股票价格存储于stock_daily库。

04 数据整合查询

把转债数据读出,转股价读出,二者整合。

df = read_df(symbol)
df_chg = read_chg_df(symbol)
all = pd.concat([df,df_chg], axis=1)
all.fillna(method='ffill',inplace=True)
all.dropna(inplace=True)

按需读取正股价:

start_date, end_date = all.index[0], all.index[-1]
print(start_date,end_date)

stk_code = '000001.SZ'
df_stk = read_stk_df(stk_code,start_date, end_date)

05 表达式引擎

已经具备把所有交易数据读入内存,而且Arctic缓存特别容易,它就是把整个计算好的dataframe以一个chunk的形式直接保存起来,若有需要还可以使用VersionStore来存取副本。

与qlib的差别就在于qlib还有一个表达式引擎。

好在qlib的代码模块化做得很多,我把qlib的的表达式引擎拆份出来,与它的数据存储独立开来。

没有完全对比完成,但目前看起来,arctic可以用于量化,数据维护,更新与调用比qlib基于Csv的方式要方便很多。

百万数据直接返回,高性能量化数据库Arctic,基于mongo的列存引擎

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
通过数据看上海疫情
量化交易
量化投资 | ETF二八轮动策略,稳赢大盘指数
利用python进行股票大数据的分析跟word报告本地生成
通达信行情数据获取
选股系列(5)——均线多头及首次突破前高
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服