Python 算法交易实验71 QTV200数据流设计

news2024/9/17 7:50:33

说明

结构作为工程的基础,应该在最初的时候进行合理设计。这一次版本迭代,我希望最终实现的效果,除了在财务方法可以达到预期,在工程方面应该可以支持长期的维护、演进。

内容

1 财务表现期待

假设初始为60万资金作为主动资金(追求短期效益,交易频次为1天到7天),40万资金作为被动资金(追求长期利益,交易频次为周,月)。之前对qtv102的估计是月利率3%左右,翻倍期是24个月。

从风控考虑,一个月最多允许1/3的主动资金交易,因此可参与计算复利的资金是20万。在24个月之后,收益20万,对于主动资金来说,利润率大约是33%,年化利率大约15%。被动资金大约也可以参考这个水平。整体上可认为QTV102的获利水平大约处于勉强及格的状态。

QTV200在架构上、算法上会有较大的突破。架构上可以确保足够量的交易(以支持统计)以及足够方便的交易提示(手工交易)。算法上会将双刃剑升级到大砍刀,并开发风险模型:修正学习目标,提供多一个种类的策略模式。所以,月利润率有希望达到5%,当然,关于实测月利润率会在后续进行更多的实验修正估计。如果是5%的话,还是非常客观的。

24个月和72个的利润为40万和600万,年化利润率 29%, 49%。
在这里插入图片描述
让后再放一张长点的图:我一直认为,一个大的目标如果可以分摊到很长的时间上,就会变得简单。难的是在于找到那个正确的规律,然后慢慢坚持下来。
在这里插入图片描述

2 数据流

要能做的足够长久,或者换一个角度,确保这事能够搞成,首先是在架构上。架构的作用是保持整个项目在长期运转的过程中保持清晰:这样在任何时候想要增加内容都不会乱。而且由于某些流转过程的标准化,会使得整体运行效率更高,也更简单(在配置新的流时)。

今年和去年比起来,工具更完善了。去年做的时候还是ADBS,采用APS方式,在一个周期内把多个流程运行一遍:数据获取、数据入Stream、到Mongo,中间还使用了APIFunc。虽然后面对ADBS项目的快速初始化做了改进,但一个个的ADBS之前还是独立的。总之,上一版做的较为零散,手工。

现在增加了新的数据库(ClickHouse、Milvus),特别是前者,在进行数据读取的时候比Mongo要快很多,几乎可以等于内存;然后(再次)搭好了Flask-APS-Celery。过去存在一些误解,想使用Celery来执行所有任务,然而这是不太可能的。但是执行通用任务,例如数据流转,这完全是可行的。而复杂的任务会被抽象到API里,celery只要发起API调用就好了,这恰恰也是celery擅长的(异步调用)。未来,在各种数据库Agent中,在读取方面应该都改为异步会更合理。(写入方面我觉得阻塞就阻塞,问题不大)。无论如何,我觉得这些改进会使得这个版本的调度和吞吐能力大幅增强。

对下图的解释如下:

  • 1 首先在Mongo里设定好计划,这个目前用IPython+ MongoEngine操作,之后可以很容易拓展为前端
  • 2 这些计划将会通过FlaskAPS进行定时执行,然后调用Celery Worker。
  • 3 行情数据会随着Worker的执行,被写入Stream In。
  • 4 另一个负责清洗的Worker会把Stream In中的数据处理完放到Stream Out。【这里有一个新约定,worker只和stream或RabbitMQ挂钩,一个入,一个出。】
  • 5 行情数据将会通过固定的任务流,类型为s2ch(Stream To ClickHouse)自动同步。到这里,原始数据的获取完成。
  • 6 接下来,如果是在生产状态下,一个特定的Worker将会定时将行情数据的Block数据取出,存在Redis中。
  • 7 另一个worker,会将新的行情数据取出,放到RabbitMQ中。
  • 8 负责处理特征的worker将会因此触发处理,读取最新的Block数据,调用特征处理接口,和计算评分,结果存于Stream
  • 9 Steram中的向量通过固定s2mv(Stream To Milvus)保存于Milvus。
  • 10 Stream中的评分将会通过另一负责决策的worker,通过调用模型参数给出。结果放在决策数据Stream中。
  • 11 决策数据Stream将通过s2ch,自动同步到ClickHouse中。
  • 12 负责操作的worker将从决策数据中提取数据,结果送到操作消息Stream中。
  • 13 负责实时强化的worker将提取决策数据,在另一个体系中进行模拟计算,返回强化消息。
  • 14 操作消息和强化消息将同时存在操作数据中,有些操作在过一段时间后可能会被强化消息中的控制字段阻断。
  • 15 前端通过操作数据 ,将信息反馈给人操作,或未来交给交易接口。

在训练/回测过程中,将会有回测计划,目前也是通过手工发送一次性指令。这个过程分为两个阶段:数据准备和运行回测。

在数据准备阶段,取数Worker将会遍历执行到最新 ,每次将数据写入历史行情数据Stream。然后某个标的的取数worker将会再次取出,结果送到某个标的的stream out(里面的行情数据只是起到元数据作用).特定的worker将会拉取(pull)相关的历史块数据,然后进行批量的特征成成和决策数据生成。结构上,开发和实时worker都是采用相同的接口,所以数据是高度一致的。

决策数据全部写完后,回测开始启动,在过程中将会按照回测时段和策略,将模拟交易写到交易明细表中,在回测结束时,会进行相应的汇总,写入交易汇总表中。

在这里插入图片描述

实操时,这个体系自然会横向扩充为对个标的的计算,多策略的实施,以及结果的汇聚统计。从而使得一个技术栈,最终表现为对业务的支持:我们可以关注在不同分支下,各策略的动态表现,从而形成一个认知:当前系统可达到的水平(1~5%的月利率)。

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

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

相关文章

Java学习 - MyBatis - 初识MyBatis

前言 什么是持久化 持久化是将程序数据在持久状态和瞬时状态间转换的机制,将数据保存到可永久保存的存储设备中。最常见的就是将内存中的对象存储在数据库中,或者存在磁盘文件、XML 数据文件中等等。其中,文件 IO 属于持久化机制&#xff0…

Web后端开发(请求-数组集合、日期、JSON参数)(三)

数组参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数 RequestMapping("/arrayParam") public String arrayParam(String[] hobby){System.out.println(Arrays.toString(hobby));return "OK"; } …

Spring Event如何优雅实现系统业务解耦

Spring Event如何优雅实现系统业务解耦 一、介绍 Spring事件(Spring Event)是Spring框架的一项功能,它允许不同组件之间通过发布-订阅机制进行解耦的通信。在Spring中,事件是表示应用程序中特定事件的对象,例如用户注…

AI数据分析:根据Excel表格数据绘制柱形图

工作任务:将Excel文件中2013年至2019年间线上图书的销售额,以条形图的形式呈现,每个条形的高度代表相应年份的销售额,同时在每个条形上方标注具体的销售额数值 在deepseek中输入提示词: 你是一个Python编程专家&#…

OpenGauss数据库-4.表的创建、修改与删除

第1关:创建表 gsql -d postgres -U gaussdb -W passwd123123 create database testdb; \c testdb; passwd123123 create table test_table (test_id integer not null,test_info char(36)); 第2关:修改表 gsql -d testsb -U gaussdb -W passwd123123 …

Python实现删除Word文档中带有“指定内容”的段落文本(7)

前言 本文是该专栏的第7篇,后面会持续分享Python办公自动化干货知识,记得关注。 在处理word文档内容的时候,有时候我们需要一个干净整洁的文本内容。比如说,如下图所示的情况: 在处理上述word文档内容的时候,我们希望将文本底部的“下载链接”以及“附件信息”两个段落,…

Virustotal查询恶意进程

1、使用netstat查看可疑进程 执行ls -al /proc/$PID/exe确认可疑进程对应的文件;若文件未被删除,则直接上传文件到Virustotal进行检测,或者计算出文件对应的md5,使用md5去Virustotal进行查询;若文件已被删除&#xff0…

aabb c++

题目描述 查找形如"aabb"的四位完全平方数,也即前两位数字相同,后两位数字也相同。 输入 无 输出 若干行,每行一个符合条件的四位数(从小到大)。 分析: 完全平方数: &#xff…

[图解]建模相关的基础知识-07

1 00:00:04,710 --> 00:00:08,900 这是划分,下一个是有序对的概念 2 00:00:11,720 --> 00:00:13,800 我们知道集合是不分顺序的 3 00:00:15,090 --> 00:00:18,200 我们花括号来代表集合的话 4 00:00:18,210 --> 00:00:21,000 AB花括号等于BA花括号 …

ORA-01652 表空间不够解决方案

前章:出现表空间不足不要手动强制删除对应数据文件存储目录下的DBF文件,需要用SQL语句进行数据文件的DROP,否则会导致ORA-01033报错,因为我没有开启数据库的归档所以不能通过RECOVER的形式找回数据文件最后只能重装本地ORACLE。 …

首途第三十三套清新简约卡片风格蓝紫渐变色短视频模板 | 苹果CMSV10主题

首途第三十三套清新简约卡片风格蓝紫渐变色短视频模板 | 苹果CMSV10主题 我们的简约风格,以纯洁的白色和深邃的紫色为主色调,为您提供了一种清新、时尚的浏览体验。在这个简洁而美丽的界面中,您可以轻松畅享各种精彩短视频。我们专注于简单的…

仓储系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,用户管理,试剂管理,安全管理,存储管理 用户账户功能包括:系统首页,个人中心,试剂管理,安全管…

vue29:普通组件的注册使用

<template><div class"App"><!-- 头部组件 --><HmHeader></HmHeader><!-- 主体组件 --><HmMain></HmMain><!-- 底部组件 --><HmFooter></HmFooter><!-- 如果 HmFooter tab 出不来 → 需要配置…

让AI做2024新高考1卷数学最后一题:AI智商横向对比!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

2013年 阿拉斯加巴罗活动层厚度和土壤含水量

Pre-ABoVE: Active Layer Thickness and Soil Water Content, Barrow, Alaska, 2013 ABoVE前&#xff1a;阿拉斯加巴罗活动层厚度和土壤含水量&#xff0c;2013年 简介 文件修订日期&#xff1a;2018-01-10 数据集版本&#xff1a;1 摘要 该数据集提供了 2013 年 8 月在…

泛微开发修炼之旅--13关于在Ecology中实现webservice接口对接异构系统时,出现无法调用接口的方案及源码

文章链接&#xff1a;泛微开发修炼之旅--13关于在Ecology中实现webservice接口对接异构系统时&#xff0c;出现无法调用接口的方案及源码

【数据结构】排序(上)

个人主页~ 堆排序看这篇~ 还有这篇~ 排序 一、排序的概念及应用1、概念2、常见的排序算法 二、常见排序的实现1、直接插入排序&#xff08;1&#xff09;基本思想&#xff08;2&#xff09;代码实现&#xff08;3&#xff09;时间复杂度&#xff08;4&#xff09;空间复杂度 2…

Java日期类Date、SimpleDateFormat 日期格式类、Calendar详细介绍

目录 一、Date类1.1 Date类简单介绍1.2 Date类的构造方法代码演示 二、SimpleDateFormat 日期格式化类2.1 SimpleDateFormat 日期格式化类简单介绍2.2 构造方法代码演示 日期格式化模板常用方法代码演示注意 三、Calendar类3.1 简单介绍3.2 创建对象代码演示 3.3 静态常量3.4 常…

Idea-Linux远程开发部署

第一步&#xff1a;File->Remote Development 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a;在Host位置填写Linux虚拟机的IP地址&#xff0c;在Username、Password填写对应的账号密码后点击Test Connection测试连接。 第五步&#xff1a; 第六步&#xff1a;在…

iCloud完全指南:释放Apple云服务的终极潜力

iCloud是苹果公司提供的云服务&#xff0c;它允许用户存储和同步照片、文档、音乐、应用数据以及更多类型的文件。通过有效利用iCloud&#xff0c;用户可以在不同设备间无缝地访问和编辑内容。本文旨在全面介绍如何高效使用iCloud&#xff0c;确保您能够最大化这一服务的价值。…