Python 算法交易实验75 QTV200后续想法梳理

说明

在第一步获取数据源,然后进入Mongo(第一个数据节点)开始,QTV200的数据流体系就开始动了。后续用多少时间完成不太好确定,短则数周,长则数月。毕竟有过第一版实验的基础,应该还是可以做到的。

下面就是天马行空,简单的想想,梳理一下,后续会更清楚写。

内容

1 第一版做了什么?

第一版只在很有限的几个标的上实验,主要就是沪深300、中证500、券商和医药,还有就是很早之前(甚至早到研究生论文)关注过的军工ETF。

在获取数据后,我快速做了两个版本。一个版本完全是基于惯性(回归),另一个版本是基于动量做的。后来证明,惯性的方法甚至不一定比动量的差。大概是因为ETF本身已经形成了较为稳定的分布。

后来进行了回测,以及通过短信通知的操作方式进行实盘实验。最初我认为,模型的决策能力比人强,这个本身没有错;差别点在于,人类的操盘手,他们进行交易决策时所依赖的数据与模型的并不相同。很多时候是在模式的状态下工作的。所以,即使模型的决策能力比人强,但是由于数据维度的“不公平”,所以很难说模型一定超过人类。

但是anyway,在去年到今年一年的时间里,模型一直以回测状态在运行,虽然没有很高的收益,但是没亏钱,在这个行情下说不定超额收益蛮高的(沪深300亏了20个点吧)。当然,我觉得qtv本身有很大的提升空间,即使在过去一年这样的行情下,我认为仍然应当取得稳定收益。从实盘的观测上看,这是存在可能性的。这也是qtv200的目标和意义。

第一版的意义在于真正意义上开始了这件事

其实从我的眼光来看,第一版从技术上讲是不及格的。其中既包括了当时所用的技术架构,也包括了从业务上看不具备足够的单量和盈亏比表现。自我批判和自我否定是必要的,但绝对不是去抹掉第一版的成果 ,而是要充分吸收当时做的好的地方,然后利用现在新的工具,以及实际操作之后的经验,来更上一层楼。

架构上,当时用了所谓的ADBS方法,也就是队列+mongo+apifunc的方式。这种方式从表现上看,IO上过于低效了,在流程上也比较冗杂,是基于标的一个个的建立mongo数据库和stream来进行的。现在通过flask-celery提供异步worker,会完全解决掉IO问题,至少支持60~100个标的没有问题。这肯定会解决掉单量不足的问题。

无可以持续改进的数据基础。这可能是较为隐性的问题,当我有灵感,想要再次给这个系统加buff的时候,突然发现是无从下手的。这体现了在数据流设计上的缺失 ,没法进行扩展和修改。现在通过UCS,从机制上,所有的工作已经被统一了。另外,基于flask-celery-aps形成的数据流体系,也使得改造变得尤其简单。(刚刚做完从clickhouse - mongo的转变,丝滑的不可思议) 基于新的数据流系统,持续改善以及分布式执行都将得到大幅提升。

模型的机制缺陷。最初我只是简单的做判别模型,一个潜在的风险是什么呢? 具备大涨可能性的同时,也具备大跌的可能性。所以最终策略还能不亏钱,已经算是还蛮厉害了。(毕竟每个订单都存在0.5%的费率损失) 这个将在qtv200得到很大的改善,但有很多更高级的方法,现在我尚无工程结论。

没有区分模式。最初我是想寻找一个子空间,让模型处在更高的概率区间运行的,但是失败了。我记得主要的原因是一旦筛选了概率,那么数据支持度就会不够。现在想想,我建模的时候是基于空间的,但模式并不一定非得基于空间啊,应该可以基于时间,或者时空。

回测机制效率低。具体的细节我没有再去查探了,应该是这样的。而且很多同质的信号。但是,这种类似与随机优化的方式,也还是值得在精神上肯定一下的。

交易机制有bug。发现的时候已经太晚了,而且很不好改,所以也就放弃了。主要是在最大持有和卖出的时间上有问题,要么周期未到,要么连消息都漏了,要么就是收盘后给我发一个当前3:00平仓的信号,简直无语。主要是自己做的,没其他人可抱怨,都怨我,哈哈。

以上是我觉得不及格原因,没有夸张。但反过来想,这样都能在这种行情下不亏钱(甚至还略有盈余),所以这事靠谱啊。

第一版并不是一无是处的,除了勇气之外,技术有一些地方可以肯定,并且我也打算复用。

变量的特征处理标准化。 当时时间紧任务急,我最担心的是开发和生产时的特征处理不一致,所以使用了VV(Var & VFrame)对象来确保特征的统一生成。最终确实是一种不错的方法,即使操作稍显冗余,但也是workable的,并且这种模式很容易向智能(Agent)方法发展,因为中间的过程都是参数化操作。

模型标准对象。 我将模型的预测和使用封装为一个基类对象,可以更好的流水线生产模型。我觉得这次可以稍微先用一下,看有没有机会用更好的方式进行封装,或者进行改造(例如和MLR方法对接)

2 现在又有了什么

马斯克说,创新并不总是创造出全新的东西,在新的环境下,即使是把老的东西用新的方法再做一次,也是创新。我深以为然。

我一直是在遵循第一性理论,基于我对一件事(比如量化)的想象,不断的去学习、实验,来找到那个第一性答案。实际能看到的变化是,我的工具、方法一直在按一种线性的方式前进。这还是挺让我感到欣慰的,毕竟目标还是0,过程中能看到一些实证还是挺好的。

在过去的一年里,肉眼可见的变化还是很多的:

  • 1 异步任务系统。简单点说就是flask-celery-aps, 过去定位有问题,想用这个来进行通用的分布式,这是不太行的。但是作为IO的worker,这个是非常合适的。这个系统可以帮助我更有效的构建数据流(大幅减少时间),使得在当前硬件下,可以支持足够etf的吞吐。同时,这使得分布式工作变得自然。
  • 2 算力租用机。在过去的一年里,算力租用这件事对我变得非常自然,我也至少对3个平台的租用和部署比较熟悉了。这对我之后进行超大规模计算提供了算力基础。
  • 3 clickhouse。这个很有用,至少有两方面:块读取和统计分析。这个数据库可以提供近乎内存的读取和计算速度。
  • 4 pydantic。 过去没有重视,随着大模型的研究,这个浮出水面。这可以大幅简化配置、数据规范化传递、数据节点定义等工作。既有编程上的帮助(简单),也有结构上的帮助(数据流中数据节点的具象描述)。
  • 5 GlobalFuncs & GFGoLite & Basefuncs: 最初是全局函数,后来因为怕概念太大没等设计好就荒废了,所以迅速弄了GFGoLite,一个轻一点但是马上能用的服务,后来又觉得本地包也需要(和GFGoLite几乎同源),所以有了这么几个形态。这些工具既能提供编程帮助,也蕴含了规范约束(UCS),还有想未来智能演化的潜质(间接使用、参数化调用、Agent)
  • 6 GlobalBuffer。这个可以作为worker的元数据缓存,确保每次的运行是可以有状态的。
  • 7 强化学习。这块强行粗浅的入了门,算是战略部署。最后在业务上体现的系统效果是通过强化学习来完成的。
  • 8 关于模型和策略的方面的新想法。一个想法是模式优先。一个想法是模型目标,以盈利而非赢单为目标。
  • 9 简单有限状态机(SFSM)。一种可以更明确和有效定义运行状态的方法。
  • 10 Streamlit & Gradio。后端到前端的快速投射,一个使用与做快速的web展示,一个可以做更复杂的后端操作。
  • 11 异步请求与异步服务。异步请求将可以使对多个微服务系统的数据请求同步完成。
  • 12 Nginx的反向代理与负载均衡。这块经过更多的测试和调整,减少开放的web端口,并真正实现有效的负载均衡。

虽然还感觉有无数的东西要完善,感觉自己做的还不够好,不过回头过一看,还是有不少收获的。毕竟我算是偏笨一些的,只能靠长期堆量来找到正确的方式。这么一想,心理就平衡了。

3 接下来怎么做

首先是数据规划。明确每个数据节点的作用与形态,which should/could be pydantical。

下面是之前画的一个草图。由于异步任务系统的存在,可以认为当前本地资源可以确保60~100个标的的流转不会有任何问题。绿色的都是队列:队列的一端必然连接worker,worker是绝对灵活的。

上次修改是的[行情数据Out] --(s2ch)-->[行情数据], 取消了s2ch,而是用一个临时的worker(xxx s2mongo.py)替代了,解决了数据可能存在的重复问题。
在这里插入图片描述
在第一步完成了之后,可以将历史数据补全,然后下一步有三个分支。

  • 1 【实时数据保持】将所需的block在内存中进行实时保留。
  • 2 【特征生成】【数据分析】【模式识别】形成一套方案,根据前N个block数据形成一套特征。即时间转空间特征。对应的工具是VV。本次在进入特征生成之前,先进行基础的数据分析。需要形成描述性的技术指标,供分析和思考。需要得到的成果是,可以根据技术指标,快速的获得总体态势感知、策略表现等。另外,要能够形成 一套模式识别方法。
  • 3 【回测】回测时将预先生成好所有可生成的数据,然后按照时间轴向前推进。使用的对象包括TimeTraveller,执行的方式将通过RabbitMQ任务方式。

这里要注意,结构化数据将从mongo出提取出,然后存入clickhouse。这个机制需要补上,而且后续形成的可解释、结构化的结果,应该都存入clickhouse:这样方便block读取,也可以快速统计。

这部分要学习一下在 ClickHouse 中处理更新和删除, ch支持块级删除让我觉得太适合UCS了,UCS本身就强调以块为单位操作。

再下一步就是指定具体的策略,以及通过强化学习来进行挑选,并和操作进行集成,暂且不提。

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

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

相关文章

浅谈人工智能发展趋势

第三次浪潮 人类科技发展的主线正沿着“能源”和“新型”展开。AI的尽头是光伏和储能。 如今我们正在经历第三次浪潮——信息文明。 社会生产力 劳动对象 劳动工具 劳动者 生产要素 农业文明铜器铁器 材料 人力工具 农民 土地人力 工业文明机车电力 材料动力 动力…

如何使用命令提示符查询电脑相关序列号等信息的操作方法

如何使用命令提示符查询硬盘的序列号? 如果出于保修或其他目的,你想知道硬盘驱动器的序列号,你不想使用第三方应用程序,或者如果你更喜欢命令行方法,则可以使用带有命令提示符的命令来显示硬盘驱动器的序列号。 1. 按…

# 音频处理4_傅里叶变换

1.离散傅里叶变换 对于离散时域信号 x[n]使用离散傅里叶变换(Discrete Fourier Transform, DFT)进行频域分析。 DFT 将离散信号 x[n] 变换为其频谱表示 X[k],定义如下: X [ k ] ∑ n 0 N − 1 x [ n ] e − j 2 π k n N X[k]…

【QT】输入类控件

目录 Line Edit 核心属性 核心信号 正则表达式 示例:使用正则表达式验证输入框内容 示例:切换输入框密码模式下的显示状态 Text Edit 核心属性 核心信号 示例:获取多行输入框的内容同步显示到label 示例:获取文本的选…

Windows 安装docker详细步骤说明

文章目录 1. 检查系统要求2. 启用硬件虚拟化3. 启用Hyper-V和容器功能4. 下载并安装Docker Desktop5. 配置Docker Desktop6. 安装WSL 27. 验证Docker安装8. 常见问题排查9. 重点说明参考资源 在Windows上安装Docker的详细步骤如下: 1. 检查系统要求 确保您的Window…

WPF----自定义滚动条ScrollViewer

滚动条是项目当中经常用到的一个控件&#xff0c;大部分对外项目都有外观的需求&#xff0c;因此需要自定义&#xff0c;文中主要是针对一段动态的状态数据进行展示&#xff0c;并保证数据始终在最新一条&#xff0c;就是需要滚动条滚动到底部。 1&#xff0c;xaml中引入 <…

提升写作效率:探索AI在现代办公自动化中的应用

工欲善其事&#xff0c;必先利其器。 随着AI技术与各个行业或细分场景的深度融合&#xff0c;日常工作可使用的AI工具呈现出井喷式发展的趋势&#xff0c;AI工具的类别也从最初的AI文本生成、AI绘画工具&#xff0c;逐渐扩展到AI思维导图工具、AI流程图工具、AI生成PPT工具、AI…

【爱上C++】详解string类2:模拟实现、深浅拷贝

在上一篇文章中我们介绍了string类的基本使用&#xff0c;本篇文章我们将讲解string类一些常用的模拟实现&#xff0c;其中有很多细小的知识点值得我们深入学习。Let’s go&#xff01; 文章目录 类声明默认成员函数构造函数析构函数拷贝构造函数深浅拷贝问题传统写法现代写法…

外接电容选择不当会对晶振电路造成什么影响?

在电子设备中&#xff0c;晶振电路负责提供稳定的时钟信号&#xff0c;这对于电路的同步和正确操作至关重要。外接电容在晶振电路中发挥着关键作用&#xff0c;其选择是否得当直接影响到晶振的性能。以下是不当选择外接电容可能带来的问题&#xff1a; 频率稳定性下降&#xf…

商场配电新思维:智能网关驱动的自动化管理系统

在商场配电室监控系统中&#xff0c;主要是以无线网络为载体&#xff0c;目的就是便于对变电站等实时监测与控制。其中&#xff0c;4G配电网关非常关键&#xff0c;可以将配电室系统终端上的信息数据及时上传到服务器&#xff0c;再由服务器下达控制指令到各模块中&#xff0c;…

电脑技巧:告别卡顿,迎接流畅——Wintune系统优化软件功能详解

目录 一、Wintune介绍 二、Wintune核心功能介绍 2.1 系统优化 2.2 隐私功能 2.3 文件管理模块 2.4 可选选项 2.5 UWP app服务 2.6 startup Manager 2.7、主机编辑 三、总结 电脑是大家目前日常办公娱乐必不可小的工具&#xff0c;软件市场上的系统优化软件层出不穷&a…

泛型的使用(<T>)

文章目录 前言一、泛型是什么&#xff1f;二、泛型的使用 1.定义泛型类2.泛型的常规用法总结 前言 强制类型转换存在一定隐患&#xff0c;如数据丢失、内存溢出、运行时错误、程序逻辑错误等。所以提供了泛型机制&#xff0c;使程序员可以定义安全的数据类型进行操作。通俗的理…

宠物医院管理系统-计算机毕业设计源码07221

目 录 1 绪论 1.1 选题背景和意义 1.2国内外研究现状 1.3论文结构与章节安排 2 宠物医院管理系统系统分析 2.1 可行性分析 2.1.1技术可行性分析 2.1.2 操作可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分…

Soul社交元宇宙智能连接安全相伴,打造值得用户信赖的社交环境

随着人工智能技术的快速发展,社交平台正在迎来一场革命性的变革。从智能推荐到情感分析,社交平台通过深度学习和数据分析为用户提供更加个性化、智能化的社交体验。与此同时,数字时代人们的安全意识正逐渐增强。为此,一个智能、安全的社交平台成为人们迫切需要。而新型社交平台…

五种肉苁蓉属植物叶绿体基因组-文献精读25

Structural mutations of small single copy (SSC) region in the plastid genomes of five Cistanche species and inter-species identification 五种肉苁蓉属植物叶绿体基因组中小单拷贝 (SSC) 区域的结构突变及物种间鉴定 摘要 背景 肉苁蓉属是列当科的重要属类&#xf…

[SwiftUI 开发] 嵌套的ObservedObject中的更改不会更新UI

1. 发生问题的demo 业务逻辑代码 class Address: ObservableObject {Published var street "123 Apple Street"Published var city "Cupertino" }class User: ObservableObject {Published var name "Tim Cook"Published var address Addr…

嵌入式linux系统中动态链接库实现详解

大家好,linux系统中动态库是如何实现相互链接的?今天简单聊聊动态链接库的实现原理。 假设有这样两段代码,第一段代码定义了一个全量变量a以及函数foo,函数foo中引用了下一段代码中定义的全局变量b。 第二段代码定义了全局变量b以及main函数,同时在main函数中调用了第一个…

ZXL-2000砌体砂浆强度点荷仪

一、产品简介&#xff1a; 砌体砂浆强度点荷仪&#xff08;又名&#xff1a;砂浆点荷仪&#xff09;&#xff0c;是根据GB/T50315-2000《砌体工程现场检验技术规程》而研制生产的。是砌体砂浆强度检测的专用仪器&#xff0c;其特点是能在现场或试验室直接测试&#xff0c;不影…

最短路模型——AcWing 188. 武士风度的牛

最短路模型 定义 最短路模型是图论中的一个经典问题&#xff0c;旨在寻找从图中一个顶点到另一个顶点的路径&#xff0c;使得这条路径上的边&#xff08;或边的权重&#xff09;之和最小。这一模型在许多实际问题中有着广泛的应用&#xff0c;比如网络路由、地图导航、物流配…

【深度学习】图生图img3img论文原理,SD EDIT

https://arxiv.org/abs/2108.01073 摘要 引导图像合成技术使普通用户能够以最小的努力创建和编辑逼真的图像。关键挑战在于平衡对用户输入&#xff08;例如&#xff0c;手绘的彩色笔画&#xff09;的忠实度和合成图像的真实感。现有的基于GAN的方法试图通过使用条件GAN或GAN反…