小公司要不要建设网站,wordpress 搜索 提示,济南网站微信,建设摩托车报价大全DolphinDB 开发的因子开发管理平台 Starfish 围绕量化投研的因子、策略开发阶段设计#xff0c;为用户提供了一个从数据管理、因子研究到策略回测的完整解决方案。
因子平台的回测引擎提供了多个关键的事件函数#xff0c;涵盖策略初始化、每日盘前和盘后回调、逐笔、快照和…DolphinDB 开发的因子开发管理平台 Starfish 围绕量化投研的因子、策略开发阶段设计为用户提供了一个从数据管理、因子研究到策略回测的完整解决方案。
因子平台的回测引擎提供了多个关键的事件函数涵盖策略初始化、每日盘前和盘后回调、逐笔、快照和K线行情的回调以及订单委托和成交回报函数。通过在策略初始化函数中定义指标并在相应的回调函数中编写自定义策略逻辑用户可以灵活地实现自己的交易策略。此外因子平台还支持多样化的回测结果展示用户可以通过数据报告和内置可视化报告直观地评估策略表现。这些可视化工具不仅帮助用户深入分析收益来源和风险因素还能有效监控策略的执行效果助力更为精准的策略优化。
本文将详细展示如何使用 DolphinDB 因子开发管理平台完成策略编写、回测运行。
Starfish 安装部署可参考 DolphinDBStarfish 因子开发管理平台快速上手丨因子开发篇。 Starfish 因子开发管理平台 license 需申请试用请点击 联系我们 - DolphinDB 填写表单留言备注试用因子平台 1. 策略开发与回测
在金融市场中策略的开发与回测是投资成功的核心。Starfish 因子开发管理平台提供了一系列工具帮助用户有效创建和验证交易策略从而优化投资决策。
1.1 策略开发
策略开发是回测流程的起点。用户首先需要创建一个新的回测策略选择相关的市场类型如股票或期货确定数据和回测类型以及定义策略的基本信息如名称和描述。这一步是整个回测流程的基础设定了后续操作的参数。具体的创建参数有
名称策略名称回测类型策略的品种包含股票、期货、期权、债券。行情类型输入行情的类型包含快照、分钟频率、快照频率对于股票还支持逐笔快照或者快照成交。数据类型TABLE 或者 DICT代表进入回测的行情类型具体会影响到在策略编写时如何拿取行情。例如如若选择 TABLE那么需要用 for 循环的方式拿取每个时间中的每一条行情如若选择 DICT则可以拿 key 直接访问到行情。因此如果要追求更高的性能更推荐使用 DICT 方式。标签用户自定义的标签。备注用户自定义的标签。
1.2 策略代码
在确定策略框架后编写策略代码是关键一步。通过定义一系列事件函数用户可以实现对市场数据的响应确保策略的逻辑和执行能够与市场动态保持一致。
事件函数说明def initialize(mutable context){}策略初始化函数只触发一次。可以在该函数中初始化一些变量或者订阅指标计算。回调函数传入参数 context 为逻辑上下文是由回测引擎创建的字典变量def beforeTrading(mutable context){}策略盘前交易函数每日盘前触发一次。可以在该函数中一些启动前的准备如订阅行情等def onTick(mutable context, msg,indicator){}逐笔行情通知函数行情更新时的处理函数逐笔委托和成交。在股票的逐笔快照类型回测时不需要indicator参数。def onSnapshot(mutable context, msg,indicator){}快照行情通知函数在股票的逐笔快照类型回测时不需要indicator参数。def onBar(mutable context, msg,indicator){}k线行情通知函数。def onOrder(mutable context,orders){}委托回报通知函数每个订单状态有变化时会触发。def onTrade(mutable context,trades){}成交回报通知函数有成交时会触发。def afterTrading(mutable context){}策略每日盘后回调函数每日盘后触发一次。可以在该函数统计当日的成交等信息def finalize(mutable context){}策略结束之后回调函数
重要参数解释
context逻辑上下文是由回测引擎创建的字典变量。策略的所有自定义变量都可以设置在 context 中。自动包含以下 4 个变量 context[“tradeTime”] 获取行情的最新时间context[“tradeDate”] 获取当前日期context[“BarTime”] 快照降频为低频行情时的当前期 Bar 时间戳context[“engine”] 获取回测引擎实例。 msg回测引擎传入最新的行情。在 onTick 中即为 tick 行情在 onSnapshot 中即为快照行情在 onBar 中即为K线行情。indicator在初始化函数 initialize 中通过引擎接口 subscribeIndicator 自动订阅计算以方便用户在后续策略中使用。indicator 集成了流数据处理方案可以操作滑动窗口计算。
例如在 initialize 函数中定义了指标 rsi
def initialize(mutable context){d dict(STRING,ANY)d[rsi]ta::rsi(close,5) // 使用内置ta因子模块中的rsi因子Backtest::subscribeIndicator(context[engine],kline,d)
}
在回调函数中引用指标或者行情
def onBar(mutable context, msg, indicatorNULL){for (stock in msg.keys()){close msg[stock][close] // 获取标的的收盘价rsi indicator[stock][rsi] // 获取标的rsi指标}
} // 假定msg为字典
其余的参数介绍可以在策略编辑页面右上角辅助文档按钮打开包含了传入的行情的具体字段方便用户进行回调函数的编写 1-1 策略代码编辑页面 1.3 回测引擎参数
配置回测引擎参数是运行回测前的重要环节。用户需设定初始资金、手续费等核心参数以模拟真实交易环境确保策略的有效性。其中以下的参数配置为必填项
key说明备注startDate开始日期endDate结束日期cash初始资金commission手续费tax印花税frequencyfrequency0时行情为逐笔行情引擎内部合成 frequency 频率的行情触发 onSnapshot默认为0合成频率为0指自动合成
配置完这些必填参数后理论上即可运行一个回测任务。但对于不同的策略类型股票、期货、期权和债券引擎还会有额外不同的参数配置具体的参数配置和介绍可以参考回测文档 Backtest。
1.4 行情数据
行情数据的字段及类型主要基于 DolphinDB 回测引擎对数据结构范式的规定一般来说用户从不同交易所、数据库获取各种股票数据包括逐笔委托订单数据、快照数据、逐笔成交数据和 k 线数据。然而这些数据来源各异具有不同的结构和范式对每一栏数据的含义、格式和取值也缺乏统一的规范。因此用户在使用回测功能时需要先确认数据结构的正确性。
在因子平台的策略与回测功能中输入的行情数据源会是运行设定的一部分具体在预设的第二步中。可以看到平台中支持两种方式的数据源入参方式 1-2 回测参数 - 设置数据源 已有库表选择当前用户可访问的库表及其与目标字段的对应关系。只能选择数据类型与目标数据类型相同的字段。自定义计算用户可以使用 SQL 的查询函数进行表的重构或是使用公共函数库内的函数对已有的数据源进行处理将最后的结果赋值为 result。在编写代码时可以点击”计算代码“旁边的问号按钮查看此回测任务需要的目标行情数据源具体的列名、类型以及解释。 1-3 回测参数 - 设置数据源 - 计算代码 2. 回测结果解析
在因子平台中回测结果的呈现方式主要分为数据报告和可视化报告两大类。
2.1 数据报告
数据报告提供了回测引擎返回的五个关键结果表格涵盖了策略收益、每日权益、持仓情况等核心指标。这些数据不仅便于用户快速预览回测结果还支持CSV格式下载方便后续分析与分享。
数据报告中包含了回测引擎返回的 5 个结果表格
表名含义getReturnSummary策略的收益概述getDailyTotalPortfolios策略每日权益指标getDailyPosition每日持仓数据详情getTradeDetails交易明细表getPosition持仓信息
每个部分结果默认展示前 10 行可以在表格下方切换页数查看 10 行以后的数据。每个表格的字段根据策略类型略有不同例如对于期货分钟频getReturnSummary 和 getDailyTotalPortfolios 结果为 2-1 回测结果 - 数据报告 用户可以通过数据报告对回测的结果有一个大概的预览并且可以点击每个表格右上角的下载按钮下载此表格为 csv 文件。
2.2 可视化报告
因子平台的内置可视化报告分为六个部分为用户提供了丰富的策略分析视角。通过图表和可视化数据用户可以直观地把握策略的核心执行结果、收益变化和持仓状况从而实现对策略性能的深入评估。
1. 策略概述汇总并展示策略的核心执行结果包括基本统计和性能指标。数据源自 getReturnSummary这为用户提供了一个快速把握策略效果的视图。 2-2 回测可视化报告 - 策略概述 2. 收益详情该部分通过三个标签页展示不同的收益数据
每日收益率/盈亏展示每一交易日的收益变化帮助用户追踪策略的短期表现。 2-3 回测可视化报告 - 每日收益率/盈亏 账户单位净值展示账户净值的时间序列变化反映策略从长期角度的资本增长。 2-4 回测可视化报告 - 账户单位净值 累计收益率展示从策略启动至今的总收益率为评估整体投资回报提供依据。 2-5 回测可视化报告 - 累计收益率 3. 交易分析包含了从开始日期到结束日期开仓的所有标的的行情及买卖信号的可视化图表。可以根据日期和标的进行筛选。也可以在这个图中观察在 initialize 中使用 subscribeIndicator 订阅的指标。例如在下图中此策略订阅了 3 个指标rsi、prevMacd、macd即可在交易分析图中进行点击查看。对于分钟频率或者日频的策略行情价格对应收盘价对于快照数据则对应行情中的 lastPrice。 2-6 回测可视化报告 - 交易分析 4. 持仓详情包含了从开始日期到结束日期策略每日的持仓状况用户可按时间及标的物筛选直观了解持仓变动。此部分有助于用户监控策略的持仓风险和市场敞口。 2-7 回测可视化报告 - 持仓详情 5. 账户详情包含了从开始日期到结束日期的账户详情如提供策略运行期间的详细账户情况如资产总值、现金余额等。根据策略类型的不同返回的字段不同。例如对于股票来说包含以下信息 2-8 回测可视化报告 - 账户详情 6. 订单详情包含了从开始日期到结束日期每个开仓的标的所产生的订单详情包括订单提交、成交至订单成功等状态。用户可以根据日期及标的进行筛选。对于每一笔成交的交易都会有提交及下单成功两条交易。 2-9 回测可视化报告 - 订单详情 总体而言这些内置可视化报告为用户提供了一个全面、多维的视角来评估和优化他们的交易策略实现了对策略性能深入的可视化分析同时利用低代码环境来充分利用 DolphinDB 的高效数据处理能力。
3. 回测进阶用法
在进行策略回测时深入掌握进阶用法能够显著提升策略优化的效率和效果。因子平台为用户提供了灵活的工具以满足多样化的策略需求包括自定义参数寻优和绩效归因分析这些功能使得策略开发和评估变得更加精准和系统化。
3.1 自定义参数寻优
在策略开发中经常需要调整多个参数以达到最佳的市场表现。这些参数可能包括窗口大小、最大买卖价差、报价金额、对冲偏移量、价格波动等。因子平台提供了一个强大的自定义参数寻优功能使得策略优化过程更加直观和灵活。
首先在策略的编写阶段开发者可以通过 userParams 字典传入策略函数来使用自定义参数。userParams 是一个由开发者自行定义的键值对集合使策略在运行时能够调用这些自定义设置。 3-1 策略用例代码编写页面 - 初始化函数 在策略的回测参数设置中开发者可以详细配置每个参数的候选值。具体的键值对可以在回测参数第三步中设置 3-2 策略用例回测参数 - 自定义参数 例如上图的 CTA 策略想基于 MACD 指标记录买入卖出信号但对于指标中的参数 shortWindowN 和 longWindowN 要进行参数的寻优。因此可以在回测设置的自定义参数模块中给 initialize 函数中的 userParams 自定义参数字典加入键值也就是名称以及对应的值的选项。在代码编辑页中的 initialize 中就可以通过 userParams[参数名称] 的方式访问到对应的值。例如在上图代码框中要提取 shortWindowN 的值即可使用 userParams[shortWindowN]拿取。
需要注意的是所有的值都是字符串的形式因此在真正使用的时候需要对非字符串的值进行一层类型转换。例如 shortWindowN 为整数类型则需要使用的时候使用 int(userParams[shortWindowN])拿取到整数类型的窗口大小。
因为在这里设定了多个值就会产生多个回测任务在第六步参数组合中即可查看共有几种参数组合。 3-3 策略用例回测参数 - 参数组合 3.2 绩效归因
绩效归因是评估和优化策略的重要手段通过对策略回测结果的深入分析可以了解策略的收益来源和风险因素从而改进策略表现。本节将介绍如何在平台上创建和使用绩效归因模板对历史回测结果进行可视化评价。因子平台中的绩效归因模板可以通过自定义的方式来评价策略结果。所有用户创建的模板都是公开的用户可以查看和使用平台上所有的模板但只能编辑和删除自己的模板。 首先用户需在平台的“策略与回测”模块中找到并点击“绩效归因”选项进入模板列表页面。在此页面中所有可用的绩效归因模板均已列出。用户可通过点击页面上的“创建”按钮启动新模板的创建过程。在此过程中需要填写以下必要参数
模板名称描述可以简要记录模板的用途和特点。标签添加相关标签便于分类和搜索。 3-4 新建绩效归因模板 创建成功后即可跳转入绩效归因的编辑页面该页面分为两个主要部分模板参数和模板代码。
模板参数从概念上讲绩效归因模板是通过函数调用实现对历史回测结果的深入计算。在模板参数部分有一个控件类型为策略运行记录选择器用于选择进行归因分析的结果对象。其余参数则包括归因时间及归因方法。在设置每个参数时需明确每个参数的名称、控件类型及默认值。 3-5 绩效归因模板编辑 - 模板参数 模板代码在这一部分平台会自动生成函数定义及其对应的参数提取方式。在撰写绩效归因代码时用户只需直接使用参数名即可获取相应的参数值进而对策略结果及相关参数进行进一步计算和整理。需注意函数的返回值必须是字典类型以保证数据的结构性。 3-6 绩效归因模板编辑 - 模板代码 在完成代码编辑后用户可以点击代码框右上角的“查看运行结果”按钮进行模板及默认参数值的试运行以确保所得到的结果符合预期。
在因子平台中我们内置了 Brinson 和 Campisi 两个绩效归因模板以及相对应的函数模块库。对于每个模板的实现方式和结果含义可以参考基于 DolphinDB 的 Brinson 绩效归因模型实践 和基于 DolphinDB 的 Campisi 绩效归因模型实践 。
BrinsonBrinson 绩效归因一般用于股票组合具体的参数解释如下
参数名称含义backtestResult历史回测结果methodBrinson 的归因方式默认值为 BHB。可选值为 BHB 和 BFmultiPeriod是否多期归因showAll是否展示每期结果multiPeriodMethod多期归因的方式默认是为 grap。可选值为 grap 和 sumindustryClassCode行业分类表代码。在这里填写如何获取股票的代码及对应的行业表格。如若不填则不以行业进行归因而是将每个股票当作一个行业进行归因分析selfDefinedBenchmark是否自定义基准benchmarkCode获取基准持仓表的代码需要有 symbol 和 weight 两列。
CampisiCampisi 绩效归因适用于债券组合的回测结果具体的参数解释如下
参数名称含义backtestResult历史回测结果treasuryCurveCode获取国债曲线表格的代码。如若不填则使用模拟数据convexity是否考虑凸性benchmark是否选择有基准归因benchmarkPositionCode获取基准持仓表的代码需要有 symbol 和 weight 两列industryCurveCode获取行业曲线表格的代码如若不填则使用模拟数据multiPeriod是否多期归因
4. 回测实战用例
本节将通过股票快照策略和和股票日频策略的具体案例介绍因子开发管理平台的策略开发与回测功能。
4.1 股票快照策略
4.1.1 策略开发
在策略与回测页面下我的策略中可以创建新策略选择相应的策略、行情、消息类型后就会跳转此策略的编辑页面。
在策略初始化函数中此策略定义了一个指标 maxVolatility_1m为当前 tick 相比于上一个 tick 的收益率。subscribeIndicator 接口获取回测引擎名、需要计算的数据类型如 snapshot、tick 等、需要计算的指标字典key为指标名用于之后访问value为指标计算的元代码之后计算结果将传入 onSnapshot 等策略回调函数。 4-1 stockDemo1 - 策略代码 - 初始化函数 在每日盘前回调交易函数中可以初始化当日的全局变量并使用 Backtest::setUniverse 订阅设定当日的股票池。 4-2 stockDemo1 - 策略代码 - 策略盘前交易函数 在快照行情通知函数中编写基于快照行情的策略逻辑。可以根据行情及策略信号下达委托买卖订单。onSnapshot 中的 msg 参数中包含了最新的快照行情以及在初始化中订阅的指标。例如在 Demo 中我们可以计算出的 maxVolatility_1m 值来判断是否需要下达委托买的订单。Backtest::submitOrder 是回测引擎提供的下单接口。 4-3 stockDemo1 - 策略代码 - 快照行情通知函数 因此本策略的主要逻辑为如果最新价相比于前价涨幅超过1%则下单 000001.XSHE 的限价买单下单时间为最新的快照时间价格为一档卖价股数为一档卖量。
4.1.2 回测运行
在编辑页面或者列表点击运行按钮后就会弹出需要选择的预设参数。对于内置的两个策略 Demo我们也提供了对应的预设参数。例如stockDemo1 对应的预设为 stockDemo1_preset。点击后所需要的参数就会自动填充完成。 4-4 stockDemo1 - 策略回测预设 - 选择预设 设置参数完整的配置参数列表请参阅 回测插件接口说明文档 4-5 stockDemo1 - 策略回测预设 - 设置参数 设置数据源此预设中因为我们没有数据因此使用的是两条模拟的 tick 数据 4-6 stockDemo1 - 策略回测预设 - 设置数据源 设置自定义参数用于参数寻优在 Demo2 中会详细介绍使用方法设置可视化模板用于选择可视化的模板。如果不选则默认使用内置的可视化模板设置绩效归因选择绩效归因模板以及对应的参数参数组合帮助确认已填的参数会产生的回测任务数量
在设置完所有参数后点击运行即可进入运行的详情页面。当然如果已经设置好所有所需的参数可以在任一步骤中点击运行。
4.1.3 回测结果
回测的结果页面可以分为两个部分 4-7 stockDemo1 - 策略回测结果详情页 运行信息包含此运行的元信息以及运行状态、运行参数策略子任务包含此运行中所有回测任务的运行时间、回测时间以及运行状态。 例如在这里可以点击查看日志查看策略中打印的日志 4-8 stockDemo1 - 策略回测结果详情页 - 查看日志 点击查看详情即可查看回测任务的详情 运行结果里面包含了所有回测引擎返回的表格结果。可以对每个表格进行下载。 4-9 stockDemo1 - 策略回测结果详情页 - 数据报告 可视化报告因为在参数处未选择模板生成的报告使用了默认的可视化模板包含了策略概述、收益详情、交易分析、持仓详情、账户详情和订单详情对于后 4 个模块可以进行股票代码和日期的筛选。
4.2 股票日频策略
接下来我们来介绍一个更为复杂的日频策略来展示如何使用因子开发管理平台中的策略来编写事件回调函数并且实现参数寻优的功能 。策略中也可以订阅因子平台中开发完成的因子信号以实现交易信号的生成。
4.2.1 策略开发
以公共脚本库下的 stockDemo2 为例。下图为策略初始化函数中的代码可以分为三个部分进行解析 4-10 stockDemo2 - 策略代码 - 初始化函数 信号订阅蓝框内为订阅相对强弱 RSI 指标与 stockDemo1 中展示的一样在字典 d 中订阅指标并且使用 Backtest::subscribeIndicator 指定订阅指标的数据类型。这里为 ‘kline’因此我们可以在 onBar 处获得指标的结果因子信号定义在绿框内我们使用到了 “ta::rsi” 这个因子代表平台中有一个因子模块 tarsi 是其中的一个因子。因此在订阅指标的时候用户可以任意使用到公开因子模块或者草稿因子模块中的因子信号。自定义参数的参数寻优在每一个函数参数中都存在 userParams 用于储存用户的自定义参数以实现自定义参数及参数寻优的功能。例如在上图中在计算 RSI 信号时需要对 timePeriod 进行调参以实现优化策略的功能。 首先在设定运行回测参数的自定义参数对应的函数下添加 ‘timePeriod’ 以及对应的可选值设定好参数后对应的值可以通过参数 userParams 进行获取。例如在 stockDemo2 中我们使用到了 int(userPrams[timePeriod]) 取出相应的值。需要注意的是使用前需要把值转为对应的类型例如这里使用 int() 将值转为整数类型。
在逐笔行情通知函数 onBar 中此策略进一步定义了对于交易信号的判断 4-12 stockDemo2 - 策略代码 - 逐笔行情通知函数 在这个回调函数中我们取出行情中的 rsi 指标值和在 contextDict 中储存的上一个 rsi 值通过一些简单的 if 条件来判断是否需要提交委托买卖订单 使用 print 函数打印日志用于策略的 debug
4.2.2 回测结果
编辑好回调函数及代码后点击运行选择默认的内置预设 stockDemo2_preset 即可进行运行。运行详情页面如下 4-13 stockDemo2 - 策略回测结果详情 参数寻优报告包含了所有回测任务的回测结果一览包含了指标概述等比较。可以在此看到不同参数所产生的策略收益与成交信息。 4-14 stockDemo2 - 策略回测结果详情 - 参数寻优报告 并且可以点击不同的回测任务查看到每个任务的具体详情例如点击综合第一下的 stockDemo2_3 即跳转到对应的报告 4-15 stockDemo2 - 策略回测结果详情 - 可视化报告 以上就是一个更为复杂的策略在因子开发管理平台的实现。
试用 Starfish 因子开发管理平台请点击 联系我们 - DolphinDB填写表单留言备注试用因子平台