基于本地信号构建策略并展示模拟绩效
由qxiao创建,最终由qxiao 被浏览 149 用户
说明
本文档基于私募版https://fund.bigquant.com/介绍如何基于本地的策略信号在BigQuant平台上构建策略并展示出绩效。
流程如下:本地通过SDK把信号写入到平台表→在平台上构建策略读取表的信号交易→提交模拟→分享到策略社区。
步骤
一、本地信号写入平台表
1、要登陆私募版https://fund.bigquant.com/,首先需要在主平台https://bigquant.com/上进行注册,注册后联系小Q开通私募版和SDK权限(如果已有主平台账号,直接联系小Q申请)。
2、准备信号文件
1)信号文件是csv格式,要求有三列:date(日期), instrument(标的), position(目标仓位)\n2)股票代码后缀名: 深交所 SZ,上交所 SH,北交所 BJ \n3)时间填实际需要交易的上一个交易日,例如周五交易,date就填周四的日期(因为回测和模拟是收盘后运行,给出下单信号,次日交易)
参照
文档末附件也有参照文件。
3、调用SDK把信号写入平台表
1)使用数据SDK,需要python3.8以上,首先使用 pip 安装包
pip3 install bigquantdai
2)获取访问凭证
进入用户中心创建访问凭证,具体可以参照文档:
3)通过如下代码把本地文件中的信号写入到平台表中
import pandas as pd # 如果未安装pandas需要通过pip3 install pandas 安装
from daisdk import dai
# 读取信号文件
def read_file(file):
# 信号文件读取 格式要求 date instrument position 参照
# date : 2024-03-01 (日期)
# instrument :688687.SH (股票代码,上交所SH,深交所SZ,北交所BJ结尾)
# position : 0.1 (股票权重)
df = pd.read_csv(file)
df['date'] = pd.to_datetime(df['date'])
df = df[['date','instrument','position']]
return df
# 数据写入平台
def write_data(df,table_name):
return dai.DataSource.write_bdb(
data=df,
# datasource id是全局唯一的,支持小写字母、数字、下划线,以字母开始
id=table_name,
# 可选,数据插入时,根据unique_together如果有重复的,会去重.如果有分区,则需要传入索引参数indexes
unique_together=["date", "instrument"],
# 可选,指定索引,跟分区相对应,用于数据访问加速
indexes=["date"],
)
# 从平台读数据
def read_data(table_name):
df = dai.DataSource(table_name).read_bdb(
# 指定返回类型为 pandas.DataFrame, 如果不指定默认为 pyarrow.Table
as_type=pd.DataFrame
)
return df
# 主运行函数
if __name__=="__main__":
# 私募版链接
host = "fund.bigquant.com"
# 访问凭证
access_key = ""
secret_key = ""
# 信号文件
signal_file_name = ''
# 信号写入的表名
signal_table_name = ''
# 登录
dai.login(access_key, secret_key, host=host, port=17010)
# 读数据
df = read_file(signal_file_name)
print("从文件读取的数据:\n",df)
# 数据写入平台
ds = write_data(df,signal_table_name)
# 查看写入的数据
print("从平台表读取的数据:\n",read_data(signal_table_name))
以上代码中需要修改的地方如下,包括访问凭证,本地信号文件和需要写入的表名,注意表名需要全平台唯一。
# 访问凭证
access_key = ""
secret_key = ""
# 信号文件
signal_file_name = ''
# 信号写入的表名
signal_table_name = ''
二、构建策略
仿照文末的策略样例来构建策略。
主要思路是通过特征抽取模块读取信号表中的数据,通过BigTrader回测引擎进行回测,如果持仓不在目标信号中就卖出,再根据目标仓位中的股票进行调仓和买入。
有几点需要注意
1)输入特征模块的表达式-默认数据表参数需要填写为第一步中自定义的表名
2)数据抽取模块的开始和结束时间根据信号文件的开始和结束时间填写即可,主要用于回测的开始和结束时间。
另外,开始日期和结束日期绑定交易日期一定要勾选,这样才支持模拟交易。
3)BigTrader回测模块主要负责下单,样例策略设置的初始资金为100万,开盘买卖。
关于回测引擎的介绍可以参照文档:
https://bigquant.com/wiki/doc/bigtrader-3gG2rg4jBd
https://bigquant.com/wiki/doc/api-spI0guZnrT
4)点击全部运行或者画布运行按钮来跑回测
5)回测结束后,大致看下交易详情是否跟信号文件的一致。
\
三、策略部署
1)点击画布右上角的提交按钮进行提交模拟
2)弹出对话框中的任务类型默认是日频交易任务,这个不用修改。
触发时间根据实际需要填写。默认为空表示平台自动触发,一般数据构建完成后下午5点多开始跑模拟,所以需要保证每日下午5点前按照步骤一把明日的交易信号上传平台并写入到表中。
如果时间来不及,就可以设置触发时间参数,表示平台最早也要在此时间之后跑这个模拟。
关于模拟交易的详细介绍,请参考 模拟交易方法
四、绩效展示
提交模拟后,点击我的交易可以进入模拟交易页面,点击右边的操作按钮,然后选择分享到社区,就可以把模拟策略的绩效展示出来了。
\
五、每日更新信号文件
1)按照上面的步骤一可以把历史的信号一次性写入到平台,每日收盘后次日的交易信号也需要按照步骤一的方法,只需要把次日的信号加入到本地的csv文件即可,然后调用SDK方法写入。例如,今天是2024-08-05,明日计划全仓买入000001平安银行,当前持仓全部卖出,就可以在本地csv信号文件中加入如下一条记录即可(历史信号可以保留,因为dai.DataSource.write_bdb只会把新增的数据写入到平台信号表中)
2)需要保证每日信号的写入在平台自动跑模拟之前,平台最早下午5点多就开始跑模拟,如果时间来不及,可以通过上面介绍的在提交模拟交易时设置的触发时间来控制。
3)如果错过了模拟交易的时间或者模拟跑失败了,可以通过如下方法手动再次触发:
点击最左边的任务管理按钮,选择某个模拟任务,然后再点击右边的立即运行即可。
\
附件:
1、本地信号文件样例
/wiki/api/attachments.redirect?id=51edc28f-913a-41e8-9a23-5d531e809e70
2、策略样例:
https://fund.bigquant.com/codesharev3/94086e62-0094-4db7-8d1c-9a6449fdfbbb
\