Starfish 因子开发管理平台快速上手:如何完成策略编写与回测

DolphinDB 开发的因子开发管理平台 Starfish 围绕量化投研的因子、策略开发阶段设计,为用户提供了一个从数据管理、因子研究到策略回测的完整解决方案。

因子平台的回测引擎提供了多个关键的事件函数,涵盖策略初始化、每日盘前和盘后回调、逐笔、快照和K线行情的回调,以及订单委托和成交回报函数。通过在策略初始化函数中定义指标,并在相应的回调函数中编写自定义策略逻辑,用户可以灵活地实现自己的交易策略。此外,因子平台还支持多样化的回测结果展示,用户可以通过数据报告和内置可视化报告直观地评估策略表现。这些可视化工具不仅帮助用户深入分析收益来源和风险因素,还能有效监控策略的执行效果,助力更为精准的策略优化。

本文将详细展示如何使用 DolphinDB 因子开发管理平台完成策略编写、回测运行。

Starfish 安装部署可参考  DolphinDB:Starfish 因子开发管理平台快速上手丨因子开发篇。

Starfish 因子开发管理平台 license 需申请试用,请点击  联系我们 - DolphinDB 填写表单,留言备注试用因子平台!

1. 策略开发与回测

在金融市场中,策略的开发与回测是投资成功的核心。Starfish 因子开发管理平台提供了一系列工具,帮助用户有效创建和验证交易策略,从而优化投资决策。

1.1 策略开发

策略开发是回测流程的起点。用户首先需要创建一个新的回测策略,选择相关的市场类型,如股票或期货,确定数据和回测类型,以及定义策略的基本信息如名称和描述。这一步是整个回测流程的基础,设定了后续操作的参数。具体的创建参数有:

  1. 名称:策略名称
  2. 回测类型:策略的品种,包含股票、期货、期权、债券。
  3. 行情类型:输入行情的类型,包含快照、分钟频率、快照频率;对于股票,还支持逐笔+快照或者快照+成交。
  4. 数据类型:TABLE 或者 DICT,代表进入回测的行情类型,具体会影响到在策略编写时如何拿取行情。例如,如若选择 TABLE,那么,需要用 for 循环的方式拿取每个时间中的每一条行情;如若选择 DICT,则可以拿 key 直接访问到行情。因此如果要追求更高的性能,更推荐使用 DICT 方式。
  5. 标签:用户自定义的标签。
  6. 备注:用户自定义的标签。

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, indicator=NULL){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印花税
frequencyfrequency>0时,行情为逐笔行情,引擎内部合成 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 绩效归因模型实践 。

  • Brinson:Brinson 绩效归因一般用于股票组合,具体的参数解释如下:
参数名称含义
backtestResult历史回测结果
methodBrinson 的归因方式,默认值为 BHB。可选值为 BHB 和 BF
multiPeriod是否多期归因
showAll是否展示每期结果
multiPeriodMethod多期归因的方式,默认是为 grap。可选值为 grap 和 sum
industryClassCode行业分类表代码。在这里填写如何获取股票的代码及对应的行业表格。如若不填,则不以行业进行归因,而是将每个股票当作一个行业进行归因分析
selfDefinedBenchmark是否自定义基准
benchmarkCode获取基准持仓表的代码,需要有 symbol 和 weight 两列。
  • Campisi:Campisi 绩效归因适用于债券组合的回测结果,具体的参数解释如下: 
参数名称含义
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” 这个因子,代表平台中有一个因子模块 ta,rsi 是其中的一个因子。因此,在订阅指标的时候用户可以任意使用到公开因子模块或者草稿因子模块中的因子信号。
  • 自定义参数的参数寻优:在每一个函数参数中都存在 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填写表单,留言备注试用因子平台!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/890135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序算法(3)——归并排序、计数排序

目录 1. 归并排序 1.1 递归实现 1.2 非递归实现 1.3 归并排序特性总结 2. 计数排序 代码实现 3. 总结 1. 归并排序 基本思想&#xff1a; 归并排序&#xff08;merge sort&#xff09;是建立在归并操作上的一种有效的排序算法&#xff0c;该算法是采用分治法&#xff0…

GIN

gin是什么 Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。 它具有类似 Martini 的 API&#xff0c;但性能比 Martini 快 40 倍。如果你需要极好的性能&#xff0c;使用 Gin 吧。 特点&#xff1a;gin是golang的net/http库封装的web框架&#xff0c;api友好&#xff0c;注…

基于asp.net游乐园管理系统设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php python(flask Django) 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找…

PH热榜 | 2024-12-16

1. Animate AI 标语&#xff1a;动画系列剧集AI视频生成器 介绍&#xff1a;Animate AI 是一体化AI动画视频生成器&#xff0c;可以快速、轻松制作出动画系列视频。今天就免费开启你的创意之旅吧&#xff01;轻松搞定&#xff01; 产品网站&#xff1a; 立即访问 Product H…

VScode使用教程(菜鸟版)

目录 1.VScode是什么&#xff1f; 2.VScode的下载和安装&#xff1f; 2.1下载和安装 下载路径&#xff1a; 安装流程&#xff1a; 一、点击【Download for Windows】 二、等一小会儿的下载&#xff0c;找到并双击你下载好的.exe文件&#xff0c;开始进入安装进程 三、点…

【前端基础篇】JavaScript之DOM介绍

文章目录 前言WebAPI背景知识什么是WebAPI什么是APIAPI参考文档 DOM基本概念什么是DOMDOM树查找HTML元素方法概览1. document.getElementById(id)2.document.getElementsByTagName(name)3. document.getElementsByClassName(name)4. document.querySelector(CSS选择器)5. docum…

LabVIEW起落架震台检测

在现代飞机制造与维护过程中&#xff0c;起落架的性能测试是保障飞机安全的重要环节。通过LabVIEW开发的起落架小落震台检测系统&#xff0c;通过模拟飞机着陆过程&#xff0c;准确捕捉起落架在着陆时承受的各种动力学特性和应力响应&#xff0c;有效提升起落架设计的精度与可靠…

(长期更新)《零基础入门 ArcGIS(ArcMap) 》实验一(下)----空间数据的编辑与处理(超超超详细!!!)

续上篇博客&#xff08;长期更新&#xff09;《零基础入门 ArcGIS(ArcMap) 》实验一&#xff08;上&#xff09;----空间数据的编辑与处理&#xff08;超超超详细&#xff01;&#xff01;&#xff01;&#xff09;-CSDN博客 继续更新 目录 什么是拓扑&#xff1f; 1.3.5道路拓…

libaom 源码分析:熵编码模块介绍

AV1 熵编码原理介绍 关于AV1 熵编码原理介绍可以参考:AV1 编码标准熵编码技术概述libaom 熵编码相关源码介绍 函数流程图 核心函数介绍 av1_pack_bitstream 函数:该函数负责将编码后的数据打包成符合 AV1 标准的比特流格式;包括写入序列头 OBU 的函数 av1_write_obu_header…

pset4filter less: helpers.c

&#xff08;&#xff14;&#xff09;blur function 简单画图熟悉一下要做什么 可以看到3种情况&#xff0c;顶格&#xff0c;边界&#xff0c;里面如果分开算的话&#xff0c;是真的麻烦&#xff1b;但是当时还真的没有想到更好的&#xff0c;就先写一写&#xff08;此处摘取…

【java】规则引擎

Java 规则引擎&#xff1a;Easy Rules 简介 优点 通过 Easy Rules 引入规则引擎的主要优点是解耦业务规则和代码逻辑&#xff1a; 无需修改代码&#xff0c;只需更新数据库中的规则即可。提供灵活、可扩展和可维护的方式处理复杂业务逻辑。 规则定义 Easy Rules 支持多种形…

满足你的个性化需求!ChatGLM4 模型微调教程

一、 大模型 ChatGLM4 简介 GLM-4-9B 是智谱 AI 推出的最新一代预训练模型 GLM-4 系列中的开源版本。 在语义、数学、推理、代码和知识等多方面的数据集测评中&#xff0c; GLM-4-9B 及其人类偏好对齐的版本 GLM-4-9B-Chat 均表现出超越 Llama-3-8B 的卓越性能。 除了能进行多…

TCP基础了解

什么是 TCP &#xff1f; TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。 面向连接&#xff1a;一定是「一对一」才能连接&#xff0c;不能像 UDP 协议可以一个主机同时向多个主机发送消息&#xff0c;也就是一对多是无法做到的&#xff1b; 可靠的&#xff1a;无论…

如何测量分辨率

一、什么是分辨率&#xff1f; 分辨率指的是分清物体细节的能力。分辨率是一个成像系统还原空间频率的能力。一些人只是简单的用分辨率去描述极限分辨率&#xff0c;但是相机在在不同的对比度的情况下还原低&#xff0c;中和高频率的能力&#xff0c;也可以显示全面综合的信息。…

HCIA-Access V2.5_4_1_1路由协议基础_IP路由表

大型网络的拓扑结构一般会比较复杂&#xff0c;不同的部门&#xff0c;或者总部和分支可能处在不同的网络中&#xff0c;此时就需要使用路由器来连接不同的网络&#xff0c;实现网络之间的数据转发。 本章将介绍路由协议的基础知识、路由表的分类、静态路由基础与配置、VLAN间…

气象与旅游之间的关系,如果借助高精度预测提高旅游的质量

气象与旅游之间存在密切的关系,天气条件直接影响旅游者的出行决策、旅游体验和安全保障。通过高精度气象预测技术,可以有效提升旅游质量,为游客和旅游行业带来显著的优势。 1. 提高游客出行决策效率 个性化天气服务:基于高精度气象预测,旅游平台可以提供个性化的天气预报服…

【计算机视觉基础CV】03-深度学习图像分类实战:鲜花数据集加载与预处理详解

本文将深入介绍鲜花分类数据集的加载与处理方式&#xff0c;同时详细解释代码的每一步骤并给出更丰富的实践建议和拓展思路。以实用为导向&#xff0c;为读者提供从数据组织、预处理、加载到可视化展示的完整过程&#xff0c;并为后续模型训练打下基础。 前言 在计算机视觉的深…

数据结构之线性表1

2.1 线性表的定义和基本操作 1.线性结构的特点是&#xff1a;在数据元素的非空有限集中&#xff0c; &#xff08;1&#xff09;存在惟一的一个被称做“第一个”的数据元素&#xff1b; &#xff08;2&#xff09; 存在惟一的一个被称做“最后一个”的数据元素&#xff1b; &a…

信息安全实训室网络攻防靶场实战核心平台解决方案

一、引言 网络安全靶场&#xff0c;作为一种融合了虚拟与现实环境的综合性平台&#xff0c;专为基础设施、应用程序及物理系统等目标设计&#xff0c;旨在向系统用户提供全方位的安全服务&#xff0c;涵盖教学、研究、训练及测试等多个维度。随着网络空间对抗态势的日益复杂化…

关于分页的样式问题

在最近写网页的时候遇到了一个关于样式的问题&#xff0c;今天我来跟大家来说一下。像是分页中的颜色效果&#xff0c;斑马纹颜色要注意颜色不要过于深。 这种的颜色就有一点深看着很不舒服&#xff0c;应将当前的颜色改为淡一点的&#xff0c;也可以利用rgba调整透明度&#x…