Python 算法交易实验48 表字段设计

news2024/11/29 11:35:44

说明

虽然说的是表,实际上用的是Mongo集合

基于ADBS(APIFunc DataBase Service)可以构造一个供后续研究、生产长时间使用的数据基础,这个基础包括了:

  • 1 队列服务。通过队列,数据可以通过API实现零担和批量两种模式的快速存储。
  • 2 灵活ETL。通过AETL,使用者可以实现高复杂性的操作,但从设计和实现上又非常灵活,这是一种基于图的分解和构建。
  • 3 监控与可视化。可以实时看到数据的流入和流转。

ADBS通过简单的设置就可以不断扩展。

内容

其实也是权衡了一下,还是决定按照标准的步骤来推进量化,而不是通过离线代码、松散的实验来推进。

最初在设计ADBS的时候,除了功能性的考虑,也加入了规范性的考虑。一旦操作可以按流程进行,那么工作效率就会提升,可靠性也会提高。

搭建量化研究、生产体系的过程应该也是和搞架构一样,是一个结构性很强,耗时也很长的过程,所以最好按严谨的结构推进。至于核心的方法,在一开始反而可以简单,以跑通为目标。

架构中的算法(方法),或者算法(方法)中的架构总是互相交杂,缠绕在一起的。

本次的目的很简单,就是确定入库原始数据的表字段结构。

本质上,ADBS的数据库使用Mongo,并不会对字段进行太多约束,这里的表字段结构仅仅是从逻辑上约束。

这种约束是具有意义的,后续会有一系列的处理程序,如果能够对输入有所预期,那么在处理时也会比较容易设计。正如APIFunc中的设计经验:从样例数据开始设计总是方便、可靠的,而这里的表字段,也是这个大项目的样例数据表头。

Step1 DataETL 原始数据与基本衍生

Step1: In

序号字段名解释
1rec_id是整个项目的主键,由下面的若干字段联合而成 ( market , code , data_slot)
2data_slotint, 数据时隙,是以分钟为单位的计时法,是记录数据的时间
3data_dtstr, 数据时间,是 YYYY-MM-DD HH:MM:SS 格式的字符时间,起到校验作用
4codestr, 证券代码,应该是唯一的
5marketstr, 市场,与code联合形成绝对唯一的代码
6openfloat, 开盘价
7closefloat,收盘价
8highfloat, 高点
9lowfloat, 低点
10volint, 成交量
11amtfloat, 成交金额
12tradesint, 成交笔数
13float_capitalint, 流通值

第一步入库后,ADBS允许执行ETL,在这个时候允许做通用的特征项,这个特征项是与回顾周期相关的。

初始阶段,我打算手工指定若干个周期。

  • 1 短期: 60,120, 240(一个交易日)
  • 2 中期:600,1200,2400(十个交易日)
  • 3 长期:6000,12000, 24000(一百个交易日)

Step1: Out

这些周期会形成一波新的变量,以下用T指代某个周期(原始的变量会同步被转存)

序号字段名解释
1open_TT的开盘价
2high_TT的最高价
3low_TT的最低价
4close_TT的收盘价
5vol_TT的成交量
6amt_TT的成交金额
7trades_TT的交易笔数
8vol_T_meanT的平均(每时隙)成交量
9amt_T_meanT的平均成交金额
10trades_TT的平均成交笔数

Step2 Signals 信号生成

这个比较有意思,出现了第二个ADBS。

Step2.In = Step1.Out

通常来说,AETL允许对平面化的数据进行足够复杂的操作,但是,但需要的操作是深度式的时候,就需要进行级联了。

在设计ADBS时,为了确保复用性、稳定性,所以约定了每个ADBS只管一个step。第一个step中已经完成了原始数据,以及若干周期的简单衍生。

在这个step中,主要根据上一个step中生成的基本变量,生成交易信号。

这里探讨一个小问题:有没有可能在step1中同时完成交易信号?

理论上可能,但是真要这么做会非常麻烦,甚至会因为新的尝试而破坏旧的,运行中的东西。在上一步中,已经根据过去若干个周期进行了统计。在很多传统的新号计算方法里,会对若干周期的统计值,再进行若干周期统计。从阶数上来说是 T 2 T^2 T2, 从计算的顺序来说肯定也是计算两次。

对具体的计算指标我回头再翻翻书,正好没带在身边。

序号字段名解释
1SOME_buy_T_t使用T周期对 t周期进行计算生成的买入信号
2SOME_sell_T_t使用T周期对 t周期进行计算生成的卖出信号

后续生成买入信号可能会有很多很多组,从周期上来说分为短期、长期等,从原理来说分为回归、周期以及动量。

Step2.Out 输出买卖的信号

到这一步,故事显然还没有结束。

Step3 Decision 交易信号与指令

Step3.In = Step2.Out 注意,交易信号与原始的价格无关(Step1.Out)

生成买入信号并不能允许直接交易,仅从决策角度看,就需要进行纵向和横向的参考。

例如,信号经常会出现毛刺噪声,如果仅仅一次买入信号就买入的话很容出错,所以会从纵向上进行持续观察,我称之为冷静时间。

除此之外,从宏观角度,我们还需要知道长周期趋势。这样的目的是为了避免在低概区交易,以及避免系统风险(断崖式、持续下跌)。

除了纵向,还要考虑横向的其他维度

未来肯定是多种方法的信号并存的,所以除了自身维度的信号判断之外,也可以考虑一种投票机制,来辅助作出交易决策。

决策作出之后,在真实的交易之前,还有一些小的步骤需要完成,就是交易指令。可以简单理解为加滑点进行买卖交易的策略,这个可以暂时略过。

不同的策略可能会基于同样的信号操作,所以要增加策略名来区别。策略名也可以按三级命名来操作。

Step3.Out 输出买卖的决定,以及交易信号

Step4 Trade 交易的撮合与记录

基于上一刻的决定和这一刻的数据进行操作

这里的输入有两个:

Step4.In = Step1.Out ~ 标的的时隙数据( open, close, high, low) &
Step3.Out ~ 在上个时隙作出交易决策 (target_price, amt, buy/sell)

我们总是先做好决定,然后再采取行动,无论这个先后差距长或者短,总是如此。量化不过是用更精细,更准确的方法来千百次的替代我们完成这个过程。

如果Step3中没有Open的决策(Open Orders),那么这一步就可以直接略过。反之,如果有决策没有被实现,那么Step4就会看在当前时隙是否可以完成。

这里假设了Step3中已经发出了自动化交易请求,实际上目前对于个人投资者用接口直接交易还是不太方便,但我们可以假定如此。

当target_price处于high和low之间时,交易被完成,否则就轮空。

轮空状态下,会有一些对应的处理方法。例如大量Open Orders是否要发起告警,或者是要调低目标价。

从整体上来看,Step4或者产生1/n个close order,或者什么也不做。

Step4.Out(if any) 输出完结订单

这样结束了吗?显然还不…

Step5 Watch 观察序列变化及干预

Always Watch Back

Step5.In = Step4.Out

Dalio在《原则》里有提到桥水的量化模型,当上线之后人就不干预了,直到触碰规则。所以,量化是一种 Run… Until …的模式。

我们会让策略上线,一定是有我们的期望,这既包括了好的期望,也包括了坏的准备。如同正态分布,我们不认为策略会超过3个西格玛。

因此,我们需要持续的观察,来确保一切尽在掌握。

Step5会在每个时间点进行回看,主要从几方面比较:

  • 1 最大回撤是否超标
  • 2 最大正收益是否超标(是的,我觉得这个也要看)
  • 3 交易周期
  • 4 资金敞口
  • 5 超额收益

Step5.Out 收益曲线、回撤曲线等

这部分的结果会输出到我portal的dash board里。

Ending

总的说起来,这是一个由5个ADBS构成的处理流。我觉得这样才比较好解释,为啥之前总是半途而废:强行用简单的处理办法去容纳复杂问题就好比用一个杯子去装一壶水。分治其实是唯一的办法,分治核心在于结构。

以下是工作流的基本框架
在这里插入图片描述
还有许多未尽部分,例如策略的中途叠加、多模型协同、生成式估计、自动优化等,这些在“1”完成了之后会逐步的进行迭代。

本次完成了“0”的突破-转变,算0.1吧。

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

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

相关文章

ideal创建maven项目

前置工作本机安装mavenIdea 设置使用本机maven 工具Settings--->Maven开始创建maven项目创建maven项目,勾选通过模板创建,选择 maven-archetype-webapp 模板GroupId: 公司名倒序ArtifactId: 项目名设置本地maven仓库配置项目文件显示名,和…

外卖点餐小程序开发

前言 餐饮行业是一个传统的行业。根据当前发展现状,网络信息时代的全面普及,餐饮行业也在发生着变化,单就点餐这一方面,利用手机点单正在逐步进入人们的生活。传统的点餐方式,不仅会耗费大量的人力、时间,有时候还会出错。小程序系统伴随智能手机为我们提供了新的方向。 手机…

如何使用码匠连接 MySQL

目录 在码匠中集成 MySQL 在码匠中使用 MySQL 关于码匠 目前码匠已经实现了与 MySQL 数据源的连接,支持书写 SQL 语句,也支持通过图形化界面对数据进行增、删、改、查, 同时还支持将数据绑定至各种组件,并通过简单的代码实现数据…

Collecting package metadata (current_repodata.json): failed

一、问题描述 安装anaconda之后,想创建环境,用了下面这段代码: conda create -n pytorch python3.7 conda创建环境报错了,报了如下这一堆: Collecting package metadata (current_repodata.json): failedUnavailab…

echart中x轴数据过多时展示不全

项目中遇到需要展示一些柱状图,之前做相关功能时,横坐标x轴一直用的是时间,所以没有注意到这个问题。 如下图所示: 当x轴显示的是”人名“这种类型的值的时候,这种显示情况就有问题了,这样就不会知道&…

python学习笔记之例题篇NO.3

获得用户输入的一个整数N,输出N中所出现不同数字的和。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬ s list(set(list(input())))# ① r…

全局组件和局部组件

全局组件第一种定义方法:A、创建自己的组件:Loading.vueB、在main.js文件中引入组件并注册import Vue from vue import App from ./App.vue import * as filters from ./filterimport quanjuzujian from ./components/quanjuzujian.vueVue.component(qua…

carla0.9.13-UE4添加4轮车模型(Linux系统)

前期准备建模工具:blender:v3.4.1;可以在Ubuntu Software商店直接下载虚拟引擎:carla-UE4 (carla v0.9.13),无需额外安装UE4,carla中自带插件编译carla参照官方文档:https://carla.readthedocs.io/en/0.9.1…

mysql存储引擎、事务、索引

目录MySQL进阶存储引擎什么是存储引擎常用存储引擎事务什么是事务怎么理解提交事务 和回滚事务事务特性事务的隔离级别索引什么是索引索引的实现原理什么条件下,我们会考虑给字段添加索引呢?什么条件下,索引会失效?索引分类MySQL进阶 存储引…

Scala的变量声明

文章目录变量声明(一)简单说明(二)利用val声明变量1,声明方式2,案例演示(三)利用var声明变量1,声明方式2,案例演示(四)换行输入语句&a…

横道图时间标尺在P6软件中的设置

卷首语 由于其直观简洁且易于管理的特性,使其成为展示项目活动顺序及时间安排的最常用的进度管理工具。 甘特图 甘特图(Gantt Chart),又称为横道图或棒条图,是最早的项目进度管理工具之一。由于其直观简洁且易于管理…

从WEB到PWA 开发-发布-安装

见意如题!本文主要来说说PWA开发!作为一个前端程序员,在没有任何Android/IOS的开发情况下,想想我们有多少种方法来开发一个原生移动应用程序!我们可以有非原生、混合开发,PWA等等手段。类似uniapp&#xff…

LabVIEW应用程序(EXE)无法正确动态调用插件

LabVIEW应用程序(EXE)无法正确动态调用插件正在构建一个应用程序并使用插件架构,以便可以动态调用将来创建的VI(插件)。应用程序在LabVIEW开发环境中可以正常运行,但不能作为可执行程序运行。运行可执行文件…

STM32-CAN控制器介绍

STM32-CAN控制器介绍 对CAN接口部分重要知识点进行记录,更详细的需要查看参考手册 CAN协议介绍:https://blog.csdn.net/weixin_46251230/article/details/129147612 bxCAN简介 STM32的CAN接口叫做bxCAN,bxCAN是基本扩展CAN(Basic Extende…

第五次作业:修改redis的配置文件使得windows的图形界面客户端可以连接redis服务器

1. 安装 Redis 依赖 Redis 是基于 C语言编写的,因此首先需要安装 Redis 所需要的 gcc 依赖: yum install -y gcc tcl 2、上传安装文件 将下载好的 redis-6.2.7.tar.gz 安装包上传到虚拟机的任意目录(一般推荐上传到 /usr/local/src目录&am…

3.基于分割的文本检测算法--DBNet++

文章目录1.概况2.DBNet中的主要方法2.1 网络结构2.2 适应特征图融合模块(Adaptive Scale Fusion Module, ASF)3.ASF模块的源码实现参考资料欢迎访问个人网络日志🌹🌹知行空间🌹🌹 1.概况 2022年02月份论文:Real-Time S…

对比yolov4和yolov3

目录 1. 网络结构的不同 1.1 Backbone 1.1.1 Darknet53 1.1.2 CSPDarknet53 1.2 Neck 1.2.1 FPN 1.2.2 PAN 1.2.3 SPP 1.3 Head 2. ​​​​​数据增强​​​​​ 2.1 CutMix 2.2 Mosaic 3. 激活函数 4. 损失函数 5. 正则化方法 知识点 记录备忘。 总体而言&…

云计算|OpenStack|使用VMware安装华为云的R006版CNA和VRM

前言: FusionCompute架构 (CNA、VRM) CNA(ComputingNode Agent):计算节点代理VNA虚拟节点代理,部署在CNA上,实施计算、存储、网络的虚拟化的配置管理。VRM(Virtual Resource Manager):虚拟资源管理器 VNA可以省略不安装 本次实验使用的是V…

关于客户背景调查的两个案例,说下我的真实看法

这篇文章我只是想客观陈述下事实,并没有对他人的贬低与对自己的吹捧之意。只是想通过这样两件小事,传递出来一个观点:在外贸业务开发过程中,很多时候正是那些我们内心抗拒,不愿意沉下心去做的事,才给了我们…

关于vue3生命周期的使用、了解以及用途(详细版)

生命周期目录前言组合式写法没有 beforeCreate / created 生命周期,并且组合式写生命周期用哪个先引哪个beforeCreatecreatedbeforeMount/onBeforeMountmounted/onMountedbeforeUpdate/onBeforeUpdateupdated/onUpdatedbeforeUnmount/onBeforeUnmountunmounted/onUn…