000-预备知识
由jliang创建,最终由jliang 被浏览 1018 用户
介绍
BigQuant是专业但易用的AI量化投资平台。如下知识可以帮助我们更好的开始策略开发。
如果没有特别说明,请在 AIStuido 3.0使用。
编程
BigQuant平台同时支持可视化编程开发和代码编程开发,并且两种模式可以无缝切换和融合
- 可视化:无需学习复杂的编程,支持低代码/零代码开发策略。BigQuant提供策略了海量模块、模版、学院、策略社区、知识库供学习,让策略开发更加简单、更高效。
- 代码:主要需要 python 和 pandas 编程,推荐学习 SQL,可以极大的提升数据处理和分析能力
数据
BigQuant平台提供了海量数据,专为AI与量化
- 数据平台
- 数据:覆盖各种市场和类型的AI/量化策略开发,整理、较对、加工等,面向AI/量化场景设计和优化。平台每天处理数10 TB数据。
- 浅加工数据/因子:e.g. 预计算因子
- 深加工数据/因子
- 深度研究/特色数据/因子
- 社区用户分享数据/因子
- DAI 数据SDK
- 通过一行代码或者简单的可视化模块就可以实现所有数据查询和复杂的数据计算
比如常用的数据表之一是 预计算因子 表,该表有大量预先定义好的基础数据,在开发AI策略时经典用到。数据如下:
代码
支持 SQL + pandas DataFrame 混合开发
import dai
# 使用 dai 做数据查询 以及 数据计算
df = dai.query('''
SELECT
open, close,
m_lag(close, 5) AS close_5,
close / close_5 AS return_5,
date, instrument
FROM cn_stock_bar1d
ORDER BY date, instrument
''', filters={"date": ["2024-01-01", "2024-03-01"]}).df()
# 使用 DataFrame 进一步计算
df["close_10"] = df.groupby("instrument")["close"].shift(10)
df["return_10"] = df["close"] / df["close_10"]
# 存储df为临时数据集
ds = dai.DataSource.write_bdb(df)
# 读取
df2 = ds.read()
# 使用 SQL 读取
df3 = dai.query(f"SELECT * FROM {ds.id}").df()
# 持久化保持到我的数据集
# ds.persist("some_name")
可视化
- 输入特征 DAI SQL: 支持通过表达式 和 SQL两种模式做数据查询和计算逻辑编写。模块已经开源。
- 数据抽取(DAI): 数据抽取,支持回测和模拟交易,无需代码修改。模块将开源。
回测
BigTrader 是BigQuant平台提供的回测和实盘统一交易框架。可以在 BigTrader 里写任何数据处理和交易的逻辑,但一般情况下
- 在 BigTrader 前,选股、过滤、因子计算、打分、排序或者机器学习、生成仓位目标等在BigTrader前完成
- 在 BigTrader 中,主要做交易逻辑,根据仓位目标,发出买卖信号
- 【可选】在 BigTrader 后:进一步的绩效分析
\
BigTrader参数
输入数据
一般情况下,会用这个输入数据来确定
- 股票代码列表:列 instrument
- 开始/结束日期
- 优先使用用户在模块参数
开始日期
/结束日期
的设置,如果未设置 - 更多时候是直接使用 输入数据的
.metadata["extra"]
,这个数据一般来自数据抽取
模块 注入,如果未设置 - 使用数据列
date
的最小最大日期
- 优先使用用户在模块参数
- 仓位:postion 列,这样可以代码中直接用,不是必须,但推荐
K线处理函数
很多逻辑定制在这里。如下示例:
context.rebalance_period.is_signal_date(data.current_dt.date())
模块支持设置调仓周期,如果设置了,可以用 rebalance_period.is_signal_date 来判断是否信号生成日(是否调仓日的前一个交易日)。BigTrader是事件驱动,当前 bar 生成信号,下一个bar做撮合成交。context.data
即是前面的输入数据,用日期过滤获取到当前仓位目标position
- 卖出不在仓位目标里的股票,调整股票到目标仓位值
def bigquant_run(context, data):
import pandas as pd
# 下一个交易日不是调仓日,则不生成信号
if not context.rebalance_period.is_signal_date(data.current_dt.date()):
return
# 从传入的数据 context.data 中读取今天的信号数据
today_df = context.data[context.data["date"] == data.current_dt.strftime("%Y-%m-%d")]
target_instruments = set(today_df["instrument"])
# 获取当前已持有股票
holding_instruments = set(context.get_account_positions().keys())
# 卖出不在目标持有列表中的股票
for instrument in holding_instruments - target_instruments:
context.order_target_percent(instrument, 0)
# 买入目标持有列表中的股票
for i, x in today_df.iterrows():
position = 0.0 if pd.isnull(x.position) else float(x.position)
context.order_target_percent(x.instrument, position)
初始化函数
其他参数
- 初始资金
- 数据频率:一般是日频
- 产品类型:股票
- 调仓周期:支持丰富的类型。比如每个5个交易日调仓,选择 交易日 & 5;每月最后一个交易日调仓,选择 月度交易日 & -1
- 回测引擎模式
- 极速模式(beta版):向量化回测,需要position列输入,不做精确撮合,速度最快,适合需要回测每天持有上百只上千只股票的策略
- 标准模式:支持所有场景,精确撮合,自定义交易函数
- 成交率限制
- 买卖点
- 基准代码
部署
BigQuant平台支持策略运行部署托管,并提供了免费了托管服务器资源。
模拟交易
- 提交模拟,选择托管服务器\n
- 查看任务运行情况
- 在电脑端查看 我的交易\n
- 在手机/微信里查看我的交易,关注公众号 BigQuant,在手机上接收调仓提醒和查看交易信号和绩效等
实盘交易
内测中,请联系客服小Q微信,获取实盘
策略学习资源
\