第2章 理解K线数据----SPL量化编程课

SPL量化EMA双均线策略:从公式、种子到回测实盘避坑 指数移动平均线(EMA)是量化交易中最基础的平滑指标之一,其核心在于平滑系数与权重指数衰减,半衰期决定了近期价格响应速度与尾部记忆长度。相比简单均线,EMA以O(1)递推降低滞后,适合趋势跟踪、均线交叉和动态离场等场景。落到SPL量化策略中,EMA双均线能否跑稳,不只取决于公式,还取决于初始种子、预热期、信号确认时点、前视偏差和成本模型;回测阶段的参数扫描若忽视半衰期与参数邻域稳定性,很容易把种子误差或过拟合当成策略收益。围绕这些工程细节,讨论从公式骨架到实盘落地的完整避坑路径。 阅读详情

2.1 数据下载

数据分析的第一步就是获取数据,为方便读者使用,我们将股票数据免费分享在百度网盘上,每个工作日更新。

下载链接:

百度网盘

我们打开下载链接看一下,里面有很多文件,读者可以按需下载。

..

其中形式如 yyyy.trade.btx 的文件就是 yyyy 年全部 A 股的日线行情。stock.btx 则是所有股票的列表和基本信息,包括股票代码、名称、所属行业、上市日期、退市日期等。

其它文件,我们后续会根据课程内容逐步介绍。

2.2 K 线数据

量化交易最核心的数据,就是每日的股票交易数据,即日线行情,也称 K 线数据。

例如,我们下载 2025 年 A 股的日 K 线数据 2025.trade.btx。

..

细心的读者可能已经发现,下载文件的格式为 btx,而并非我们常见的 csv 或 Excel 文件。没错 btx 是 SPL 的特有二进制格式。

btx 称为集文件,是一种简单、开放的二进制文件格式,它不仅覆盖了 csv 文件的所有功能,而且性能要比 csv 文件快 4-5 倍。

SPL 可以支持 btx 文件的操作计算,也支持各种数据源与 btx 之间的相互转换。

例如我们将k_data.csv转换成btx格式:

A
1=T("C:/Users/29636/Desktop/tmp/k_data.csv")
2=T("C:/Users/29636/Desktop/tmp/k_data.btx":A1)

A1 用 T 函数读取 csv 文件

A2 将 A1 写入到k_data.btx中。T()函数除了可以用来读取数据,还可以用来写出数据,冒号后面的参数是要写出的内容。

当然反过来也可以:

A
1=T("C:/Users/29636/Desktop/tmp/k_data.btx")
2=T("C:/Users/29636/Desktop/tmp/k_data1.csv":A1)

A1 读取btx文件

A2 将A1写入到k_data1.csv。

下面重点来讲一下如何读取btx数据。

直接读取数据

当数据量不大时,可以直接用 T() 函数打开 btx 文件:

A
1=T("D:/2025.trade.btx")

..

当数据中的字段比较多时,也可以将右边显示计算结果的区域拖拽到界面下方:

..

股票日 K 线的数据结构为:

字段名字段类型含义
codeInteger股票代码
tdateDate交易日期
openDouble开盘价
closeDouble收盘价
lowDouble最低价
highDouble最高价
volumeLong成交量
amountDouble成交金额
pfactorDouble当日价格复权因子

需要注意的是,股票代码在这里用了整数,而不是常规的字符串,这里 1 表示代码 为 000001 的股票,2 表示代码 000002…。这样表示并不会有歧义,而整数的运算性能会远高于字符串。

复权因子的意义在后面会讲到。其它字段,看一下说明都容易理解是什么意思,就不再详细解释了。

用游标读取数据

T函数会将整个文件的数据都读入内存,当数据量较大时,会占用很大空间,内存不够就可能溢出。

SPL提供了可以用游标流式读入文件的方式:

A
1=T@c("D:/2025.trade.btx")
2=A1.fetch(100)

A1 用 T@c() 将文件读成游标。

A2 取出前 100 条数据。

T函数里的 @c 又是个什么东西?

@c这种写法是 SPL 发明的,称为函数选项。理论上讲,T 和 T@c 是两个无关的不同函数,但这两个函数非常像,都是用来读取数据的,参数也一样,完成的功能虽然不完全相同,但也很类似。这种时候,我们更愿意把其中一个看成是另一个的变种,在起名时使用相似的名字,这样对于理解和记忆都会更方便一点。

但这两个函数总还是有不同,需要区分。在 SPL 中我们用相同的名字来命名这两个函数,而用函数名后 @后面的字符来区分,好象一个函数有了不同的模式:没有 @c 时,T 函数返回序表,有 @c 时返回游标。

SPL 中这种有选项的函数非常多,而且选项常常还不只一种。比如 T 函数还有个 @b 的选项,表示当文件内容无标题时自动添加标题。而且,这些选项还可能组合使用,并且书写没有次序,如 T@bc 和 T@cb 是一样的。

SPL 的函数选项能大大简化代码的编写。目前其它程序语言都没有这种语法,有些语言的函数也有选项概念,但一般是作为一个独立参数存在的。我们后面还会看到,在结构化数据处理时,参数会有很复杂的情况,把选项信息作为参数传递并不方便。

言归正传,A1 格中 T@c() 会返回一个游标对象,并不会真正的读取数据。

..

要想看到数据,需要用 fetch() 函数从游标中把数据取出来,如 A2 格中的代码,参数 100 表示取出前 100 条数据。这样既能查看数据又防止了内存溢出。

..

当然,只读前 100 条只是看一眼而已,并没什么实际用处。

我们通常会读取某支股票数据,也就是在游标读取数据过程中过滤:

A
1=T@c("D:/2025.trade.btx")
2=A1.select(code==600000)
3=A2 .fetch()

A1 将文件读成游标。

A2 选出代码为 600000 的股票数据。

A3 取出 A2 格里的数据。

select为选出函数,表示筛选出 code 值等于 600000 的数据。注意在 SPL 里判断是否相等的运算符是”==”而不是”=”,“=”在 SPL 里表示赋值运算,这和有些程序语言的使用习惯不太相同,使用时要注意区分。

在游标上执行 select 函数后返回值仍然是个游标。因为游标对应的是大数据,选出后的结果仍然可能是大数据,内容会溢出,所以,游标上的 select 函数仍然返回一个游标。

A2格 select 函数返回的是一个游标,要想查看结果怎么办,还是用 fetch,这里我们知道一支股票的数据并不大,因此可以全部取出。当 fetch() 参数为空时,表示取出全部数据。

..

调用脚本读数

知道了如何用游标读数,下一步我们来写一个更通用的程序,可以读取任何多支股票任意时间段的 K 线数据。为了使用方便我们可以将一些通用的程序保存为脚本,需要时直接调用。

脚本是一个被保存成扩展名为.splx 的文件,它的功能和库函数类似,可以随时被调用。并且和函数一样,脚本也需要有输入参数和输出结果。

通常在编写一个脚本之前首先要明确它的功能,即定义好输入参数和输出结果是什么。

例如这里我们希望输入一支或多支股票的代码,以及要查询的时间范围,就可以读出对应的股票数据。

可以将脚本参数定义如下表:

cl股票代码序列,如[600000,600001];可以为单值,如600000;也可以填空表示全读
start开始日期,如2024-01-01
end截止日期,如2024-12-31。end为空时截止到当前日期

这里 cl 参数用到了一种新的数据类型序列,序列相当于 C 语言中的数组,用来表示一组数据。序列和序表是 SPL 中两种最基本的数据类型。

明确了输入参数和输出结果,我们来创建脚本。

(1)在界面新建一个文件

..

(2)使用程序菜单下的网格参数功能,会跳出一个对话框,添加参数如图。值那一列是指缺省值,调用这个脚本时如果不写参数,就会用这个缺省值。

..

..

(3)在格子区编写脚本代码如下:

A
1=end=ifn(end,now())
2=to(year(start),year(end)).(file(~/".trade.btx")).select(~.exists())
3=cl=if(ifa(cl), cl.sort(),cl)
4=if(cl, A2.( ~.iselect@b(cl,code)), A2.(~.cursor@b()) )
5=A4.merge(code,tdate).select(tdate>=start && tdate<=end)
6return A5.fetch@x()

这段代码对于 SPL 的初学者来说,可能有点难,暂时读不懂也没关系,现在我们只要先学会如何用即可。

(4)脚本保存为 loadkday.splx,此脚本可返回一支或多支股票任意时间段的 K 线数据。

注意:运行此脚本之前,要将下载的所有yyyy.trade.btx 文件放到同一路径下。并且设置工具→选项→环境菜单中的主路经和寻址路径。主路经设置为yyyy.trade.btx 文件的存储路径,寻址路径设置为脚本 loadkday.splx 文件的存储路径。事实上,为了使用方便我们可以把所有的数据文件和通用脚本都放到主路径和寻址路径下。配置了主路经和寻址路径,在程序中就可以用相对路径来读取文件或脚本了。

..

脚本整理好后,就可以调用了。

例如,调用脚本读取一支股票的 k 线数据:

A
1600000股票代码
22024-01-01开始日期
32024-12-31截止日期
4=call("loadkday.splx",A1,A2,A3)调用脚本,返回600000股票2024年数据
5=call("loadkday.splx",A1,A2)end为空,截止到当前日期

call()函数用来调用脚本,返回结果集,第一个参数为要调用的脚本文件,后面参数依次为脚本的参数。

运行效果:

..

读取多支股票数据:

A
1[300632,301115,603216]股票代码序列
22024-01-01开始日期
32024-01-10截止日期
4=call("loadkday.splx",A1,A2,A3)调用脚本,A1序列中的股票
5=call("loadkday.splx",A1,A2)end为空,截止到当前日期
6=call("loadkday.splx",,A2,A3)cl为空,读取全部A股

当要读取多支股票数据时,股票代码要写成一个序列,如 [300632,301115,603216]。

再例如,还可以读取某类股票,如读取所有银行股:

A
1=T("stock.btx").select(industry=="J66货币金融服务").(code)读取银行股票代码列表
22024-01-01开始日期
32024-01-10截止日期
4=call("loadkday.splx",A1,A2,A3)调用脚本,返回银行股数据
5=call("loadkday.splx",A1,A2)end为空,截止到当前日期

这里用到了 stock.btx,在下一小节中我们会具体讲解,这里只需知道 A1 返回的是所有银行股的代码序列 [1,617,1227……]

运行效果:

..

对于经常使用的脚本,也可以用 register 登记成一个函数来使用。

代码示例:

A
1=register("Load","loadkday.splx")将脚本登记为函数
2=T("stock.btx").select(industry=="J66货币金融服务").(code)读取银行股票代码列表
32024-01-01开始日期
42024-01-10截止日期
5=Load(A2,A3,A4)返回开始到截止日期的数据
6=Load(A2,A3)end为空,截止到当前日期
7=Load(,A3,A4)cl为空,读取全部股票

register()可以将脚本文件登记为函数,之后该函数便可以在代码中使用,如 A1 格中的代码表示将脚本文件 "loadkday.splx" 登记为函数 Load(),在后面的代码 A5、A6、A7 格中就可以通过函数名调用。

运行效果同上。

实际上在一个项目中通常会有很多个脚本,每次都要写一堆 call 或 register 有点麻烦,我们可以将一个项目中用到的所有脚本都登记到一个单独的脚本中,这样只要在每段程序开头执行这个脚本就可以了,避免了重复劳动。

这种脚本登记的工作后续还会再有,我们把这些事都写到一个统一的脚本 init.splx 中

A
1>register("Load", "loadkday.splx")

>开头的单元格称为执行格,表示会执行单元格里的内容。后面遇到了我们还会再细讲,这里有个初步理解就行。

在使用的脚本前调它一下,这些函数就有了定义:

A
1>call("init.splx")将脚本登记为函数
2=T("stock.btx").select(industry=="J66货币金融服务").(code)读取银行股票代码列表
32024-01-01开始日期
42024-01-10截止日期
5=Load(A2,A3,A4)返回开始到截止日期的数据
6=Load(A2,A3)end为空,截止到当前日期
7=Load(,A3,A4)cl为空,读取全部股票

之后有更多需要登记的脚本时,只要补充 init.splx 的内容即可。

2.3 股票列表

在选股时,比较常用的数据还有股票代码列表。

文件名称:stock.btx。

提供股票基础信息,包括股票代码、名称、所属行业、上市日期、退市日期等。

数据示例:

..

数据结构:

字段名字段类型含义
codeInteger股票代码
nameString股票名
exchangesString中国三大交易所的简写
industryString所属行业
ipodateDate上市日期
outdateDate退市日期

例如我们需要查找所有银行股代码,可以根据行业信息来筛选,代码为:

A
1=T("stock.btx").select(industry=="J66货币金融服务")
2=A1.(code)

A1 筛选出所有行业信息等于 "J66 货币金融服务" 的数据,结果返回序表

..

A2 对每行数据取 code 值,结果返回序列。

..

A.()是循环函数,表示对 A 的每一个成员计算括号里的表达式。循环函数也是 SPL 特有的发明,它的语法非常简洁高效,很多复杂的计算用循环函数很容易就能实现,这些后面用到了我们会具体讲。

再来一例,在股市中有一类股票叫做 ST 股票。

ST股票(Special Treatment Stock),即特别处理股票,是指因为经营不善等各种因素而发生了连续亏损的股票。上市公司股票被实施退市风险警示的,在公司股票简称前冠以“*ST”字样,被实施其他风险警示的,则冠以“ST”字样,俗称“戴帽”,这两类股票统称为 ST 股票。

通常我们要回避这些“地雷股”(ST 股票),可以用如下代码来清洗掉 ST 股票。

A
1=T("stock.btx")
2=A1.select(!pos(name,"ST"))

A1 打开股票列表文件,如图可以看到数据中含有 ST 股票

..

A2 筛选出名称中没有“ST”的股票。

pos()函数可以判断 name 中是否包含 ST,pos()是位置查找函数,将返回字符串"ST"在name中的位置,有就返回一个数值,没有就返回null。这里,我们只需关心它是不是null。运算符! 表示逻辑非运算,表示不是的意思,相当于 Excel 中的 NOT,取反值。!true = false,!false = true。对 pos 的结果取反值就选出了非 ST 股票数据,实现了清洗目标。

如图,可以看到代码为 4 和 5 的 ST 股票被清洗掉了。

..

2.4 绘制图形

在股票投资领域,技术图形分析也是投资者不可或缺的重要手段。通过对股票价格和成交量等数据的图形化展示,技术图形能够为投资者提供丰富的信息,帮助他们做出更明智的投资决策。

SPL本身提供了绘制静态图形的功能,为了方便随时选取时间区间观察,我们需要动态效果的图形,这可以借助 echart 来完成。

1. 首先下载 stockchart.jar,放到SPL安装路径…\raqsoft\esProcDesk\lib 下,然后重启。

stockchartjar

2. 类似地,我们写个通用脚本 draw.splx。

脚本代码:

AB
1=cols= x+","+y1+if(len(y2)>0,","+y2,"")
2=data.new(${cols})
3=if(year(data(1).field(x))==year(data.m(-1).field(x)),"MM-dd","yy-MM-dd")
4=A2.run(~.field(x, string(~.field(x),A3)) )
5=y1.split@c()=y2.split@c()
6=invoke(com.raqsoft.stockchart.LineChart.drawHtml,A4,[x,A5,B5])
7=file(htmlfile:"utf-8").write(A6)

类似地,这段代码也不详细解释了,感兴趣的同学可以自己找 SPL 参考书理解。这里我们还是先学会如何调用它就可以了。

脚本参数:

data序表,要绘制图形的列
x字符串,x轴字段名,如"tdate"
y1字符串,y1轴字段名,如"close"或"close,close_MA_5"
y2字符串,y2轴字段名,如"volume",或"volume,volume_MA_5"。y2也可以为空,为空时只有一个y轴
htmlfile动态图文件路径

此脚本可生成双轴或单轴折线动态图 html 文件。

将这个脚本也登记到 init.splx 中:

A
1>register("Load", "loadkday.splx")
2>register("Draw", "draw.splx")

3. 调用脚本,生成动态 html 文件。

例如绘制 600000 股票 2024 年 close 动态走势图。

A
1>call("init.splx")
2600000
32024-01-01
42024-12-31
5=Load(A2,A3,A4)
6=Draw(A5,"tdate","close",,"600000.html")

A1 执行初始化脚本,将脚本登记为函数

A2:A5 读取股票数据

A6会生成 600000.html 文件,用浏览器打开该文件即可看到动态图。

..

F1C100s FEL模式烧录全解析:从USB握手到SPI Flash稳定启动 FEL模式是全志SoC(如F1C100s)启动链路中的关键底层机制,本质是绕过CPU主控、直接与ROM Bootloader通信的USB协议级交互,而非传统固件升级。其原理依赖BOOT引脚电平组合触发、标准USB Mass Storage Class枚举及确定性物理层握手。技术价值在于提供无需SD卡或UART引导的最小可信启动入口,支撑嵌入式系统安全烧录与量产固化。典型应用场景包括荔枝派Lichee Nano等无SD卡槽设备的首次启动、SPI Flash固件更新及产线自动化烧录。本文聚焦F1C100s平台, 阅读详情

相关推荐

分块稀疏压缩感知BCS实战:DDWT+SPL图像重建

压缩感知(CS)是一种突破奈奎斯特采样定理的信号获取范式,其核心在于利用信号的稀疏性实现欠采样重建。分块稀疏压缩感知(Block Compressive Sensing, BCS)进一步引入块结构先验,将全局ℓ₁优化升级为混合范数‖·‖₂,₁最小化,显著提升高维图像(如MRI、遥感图)的重建保真度与抗噪能力。技术价值体现在降低采样率需求、缓解大规模优化计算瓶颈,并增强块间结构一致性。典型应用场景涵盖医学影像快速采集、卫星图像低带宽传输及边缘设备实时重建。本文聚焦BCS落地关键——以双密度小波变换(DDWT)

weixin_34246529的博客 248

SPL量化课----第 2 章 理解 K 线数据

理论上讲,T和T@c是两个无关的不同函数,但这两个函数非常像,都是用来读取数据的,参数也一样,完成的功能虽然不完全相同,但也很类似。实际上在一个项目中通常会有很多个脚本,每次都要写一堆call或register有点麻烦,我们可以将一个项目中用到的所有脚本都登记到一个单独的脚本中,这样只要在每段程序开头执行这个脚本就可以了,避免了重复劳动。在SPL中我们用相同的名字来命名这两个函数,而用函数名后 @后面的字符来区分,好象一个函数有了不同的模式:没有 @c 时,T函数返回序表,有@c 时返回游标。

smilejingwei的博客 1083

51单片机实现符合IEC标准的A计权噪声测量仪

声压级(SPL)测量是环境监测与工业安全的基础技术,其核心在于将麦克风输出的微弱模拟信号准确转换为符合国际标准(如IEC 61672-1)的A计权分贝值。该过程涉及信号链设计、硬件滤波与数字A计权算法协同、ADC精度控制及物理校准等关键环节。A计权滤波旨在模拟人耳听觉响应,需在资源受限的8位单片机(如STC89C52RC)上以定点IIR方式高效实现;而真实声压级还原则依赖灵敏度标定、温度补偿与动态范围压缩等工程化处理。典型应用场景包括车间噪声监控、教学实验平台与便携式环境评估设备。本方案聚焦嵌入式端到端落地

weixin_29169899的博客 302

SPL量化课---第 3 章 复权数据

这句代码中join的参数较长,我们以分号为间隔分两部分来看,先看第分号前面的部分tdate, A6:tdate, close:close_f,第1个tdate是A8的关联字段,第2个tdate是A6的关联字段,close是A6里要拼接的字段表达式,:close_f表示将字段名设为close_f,因此分号前面这部分的代码就表示将A8的tdate和A6的tdate进行关联,并将A6中的字段close命名为close_f拼接到A8上。结果返回的是一个两层结构的数据,外层是序列,如左图可以看到数据被分为了3个组;

smilejingwei的博客 1527

在Unity中为Sentis部署的YOLOv8模型集成NMS层并实现移动端性能优化

本文详细讲解了在Unity中利用Sentis部署YOLOv8模型时,如何通过代码动态集成NMS层以解决移动端性能瓶颈。文章核心在于避免导出时绑定NMS,转而使用Sentis原生API在运行时高效构建NMS处理流程,并分享了关键的GPU数据操作与移动端性能优化技巧,确保模型在移动设备上流畅运行。

p1q2r的博客 1095

Dify实战应用指南(上传需求稿生成测试用例)

摘要: Dify是一款开源大语言模型应用开发平台,通过低代码/无代码方式支持AI应用开发。平台提供五种核心应用类型,包括聊天助手、文本生成、Agent、ChatFlow和Workflow,适用于不同场景。本文以ChatFlow为例,演示如何上传需求稿自动生成测试用例。通过条件分支、文档提取器和LLM设置,实现从需求文档到测试用例的自动化转换,显著提升测试效率并降低人工误差。该方案适用于需要快速生成测试用例的软件开发场景,尤其适合非技术人员使用。

Linda的自动化测试之旅 2745

SPL 量化课程

当前市面上的量化交易课程存在一个根本性矛盾:课程设计者其实知道现有技术体系对初学者过于复杂,却又无力改变这一现状。专业量化交易使用的Python等编程语言和回测框架,原本是为专业人员设计的,需要数百甚至上千行代码才能实现基本功能。而课程设计者大多不具备开发简化工具的能力,只能在这些复杂系统的基础上进行"削足适履"式的教学。这种妥协导致了一个尴尬的结果:学员花费大量时间学习后,要么被困在编程语法细节中,要么只能理解抽象原理而无法实操。

smilejingwei的博客 1548

YALMIP介绍及怎么在Matlab中加YALMIP、SDPT3

目录YALMIP简介怎么在Matlab中加YALMIP?1. 创建决策变量:2. 添加约束:3. 参数配置4. 求解怎么在MatlabR2019a中加YALMIP?1.下载工具包2.放置工具包3.添加路径4.测试安装结果怎么在MatlabR2019a中加SDPT3? YALMIP简介 怎么在Matlab中加YALMIP? yalmip是一位“集大成者”,它不仅自己包含基本的线性规划求解算法,比如linprog(线性规划)、bintprog(二值线性规划)、bnb(分支界定算法)等,他还提供了对cpl

m0_51431440的博客 2万+

第 8 章 学会用指数----SPL量化编程课

本文介绍了如何获取指数数据(如日线行情)、编写脚本进行策略与指数的收益对比(如动态图表分析),并详细讲解了“相对市场波动率”等需结合指数数据计算的指标实现方法。通过函数EXT将指数数据拼接至股票K线,为量化分析提供基础。最后以沪深300为例,演示了250日波动率指标的计算流程。

蒋步星 1205

瑞芯微RK3568开发板实战:Android11系统parameter.txt文件配置全解析(附常见问题排查)

本文深入解析了瑞芯微RK3568开发板在Android 11系统下parameter.txt文件的配置要点与实战技巧。作为BootLoader启动阶段的核心蓝图,该文件决定了硬件初始化、分区布局及电源管理。文章详细拆解了身份标识、GPIO控制(PWR_HLD)、命令行参数及分区表等关键字段的配置逻辑,并针对RK3568平台与Android 11特性提供了专项适配策略,最后附带了启动失败、分区异常等常见问题的深度排查方法。

php55的博客 897

Test软件:Keysight二次开发_(1).Keysight软件开发概述

VISA(Virtual Instrument Software Architecture)库是Keysight提供的一种标准化的仪器控制接口,支持多种编程语言和开发环境。仪器通信:通过GPIB、USB、以太网等接口与仪器进行通信。数据采集:从仪器中获取测量数据。命令发送:向仪器发送控制命令。错误处理:处理通信过程中可能出现的错误。测试自动化是指通过编写脚本或程序来自动执行测试任务,从而提高测试效率和减少人为错误。Keysight的测试设备和仪器支持多种编程语言和开发环境,使得测试自动化变得相对容易。

2401_87715305的博客 1360

第 3 章 复权数据----SPL量化编程课

股票复权是调整历史价格数据的技术手段,主要用于消除分红、送配股等行为导致的股价断层,使历史走势更连贯。复权分为前复权(保持最新价格不变调整历史数据)和后复权(保持早期价格不变调整后续数据)两种方式。 计算过程采用当日复权因子而非累计因子,避免远距离数据失真。通过SPL编程可实现自动计算,实际应用中可将复权功能整合到数据读取脚本,通过参数灵活选择复权方式,并优化计算效率。复权数据对量化分析至关重要,能提供更准确的价格可比性。

蒋步星 1422

结构函数分析与 JESD51-14 标准详解

结构函数(Structure Function)是将器件瞬态热响应曲线(冷却曲线)通过数学变换,转换为热阻(Rth)与热容(Cth)沿热流路径一维分布的图形化分析方法。它能“看到”热量从结(Junction)到壳(Case)或环境的过程中,经过每一层结构时的热学特性。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 57

第 10 章 仓位管理----SPL量化编程课

本文介绍了量化交易中的两种仓位管理方法:固定金额法和固定比例法。固定金额法采用每次投入固定金额进行交易,操作简单但灵活性不足;固定比例法则按账户资金的固定比例投入,能随账户价值自动调整仓位。文章以MACD背离策略为例,详细展示了两种方法的代码实现过程,包括数据读取、买卖信号处理和收益统计等关键步骤。此外,还介绍了如何将策略信号导出为CSV文件,便于实际交易中参考使用。这些方法帮助交易者在不同市场环境下平衡风险与收益,实现稳定增长。

蒋步星 1392

车载网络测试实操源码_使用CAPL脚本实现安全访问解锁,并模拟各种测试场景

在车载诊断中,我们经常会使用到安全访问解锁,常见的场景包括软件刷写前、通过2E服务写入某个DID前、通过31服务执行某个例程前等,都必须先通过27服务进行安全访问,解锁相应安全等级后才能执行上述操作。在开发调试或测试时,有时候需要模拟正常的安全解锁、安全访问秘钥错误、连续多次请求安全访问等,手动操作极为不便。本文将介绍如何使用CAPL脚本实现安全访问解锁,并模拟各种测试场景。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 1201

EPO: Hierarchical LLM Agents with Environment PreferenceOptimization

长期决策和规划任务依然是基于大型语言模型(LLM)的智能体面临的一大挑战(Valmeekam 等,2023;Liu 等,2023;Silver 等,2024)。这些任务需要智能体进行多步骤的规划,同时保持行为的一致性和目标导向,这对于通常被设计用于即时和局部预测的大型语言模型来说颇为困难。此外,针对具身智能体的大型语言模型微调面临的一个关键难题是大规模标注数据的需求(Reed 等,2022)。

qq_52053775的博客 142

第1章 工具准备----SPL量化编程课

摘要:SPL是一款免费的数据处理工具,安装简便,界面类似Excel。用户可在格子区编写代码(每个格子一句代码),右侧实时显示计算结果。支持变量自动命名和顺序执行功能。SPL能读取CSV、TXT等文件,将数据转换为内存中的序表(类似DataFrame),提供T()函数根据扩展名自动识别文件类型。文中演示了如何用SPL读取股票交易数据CSV文件,并介绍了序表的基本概念(字段、记录)。该工具操作直观,适合数据处理任务。

蒋步星 596

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

用 SPL 量化工作台实现海龟策略

海龟策略是一种趋势跟踪交易策略,基于唐奇安通道确定买卖信号。策略核心是在股价突破20日最高价时买入,跌破20日最低价时卖出。通过SPL量化工作台可快速实现该策略,并进行回测优化,结果显示该策略在天齐锂业2021年表现优于沪深300指数。策略优势在于自动调整通道宽度,适合趋势行情,但在震荡市中可能出现假信号。使用者可通过调整参数周期、加入过滤条件或分步加仓等方式优化策略。该工具无需编码,即时反馈,是量化交易入门的便捷选择。

蒋步星 1734

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

用 SPL 量化工作台实现双均线策略

摘要:SPL量化工作台是一款基于开源技术SPL的量化策略工具,帮助普通投资者轻松实现策略设计和回测。该工具具有零门槛、即时反馈和数据齐全的特点,使初学者也能快速上手量化交易。虽然手机端体验有待改进,但其直观的可视化功能和简便的操作方式,为投资者提供了一个实用的量化入门解决方案。文章以海尔智家(600690)为例,演示了双均线策略的完整操作流程:从数据获取、均线指标设置(MA5/MA10),到买卖信号生成(金叉买入/死叉卖出),最后进行回测验证。

蒋步星 1066

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

SPL量化课程---第 1 章 工具准备

CSV是一种很常见的文件格式,表示 Comma Separated Values,是一种纯文本文件,用于存储表格和电子表格信息。这里的每个格子都是一个变量,可以当变量名使用如 A1,B1,这样的好处就是不用起很多临时变量名了。并且格名还会自动变迁,例如下图,在首行新插入一行,格名就变为了 A2 和 B2。点击左上角新建菜单,界面左边会生成一个格子区,代码就写在格子里,一个格子一句代码,就像写 Excel 公式一样。再来看下如何用 SPL 读取文件,比如,有一支股票的交易数据文件,格式为 csv。

smilejingwei的博客 400

SPL量化EMA实战:口径统一、增量更新与回测避坑

指数移动平均线(EMA)是以衰减系数对历史价格做几何加权的时间序列平滑方法,核心在于用递推式保留有限状态即可完成O(1)增量更新。相比简单均线,EMA的参数连续、滞后平滑,适合趋势过滤、交叉信号与MACD等复合指标。在量化策略中,EMA的初始化口径、复权方式、窗口函数与状态变量实现差异会直接影响信号时点和回测可信度;实时更新、补数重算与成本假设又决定其工程落地质量。围绕SPL量化场景,从参数换算、半衰期、预热区到回测成交与异常监控,建立可复现、可校验的EMA计算链路,才能让趋势类信号在研究与实盘中保持一致。

weixin_31423955的博客 208

SPL量化EMA指标实现:递推原理、预热期与回测避坑

移动平均线是量化交易与技术指标开发中的基础组件,EMA通过平滑系数对价格序列做指数加权,其本质是逐K线递推而非窗口求和,记忆衰减特性使其在趋势跟踪中兼顾灵敏与平滑。理解α=2/(N+1)、首根K线初始化、预热期和跨周期对齐,是保证回测与实盘一致的关键。EMA计算代价低、状态管理简单,常用于双均线、MACD、ATR通道和自适应均线等策略场景。围绕SPL脚本执行模型,梳理内置函数、变量自维护和窗口近似三种写法,并排查信号闪烁、数值不一致与滑点撮合问题,可形成可复现的量化策略工程实践。

weixin_42628846的博客 235

数字音频基石:采样率与量化位深实战指南

数字音频的本质是将连续声波转化为离散数据,核心在于采样(时间维度离散化)和量化(幅度维度分级)。采样率决定可捕获的最高频率与瞬态响应精度,遵循奈奎斯特-香农定理;量化位深则定义动态范围与本底噪声水平,直接影响信噪比和削波容限。二者协同构成音频的‘时空分辨率’,不仅关乎CD、流媒体等格式兼容性,更深刻影响录音保真度、DAW处理稳定性及母带交付质量。实际应用中,96kHz/24bit已成为专业录音的事实标准,而盲目追求更高参数反而可能因ADC性能下降或系统负载增加得不偿失。本文结合ADC芯片选型、DAW设置、电

weixin_34221036的博客 326

10个关键指标揭秘:Chain-of-Thought Hub如何定义AI推理能力

在大语言模型快速发展的今天,如何准确评估模型的推理能力成为AI研究的关键问题。Chain-of-Thought Hub作为一个开源评估平台,通过10个核心指标系统化地衡量大语言模型的复杂推理能力,为开发者和研究者提供了权威的基准测试工具。 ## 🔍 什么是Chain-of-Thought Hub? Chain-of-Thought Hub是一个专注于评估大语言模型复杂推理能力的开源项目。它基

gitblog_01144的博客 389

ESP32-S2轻量级AI音箱硬件重构与边缘语音交互实现

边缘AI设备正从云端依赖走向本地智能,其核心在于在资源受限MCU上实现低延迟、低功耗的语音感知与交互闭环。本文围绕轻量级语音唤醒、MFCC特征提取、TinyML模型部署及安全API通信等关键技术展开,深入解析如何利用ESP32-S2内置AES/SHA硬件引擎保障密钥安全,结合PSRAM加速推理、I²S高保真音频链路设计与双缓冲OLED交互等工程实践,构建成本低于15元、待机电流<5mA、唤醒响应≤300ms的可量产AI音箱原型。适用于智能硬件开发、嵌入式AI教学及TinyML落地验证场景。

z4a5b6的博客 689

RA8D2 ADC16H时序与配置实战:从SAR到混合模式的高精度数据采集

模数转换器(ADC)是嵌入式系统中实现模拟信号数字化的核心器件,其性能直接影响系统的测量精度。ADC的工作原理基于采样、保持、量化和编码,通过不同的转换架构(如SAR、Sigma-Delta)在速度、精度和功耗之间进行权衡。在精密测量、传感器信号采集等场景中,高分辨率ADC的价值尤为突出,它能有效提升系统的信噪比和动态范围。瑞萨电子RA8D2微控制器集成的ADC16H模块,正是一款支持16位分辨率的高性能ADC,其提供的SAR模式、过采样模式和混合模式,为工程师应对复杂信号处理需求提供了强大的灵活性。深入理

weixin_29165725的博客 86
上一篇: 第1章 工具准备----SPL量化编程课
下一篇: 第 3 章 复权数据----SPL量化编程课
jiangbuxing
博客等级 码龄16年 110粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值