为啥使用数据库
在做量化投研的过程中,一个适合的数据库往往能够提高工作的效率,在过去的工作研究经历中,使用过csv文件、pickle文件、mysql、mogodb等数据库,在我自己以后的投资研究过程中,尝试使用mongodb数据库和man-group(英士曼集团)开源的基于mongodb的数据库框架-ARCTIC,应该足够能够满足我的投研需要了。
必须要说明的是,arctic数据库应该算不上最快的时序数据库,有很多收费或者免费的数据库都比它效率要高一些,比如收费的kdb+数据库,半收费的dophindb等,arctic的优势在于免费、简单易用,所以在存储股票、期货、基金、期权、债券、可转债、外汇等数据的时候,我选择了ARCTIC。
安装教程
使用之前首先需要在电脑上安装mongodb数据库,需要安装python,然后安装arctic。
数据库命名
在使用ARCTIC的时候,需要创建两个名字,一个是library_name,一个是symbol_name,所以对数据库的名字做一个统一的规定,library_name是大类资产的名字,symbol_name是具体资产__周期__交易所的名字,这样同一规定之后,方便后续数据的管理工作。
股票 — STOCKS
期货 — FUTURES
基金 — FUNDS
期权 — OPTIONS
债券 — BONDS
可转债 — CBONDS
外汇 ---- FORES
数字货币 — DIGITALS
一个存储数字货币的例子
import gzip
import os,sys
import pandas as pd
from arctic import Arctic
conn = Arctic('127.0.0.1')
if "DIGITALS" not in conn.list_libraries():
conn.initialize_library("DIGITALS")
lib = conn["DIGITALS"]
data_root = "/home/yun/Downloads/spot/"
timeframe = "1m"
symbol_type = "spot"
exchange = "binance"
file_list = os.listdir(data_root)
for file in file_list:
symbol = file.split(".")[0]
symbol_name = symbol+"__"+timeframe+"__"+symbol_type+"__"+exchange
with gzip.open("/home/yun/Downloads/spot/"+file, 'rb') as f:
df = pd.read_csv(f)
lib.write(symbol_name, df)
print(f"存储数据{file}成功")
读取数字货币数据,并使用plotly_express画出收益率直方图,观察收益率分布情况
import gzip
import os,sys
import pandas as pd
from arctic import Arctic
conn = Arctic('127.0.0.1')
lib = conn["DIGITALS"]
symbol_list = lib.list_symbols()
data = pd.DataFrame()
count = 0
for symbol in symbol_list:
if "spot" in symbol:
count+=1
name = symbol.split("__")[0]
df = lib.read(symbol).data
df['ret'] = df['close'].pct_change()
df['name'] = name
df = df[['ret','name']]
if count<3:
data = data.append(df)
print(symbol)
data = data.dropna()
import plotly_express as px
fig = px.histogram(data,x="ret",color="name")
fig.show()
从1分钟收益率的直方图上来看,这两个数字货币的绝大多数时间内收益率波动都比较小,但是有极少数的1分钟K线的收益率非常高或者非常低。
|