Python 算法交易实验53 Step2.1 Signals 信号生成

news2025/7/19 2:39:02

说明

上次提到了基于传统的趋势法构建一组基础信号的方法,并做了简单的交易测算。本次计划对方法和测算做一下Review,同时明确接下来基于ADBS(Step2)进行承接时需要计算的数据。

内容

1 方法回顾

传统的趋势方法(SMA-LMA)采用“短线上升且突破长线买入”,以及“长线下降且短线下穿长线卖出”的方式构成一对买卖信号。

在我的实测中,这种方法效果非常差(不是不好,是很差)。我分析下来,主要的原因在于我使用分钟数据,而书上似乎用的是天数据。长时隙的数据显然噪声会更少一些,可能这个是造成差异的主要原因。但无论如何,在尝试使用不同的周期进行搭配时,基于信号的交易结果仍然差异很大,我觉得这个是不能接受的(不稳定)。

于是我做了一版方案改进。

改进的方案仍然基于短期-长期趋势的变化,但是使用“拟合斜率”作为一个关键计算。

  • 1 交易信号的买卖主要基于短周期
  • 2 长线信号用于筛选上升或者非下降周期

计算:

  • 1 根据周期筛选出收盘价的序列
  • 2 拟合这个序列的斜率(K)
  • 3 对斜率进行一阶差分(K2)
  • 4 对一阶差分与0比较的布尔值进行周期10(n)的累加(K3)
  • 5 K3 > n 是买进, K3 < 0 则卖出
  • 6 长线K3 < 0 不交易

一句话归纳:依据短线的趋势买入和卖出,只要长线不反对。

S600_L2400_K3

短线的K3

 10.0    15294
-10.0    13627
-2.0      9497
-1.0      9380
 0.0      9369
 1.0      9184
-3.0      8920
 2.0      8784
-4.0      8377
 3.0      7665
-5.0      6889
 4.0      6489
-6.0      6116
 5.0      5888
-7.0      5388
 6.0      4813
 9.0      4594
 7.0      4583
 8.0      4577
-8.0      4571
-9.0      4268

长线K3

 0.0    58604
 1.0    38034
-1.0    35347
-2.0    10308
 2.0     9749
 3.0     1926
-3.0     1598
-4.0      399
-5.0      260
 4.0      160
-6.0       88

这些K3信号的分析非常关键, K3,我又称之为“冷静时间”。从噪声的角度上看,数据容易出现噪声,形象的可以理解为误报;单个的误报是常见的,连续的误报是少见的。所以统计若果若干个周期(冷静时间),当数据达到一定程度时,就不再认为是误报。如果从信心的角度看,也是类似的。单个的信号信心不足,频繁的发出信号时,信心就充足了。

短线的K3波动会更大,如果降低短线K3的冷静时间,那么订单的交易就会变多;同理,如果提高长线K3的冷静时间,那么订单就会变少。

基于上面的简单统计,我们可以在信号的参数条件与结果之间形成一种类似线性的效果,很容易理解。

以下是几种参数产生的结果。

S600_L2400_SCA10_LCA0_CO240

短周期采取600, 长周期采取2400, 短线K3采取10,长线K3采取0,冷却时间240(一个交易日)。

产生的订单数不算少,在不考虑交易成本的情况下盈亏比达到了1.3。考虑了交易成本后,基本就是1左右。所以我突然在想,过去或许有更多人想研究量化,但是如果不考虑模型,到这一步就止步了:做了额外的劳动,但是不输不赢,感觉是白费劲啊

当然叠加上模型之后,盈亏比一定会大幅改善(减少订单量,提高成功率),所以即使是这种情况,也是可以盈利的。

在这里插入图片描述

S600_L2400_SCA10_LCA1_CO240

既然考虑手续费之后会大幅拉低盈利,那么在“多”与“精”之前,我们可以看看选则更好的交易周期。之前的LK3(长线K3)包含了很多中性空间(只要LK3>0),所以我们进行微调,增加长线信心的阈值为1。

可以看到,即使扣除了交易成本,我们仍然可以达到1.25的盈亏比(体量比上面略有减少,净利1200左右),年化11%(这种策略同时减少了资金占用,所以反而可以提高年化利率)。

考虑上模型增益,年化20%应该是可以达到的。

可以看出来,信号发生的机制只要进行合理的调整(人类逻辑容易理解的变化),就能进入盈利空间。之后就是找到一个合适的基准:既具有基础的赢率,同时又有足够的体量。模型有时候需要更多的候选订单,但是当信号集产生更多订单时又会拉低基础赢率,所以要找到一个(大约)合适的中间点。
在这里插入图片描述

S600_L2400_SCA5_LCA0_CO240

当尝试降低SK3(短线信心)时,产生了更多的订单,但不出意外,这些订单的质量更差,在考虑了交易成本之后甚至会亏损。
在这里插入图片描述

S600_L2400_SCA5_LCA1_CO240

即使增加LK3的约束,也仅仅是挽回败局。
在这里插入图片描述
总体上来说,认为必然盈利的推断过程如下:

  • 1 找到一个稳定信号源(长期、稳定的有益信号)
  • 2 这个信号源产生的原始信号对可以使得天然盈亏比 > 1.3
  • 3 通过模型,可以进一步增强盈亏比,达到1.6~2之间。

模型可以进一步增强效果的推论如下:

  • 1 假设通过信号源参数就可以直接改善信号源质量(已证明)
  • 2 上述过程相当于使用简单维度建模来提升模型效果
  • 3 简单维度属于低阶模型,即使使用LR这样的线性模型,也容易构造高维度模型
  • 4 高维度模型比低纬度模型(或规则)可以高出一个量级的效果(经验)
  • 5 净增益提升约是原来的两倍少一点

还有一种更高阶的组合方法,可以几乎无损的增加投资的效益(有点像倍频)。

其依据是:

  • 1 选择的优质交易数量较少,占据的资金使用周期也较短
  • 2 可以找到至少一种,或者若干种(对冲子)交易,其周期与某种交易恰好互补
  • 3 这样即使单种策略的年化低于20%,而两者相加,仍然可以使资金的年化>20%。

2 在Step2计算什么

按之前的规划,Step2会输出买卖信号

在这里插入图片描述
具体来说,Step2要准备若干周期的K1,K2,K3,并且给出一些默认的买卖信号,这些可以在对参数进行进一步实验后给出。

所以分为两步走:

  • 1 计算各周期的K1~K3
  • 2 通过分析和测算,给出一组适应性最好的信号

在结构上,Step2至少会使用两个任务通道,以适应多个版本的迭代。

新的ABDS叫apifunc_database_model_ABD_MyQuantBase_Step2Signals

快速建立ABDS的过程:

  • 1 拷贝config_base.py 并修改其中的配置
  • 2 拷贝init_projects_base.py
  • 3 初始化及测试:同步(git)项目后,执行容器挂载与初始化
  • 4 在itables里设置项目监控表

Others

这几天正好在跌,我就看看这个信号

在这里插入图片描述
买入的质量虽然不咋地,但是卖出的时机还是很优秀,避过今天的大跌。
在这里插入图片描述
之前1-31逃的慢了点,但还是对的
在这里插入图片描述

这两张图体现了LK的作用,如果没有LK的限制,那么就会在3-6~3-9这段时间内买入(因为SK达到10,两次)
在这里插入图片描述

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

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

相关文章

Spring Security Oauth2以及整合sso

Oauth2认证 第三方认证技术方案最主要是解决认证协议的通用标准问题&#xff0c;因为要实现跨系统认证&#xff0c;各系统之间遵循一定的接口协议。 Oauth协议为用户资源授权提供了一个安全的&#xff0c;开放的而又简单的标准&#xff0c;同时&#xff0c;任何第三方都可以使用…

【Linux系统编程】08:信号量

信号量 OVERVIEW信号量1.mmap内存映射2.semget信号量获取3.semctl信号量控制4.semop信号量操作5.使用案例1.mmap内存映射 mmap映射的是磁盘中的文件&#xff0c;而共享内存是将内存映射到用户的进程空间中 原型&#xff1a;void *mmap(void *addr, size_t length, int prot, …

DHCP中继配置

1. 实验目的 熟悉DHCP中继的应用场景掌握DHCP中继的配置方法2. 实验拓扑 DHCP中继配置实验拓扑如图15-10所示: 图15-10:DHCP中继配置 3. 实验步骤 IP地址的配置AR1的配置 <Huawei>system-view

VCO pulling

这次调试项目 目前复现的问题 2.4g干扰到5g 问题就是2.4g 5g 同时发包&#xff0c;5g evm直接从37-38变成33-34 于是我对vco-pulling做了一个小结 VCO pulling是指当一个外部信号对振荡器的频率产生影响时&#xff0c;振荡器的频率将被拉动或偏移。这种现象通常会在无线电通…

SpringBoot嵌入式Servlet容器 相关学习笔记

大家都知道SrpingBoot是内嵌Servlet容器的&#xff0c;并且默认是Tomcat&#xff0c;本文主要讲一下其中原理。   首先&#xff0c;SpringBoot是支持其它容器的&#xff0c;除了Tomcat外&#xff0c;还有Undertow&#xff0c;Netty以及Jetty。并且这些容器经过封装&#xff0c…

KAT: A Knowledge Augmented Transformer for Vision-and-Language

Paper name KAT: A Knowledge Augmented Transformer for Vision-and-Language Paper Reading Note URL: https://arxiv.org/pdf/2112.08614.pdf TL;DR 2022 NAACL 论文&#xff0c;提出了 Knowledge AugmentedTransformer (KAT)&#xff0c;提出了一种同时利用显式和隐式…

记录第一次安装部署datadonphon遇到的坑和解决办法

故事开始之前&#xff0c;我在3台服务器里新建了一个abin用户&#xff0c;3台服务器都用abin和root账号做了免密登录。故事开始了......按照官网文档一顿操作猛如虎到了配置集群了。那就配置呗&#xff0c;点它。仔细阅读了提示&#xff0c;嗯&#xff0c;明白它的意思了。来吧…

Python进阶-----高阶函数->filter() 函数

目录 前言&#xff1a; filter() 函数介绍 filter() 函数使用示例 1.与循环对比 2.与lambda函数综合使用 3.使用None过滤False 4.过滤字典相关数据 前言&#xff1a; 家人们&#xff0c;当你们获取了一个序列的时候&#xff0c;想要把一些内容去掉&#xff0c;保留一部分…

《JavaEE》进程和线程的区别和联系

&#x1f451;作者主页&#xff1a;Java冰激凌 &#x1f4d6;专栏链接&#xff1a;JavaEE 目录 进程是什么&#xff1f; 线程是什么&#xff1f; 进程和线程之间的联系~ ps1&#xff1a;假设我们当前的大兴国际机场有一条登机口可以登入飞机 ps2&#xff1a;我们为…

运动员最佳匹配问题(详解)

一、问题描述 羽毛球队有男女运动员各n人。给定2个nn矩阵P和Q。 P[i][j]是男运动员i的女运动员j配对组成混合双打的男运动员竞赛优势&#xff1b;Q[i][j]是女运动员i和男运动员j配对的女运动员竞赛优势。由于技术配合和心理状态等各种因素影响&#xff0c;P[i][j]不一定等于Q[…

LearnOpenGL-光照-6.多光源

本人刚学OpenGL不久且自学&#xff0c;文中定有代码、术语等错误&#xff0c;欢迎指正 我写的项目地址&#xff1a;https://github.com/liujianjie/LearnOpenGLProject 文章目录前言例子代码没有聚光灯效果有聚光灯效果前言 此节目的 综合2.5投光物&#xff0c;在此节实现一个场…

超越语言界限,ChatGPT进化之路——Visual ChatGPT

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

操作系统复习

熟练掌握操作系统的定义&#xff0c;操作系统的特征&#xff0c;操作系统的功能熟练掌握多道程序设计的概念&#xff0c;单道程序设计和多道程序设计的区别&#xff0c;多道程序设计的优点熟悉操作系统接口的主要功能&#xff0c;系统调用的基本概念、类型、实现。操作系统接口…

【Mysql】库的操作

一、sql分类 1.DDL&#xff08;Data Defination Language&#xff09;数据定义语言 定义数据时候使用的sql语言 creat:建表、drop:删表、alter:改变 2.DML&#xff08;Data Manipulation Language&#xff09;数据操纵语言 对数据进行操作的sql语言 insert:插入、delet…

【打造家庭服务器系列03】Frp 实现内网穿透

一、概述 为什么要搞frp&#xff0c;因为我们的服务器处于家里面的网络&#xff0c;是没有公网IP的&#xff0c;所以直接通过ssh连接服务器&#xff0c;此时就需要一个中转来实现转发。 二、服务端配置 - Frp Server 以腾讯云为例&#xff0c;阿里云也一样。Frp 官方文档 -…

chatPDF | 别再自己读文献了!让chatGPT来帮你读吧!~

1写在前面 自从chatGPT开放API以后&#xff0c;相关基于此的app也是层出不穷。&#x1f92a; ChatGPT API是基于OpenAI的自然语言处理模型的API。&#x1f9d0; 基于这个API&#xff0c;开发人员可以通过程序调用和使用ChatGPT模型来解决各种文本相关的任务。&#x1f609; 其实…

Ubuntu软件包管理之apt与apt-get的区别

目录apt和apt-get发展史apt和apt-get命令对比常用命令举例更新存储库索引升级已安装的包列出所有可用安装包关键字搜索安装包安装软件卸载软件查看安装包信息清理没用的依赖包清理下载的缓存包清理残余的配置文件查看安装包的依赖参考apt和apt-get发展史 Debian 使用一套名为 …

STM32—LCD1602

LCD1602&#xff08;Liquid Crystal Display&#xff09;是一种工业字符型液晶&#xff0c;能够同时显示 1602 即 32 字符(16列两行) 第 1 脚: VSS 为电源地 第 2 脚: VDD 接 5V 正电源 第 3 脚: VL 为液晶显示器对比度调整端,接正电源时对比度最弱&#xff0c;接地时对比度最…

C语言实现快速排序(hoare法、挖坑法、前后指针法与非递归实现)——不看后悔系列

目录 1. hoare法 方法与步骤 代码实现 2. 挖坑法 方法与步骤 代码实现 3. 前后指针法 方法与步骤 代码实现 4. 快速排序的缺点与优化 1.快速排序的缺点 2.快速排序的优化 ① 三数取中法选 key 代码实现 ② 小区间优化 代码实现 5. 快速排序的非递归实现 附录…

数据结构与算法基础(王卓)(16):KMP算法详解(代码实现)

实现代码的过程中 具体细节、问题&#xff1a; &#xff08;1&#xff09;&#xff1a;关于写Get_next函数的标题&#xff1a; 现象&#xff1a; PPT上写的是&#xff1a; void get_next(SString T, int &next[]) 然而并不能运行&#xff0c;而当我们去掉了引用符号&…