数据保存
由qxiao创建,最终由qxiao 被浏览 32 用户
文章目标
给出一个保存自己创建的数据列表的示例贴。
数据
本文所展示的数据列表如下:
\
数据生成与筛选
利用可视化模块中的输入特征模块:input_features_dai.v30,进行导入。表达式字段如下所示:
-- DAI SQL 算子/函数: https://bigquant.com/wiki/doc/dai-PLSbc1SbZX#h-%E5%87%BD%E6%95%B0
-- 数据&字段: 数据文档 https://bigquant.com/data/home
-- 数据使用: 表名.字段名, 对于没有指定表名的列, 会从 expr_tables 推断, 如果同名字段在多个表中出现, 需要显式的给出表名
-- 可以进行以下两种数据表达式
-- first 选取expr_tables中拥有的字段进行编写或利用其中的字典进行交易信号的生成
-- 基础的因子如下所示
open
high
low
close
volume
momentum_5
reversal_5
volatility_5
-- 基于基础指标衍生计算得到的指标
-- 形成排名作为排序择股的依据,这里以动量为例
-- c_rank具体含义参见:https://bigquant.com/wiki/doc/dai-sql-Rceb2JQBdS
c_rank(-momentum_5) as momentum_5_rank
-- 基础的计算均线
m_avg(close,5) as ma_5
-- ta_rsi(open,) as RSI_5
-- 借助IF语句进行交易信号的产生
IF(m_avg(close,5)>m_avg(close,30), 1, 0) as buy_signal
-- second 直接'数据库.字段的形式进行调用',数据库名称以及数据字段见数据文档
-- cn_stock_bar1d.close / cn_stock_bar1d.open
-- cn_stock_prefactors https://bigquant.com/data/datasources/cn_stock_prefactors 是常用因子表(VIEW), JOIN了很多数据表, 性能会比直接用相关表慢一点, 但使用简单
-- cn_stock_prefactors.pe_ttm
-- 表达式模式下, 会自动join输入数据1/2/3, 可以在表达式里直接使用其字段。包括 input_1 的所有列但去掉 date, instrument。注意字段不能有重复的, 否则会报错
-- input_1.* EXCLUDE(date, instrument)
-- input_1.close
-- input_2.close / input_1.close
我选择了8个‘cn_stock_prefactors’库中收录的数据作为基础的数据指标(可以选择自己需要的数据进行尝试),并利用换手率和动量因子的截面排序对其进行了筛选,表达式字段如下所示:
-- DAI SQL 算子/函数: https://bigquant.com/wiki/doc/dai-PLSbc1SbZX#h-%E5%87%BD%E6%95%B0
-- 数据&字段: 数据文档 https://bigquant.com/data/home
-- 表达式模式的过滤都是放在 QUALIFY 里, 即数据查询、计算, 最后才到过滤条件
-- 这里可以直接放置筛选条件或利用上面生成的rank进行筛选
-- 利用刚刚计算得到的排序指标进行筛选
momentum_5_rank <= 50
-- 利用换手率进行筛选
turn > 0.02
-- c_pct_rank(-return_90) <= 0.3
-- c_pct_rank(return_30) <= 0.3
代码块如下:
m1 = M.input_features_dai.v30(
mode="""表达式""",
expr="""-- DAI SQL 算子/函数: https://bigquant.com/wiki/doc/dai-PLSbc1SbZX#h-%E5%87%BD%E6%95%B0
-- 数据&字段: 数据文档 https://bigquant.com/data/home
-- 数据使用: 表名.字段名, 对于没有指定表名的列, 会从 expr_tables 推断, 如果同名字段在多个表中出现, 需要显式的给出表名
-- 可以进行以下两种数据表达式
-- first 选取expr_tables中拥有的字段进行编写或利用其中的字典进行交易信号的生成
-- 基础的因子如下所示
open
high
low
close
volume
momentum_5
reversal_5
volatility_5
-- 基于基础指标衍生计算得到的指标
-- 形成排名作为排序择股的依据,这里以动量为例
-- c_rank具体含义参见:https://bigquant.com/wiki/doc/dai-sql-Rceb2JQBdS
c_rank(-momentum_5) as momentum_5_rank
-- 基础的计算均线
m_avg(close,5) as ma_5
-- ta_rsi(open,) as RSI_5
-- 借助IF语句进行交易信号的产生
IF(m_avg(close,5)>m_avg(close,30), 1, 0) as buy_signal
-- second 直接'数据库.字段的形式进行调用',数据库名称以及数据字段见数据文档
-- cn_stock_bar1d.close / cn_stock_bar1d.open
-- cn_stock_prefactors https://bigquant.com/data/datasources/cn_stock_prefactors 是常用因子表(VIEW), JOIN了很多数据表, 性能会比直接用相关表慢一点, 但使用简单
-- cn_stock_prefactors.pe_ttm
-- 表达式模式下, 会自动join输入数据1/2/3, 可以在表达式里直接使用其字段。包括 input_1 的所有列但去掉 date, instrument。注意字段不能有重复的, 否则会报错
-- input_1.* EXCLUDE(date, instrument)
-- input_1.close
-- input_2.close / input_1.close
""",
expr_filters="""-- DAI SQL 算子/函数: https://bigquant.com/wiki/doc/dai-PLSbc1SbZX#h-%E5%87%BD%E6%95%B0
-- 数据&字段: 数据文档 https://bigquant.com/data/home
-- 表达式模式的过滤都是放在 QUALIFY 里, 即数据查询、计算, 最后才到过滤条件
-- 这里可以直接放置筛选条件或利用上面生成的rank进行筛选
-- 利用刚刚计算得到的排序指标进行筛选
momentum_5_rank <= 50
-- 利用换手率进行筛选
turn > 0.02
-- c_pct_rank(-return_90) <= 0.3
-- c_pct_rank(return_30) <= 0.3
""",
expr_tables="""cn_stock_prefactors""",
extra_fields="""date, instrument""",
order_by="""date, instrument""",
expr_drop_na=True,
extract_data=False,
m_name="""m1"""
)
数据提取
编写完成我们需要的数据之后,利用数据提取模块’extract_data_dai.v17’获得数据,该模块使用非常方便,著需要输入提取的时间即可,
这里的历史数据向前取的时间可以选择的大一点,为满足数据中需要用到过去数据计算的指标的需要,代码块如下所示:
m2 = M.extract_data_dai.v17(
sql=m1.data,
start_date="""2020-01-01""",
start_date_bound_to_trading_date=True,
end_date="""2020-12-31""",
end_date_bound_to_trading_date=True,
before_start_days=90,
debug=False,
m_name="""m2"""
)
这里可以输出提取的结果
右键该模块,选择运行选中模块,之后再点击‘查看结果’即可看到数据提取结果,示例如下:
# 打印数据
m2.data.read()
还可以对提取的数据进行检查
# 检查一下是否获取得到我们想要的股票数据
df = m2.data.read()
df[df['date'] == df.date.sort_values().unique()[0]].sort_values('momentum_5_rank').reset_index()
数据的保存
最后是对提取出来的数据进行保存,利用模块’write_to_datasource.v8’进行,选项区示例如下:
数据ID输入想要保存的名称即可。
对保存数据进行检查
# 检查是否已经成功保存
import dai
dai.query(" select * from huangshuai_test_01 where date >= '2020-01-01'").df()
或者在数据库中的>我的 中查看是否有自己命名的数据库产生,如下所示:
\
数据库中的操作
点击进入该数据库,可以看到如下界面:
点击界面中的‘编辑’,可以对该数据库进行补充说明,
数据描述
可以包含对该数据库的简单介绍,说明该数据库包含了那些数据,以及数据期限等等
\
表结构
对各个字段的具体含义进行简单的介绍
\
文档
可以对字段及其用法进行进一步的说明
用例
可以编写一些数据表的调用示例
\
数据的发布
编写完成后可以选择对该数据表进行发布,点击发布可以获得如下界面
选择需要发布的目录以及该数据表的收费选项,最后点击确定即可发布成功。
数据下架
在数据发布成功后,如果发现数据有误,或数据不匹配要求,可以通过点击下架进行修改或删除。
\
代码
https://bigquant.com/codesharev3/a58690da-7cc3-4821-a0aa-c5d23bf54ae0
总结
以上就是数据存储的主要流程,希望能够对大家有所帮助。
2024年8月23日
\