当前位置: 首页 > news >正文

CTA策略【量化理论】

CTA策略演变史

全称:Commodity Trading Advisor (商品交易顾问)

CTA最开始是指通过为客户提供期权、期货方面的交易建议,或者直接通过受管理的期货账户参与实际交易,来获得收益的机构或个人。

随着市场的发展,市场对CTA的理解普遍发生了改变,它已不再是商品期货,而是基于量价的趋势跟踪策略——无论是商品期货、金融期货,还是股票、外汇,只要是有历史公开量价的二级市场,都可以成为CTA策略运作的市场。

 

 

在国内市场中,期货相比股票交易起来的限制较小(t+0交易且可以做空),因此推荐用期货来学习

 

趋势跟踪策略是CTA的重要组成部分,通俗来讲就是追涨杀跌,该假说核心的理论就是利用在股市中明显存在的非理性狂热和羊群效应,在市场情绪明显不是很好的情况下在置信区间内持有股票,以达到收割韭菜的目的,客观来讲,这种量化策略客观上实现了一件事:使得股价更加稳定且符合实际价值,降低了市场情绪对股价造成的影响

相关指标类型

国内大量的量化CTA都是利用了技术指标来构建量化策略,大体上,这些量化指标可以分为三类:

(1):趋势型:例如MACD、SAR用于趋势跟踪策略

(2):超买超卖型:和追涨杀跌的趋势型恰相反,用KDJ、RSI等指标来描述并捕捉趋势行情的终结

(3):能量型:从成交量的角度来考察价格变动的力量,常用于辅助判断信号的强度,比如VOL、OBV等

有关跳空定义的处理方法

在进行较长时间的回测时,在换月时会遇到假跳空的问题,这是由于期货合约到期后,新的合约和原来的合约存在一个比较大的价差

 

对于这种假跳空的情况,一般会采用三种处理方法1.使用期货合成指数来回测2.对跳空进行复权处理3.不使用主力合约,而是使用单独月份的合约来进行分析

1.使用合成指数进行回测:

对某一品种的各个月赋予权重,计算出一个综合性指标,用于代表该产品的整体走势,计算指数时,算法一般都会保证其连续性,不会出现假跳空的现象。

方法缺点:指数并非真实存在的价格数据而产生误差;指数的计算公式往往不是透明的


2.进行复权算法处理:

复权算法分为两个维度,可以分为加减复权和乘除复权,也可以分为前复权和后复权,所谓加减复权就是指对跳空产生的价差加减平移:

假设你持有以下期权组合:

•  买入一个行权价为50的看涨期权,价格为5元。

•  卖出一个行权价为60的看涨期权,价格为2元。

•  初始价差为3元(5 - 2)。

如果市场情况发生变化:

•  加价差:你可能会卖出一个行权价为70的看涨期权,价格为1元,新的价差变为4元(5 - 1)。

•  减价差:你可能会买入一个行权价为55的看涨期权,价格为3元,新的价差变为2元(5 - 3)。

•  平移:你可能会将行权价从50和60调整为60和70,但保持价差宽度不变。

例如本来的收盘价:1010,1000,1200,1170——其中,1000到1200就是由假跳空导致的,这时我们就把后面的两个序列减去200,得到新的收盘价:1010,1000,1000,930,这种处理方法的优点是价格序列整体简洁,缺点是收益率会出现偏差,要让收益率不会出现偏差,我们可以采用乘除复权法,也就是在原来的数字上乘上一个因子,比如在刚刚举例的1010,1000,1200,1170序列当中,就可以把后面的两个数字乘上(1/1.2)这样就得到了连续时收益率不变的新序列1010,1000,1000,975

 

前复权就是对前面的数据复权,后复权就是对后面的数据复权


法三的主要缺点是容易造成数据损失


在这里给大家介绍一个比较成熟的库:ta-lib,其本身是基于c语言开发的技术指标库,现在也提供Python包装后的库,下载此库时,在windows中建议使用预编译的二进制安装包/anaconda:

其函数主要分为如下十组:

·Overlap Studies(可叠加指标)

·Momentum Indicators(动量指标)

·Volume Indicators(成交量指标)

·Volatility Indicators(波动率指标)

·Price Transform(价格变换)

·Cycle Indicators(周期指标)

·Pattern Recognition(模式识别)

·Statistic Functions(统计函数)

·Math Transform(数学变换)

·Math Operators(数学运算符)

ta-lib有两种方法计算指标(Function API和Abstract API)

其中函数式API提供了一种轻量级的调用方式,例如:

output = talib.SMA(close)

可以简单计算其移动平均

from talib import MA_Typeupper, middle, lower = talib.BBANDS(close, matype=MA_Type.T3)

可以计算其布林线

output = talib.MOM(close, timeperiod=5)

timeperiod来指定计算周期

一般而言,一个合理的CTA策略往往以趋势跟踪为主,以反转指标和能量指标为辅,取趋势指标T、反转指标R、能量指标E

定义趋势当中最常用的方法有两种(T+表示多头信号,T-表示空头信号):

1.突破:高于或低于先前几期的最高价或最低价,就是向上突破或向下突破

2.穿越:短期均线上穿/下穿长期均线

当涨的太高,股市很容易会出现回调的情况,此时一些常见的指标高于某一值,我们就可以称目前的情况为超买,为R-空头信号;低于某值为超卖,为R+多头信号

能量指标E,比如OBV:当日价格低于昨日价格,那么当日OBV就是本日值+前一日OBV值(且本日值小于零,为交易量*-1)

import pandas as pd
import numpy as np
import talib as ta
import matplotlib.pyplot as plt# 示例数据加载(请替换为实际数据)
data = pd.read_csv('your_data.csv', index_col='Date', parse_dates=True)
data = data[['Open', 'High', 'Low', 'Close', 'Volume']]# 参数设置
fast_ma_period = 10  # 快速均线周期
slow_ma_period = 50  # 慢速均线周期
bbands_period = 20   # 布林线周期
std_dev = 2          # 布林线标准差# 计算OBV(能量指标E)
data['OBV'] = ta.OBV(data['Close'], data['Volume'])# 计算布林线(反转指标R)
data['BB_UP'], data['BB_MID'], data['BB_LOW'] = ta.BBANDS(data['Close'], timeperiod=bbands_period, nbdevup=std_dev, nbdevdn=std_dev)# 计算均线(趋势指标T)
data['MA_Fast'] = ta.SMA(data['Close'], timeperiod=fast_ma_period)
data['MA_Slow'] = ta.SMA(data['Close'], timeperiod=slow_ma_period)# 生成信号
data['Signal'] = 0  # 初始化信号# 基于OBV和布林线的反转信号
data.loc[(data['OBV'] > data['OBV'].shift(1)) & (data['Close'] < data['BB_LOW']), 'Signal'] = 1  # 买入信号
data.loc[(data['OBV'] < data['OBV'].shift(1)) & (data['Close'] > data['BB_UP']), 'Signal'] = -1  # 卖出信号# 基于均线的趋势信号
data.loc[data['MA_Fast'] > data['MA_Slow'], 'Signal'] = 1  # 均线多头,增强买入信号
data.loc[data['MA_Fast'] < data['MA_Slow'], 'Signal'] = -1  # 均线空头,增强卖出信号# 简单的交易逻辑
data['Position'] = data['Signal'].shift(1)  # 当前持仓状态
data['Strategy_Return'] = data['Position'] * data['Close'].pct_change()  # 策略收益率# 绘制结果
plt.figure(figsize=(14, 8))
plt.plot(data['Close'], label='Close Price')
plt.plot(data['MA_Fast'], label='Fast MA')
plt.plot(data['MA_Slow'], label='Slow MA')
plt.plot(data['BB_UP'], label='BB_UP')
plt.plot(data['BB_MID'], label='BB_MID')
plt.plot(data['BB_LOW'], label='BB_LOW')
plt.scatter(data.index[data['Signal'] == 1], data['Close'][data['Signal'] == 1], color='green', label='Buy Signal')
plt.scatter(data.index[data['Signal'] == -1], data['Close'][data['Signal'] == -1], color='red', label='Sell Signal')
plt.legend()
plt.title('CTA Strategy with OBV, BBands, and MA')
plt.show()# 输出策略绩效
cumulative_return = (1 + data['Strategy_Return']).cumprod() - 1
print("Cumulative Return:", cumulative_return.iloc[-1])

指标总体策略

空仓时,若出现T+,则开多仓;若出现T-,则开空仓。

当前是多头时,若出现T-,则平多反手开空;T+若出现R-,则平多不开新仓。

当前是空头时,若出现T+,则平空反手开多;T-若出现R+,则平空不开新仓。

所有的信号均可以用能量E超过某阈值m来辅助,只有当E有效时,信号才有效。

 

相关文章:

CTA策略【量化理论】

CTA策略演变史 全称&#xff1a;Commodity Trading Advisor &#xff08;商品交易顾问&#xff09; CTA最开始是指通过为客户提供期权、期货方面的交易建议&#xff0c;或者直接通过受管理的期货账户参与实际交易&#xff0c;来获得收益的机构或个人。 随着市场的发展&#…...

基于AMD AU15P FPGA的SLVS-EC桥PCIe设计方案分享

作者&#xff1a;Hello,Panda 各位FPGAer周末愉快&#xff0c;今天熊猫君分享一个基于AMD AU15P FPGA的SLVS-EC桥PCIe设计方案。 一、方案背景 先说方案的应用背景&#xff1a;众所周知&#xff0c;较为上层的如基于AI的机器视觉应用&#xff0c;大多基于高端的专用SoC、AI专…...

②Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网

Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网https://item.taobao.com/item.htm?ftt&id784749793551 网关 MS-A1-5081 MS-A1-5081 网关通过 MODBUS TCP 协议与 Modbus RTU/ASCII 协议的相互转换&#xff0c;可以将 Modbus 串口设备接入 MODBUS TCP 网络…...

游戏引擎学习第145天

仓库:https://gitee.com/mrxiao_com/2d_game_3 今天的计划 目前&#xff0c;我们正在完成遗留的工作。当时我们已经将声音混合器&#xff08;sound mixer&#xff09;集成到了 SIMD 中&#xff0c;但由于一个小插曲&#xff0c;没有及时完成循环内部的部分。这个小插曲主要是…...

【Kotlin】Kotlin基础笔记

一、数据类型 1.1 变量声明与类型推导 变量声明 使用 val 声明不可变变量&#xff08;相当于常量&#xff09;&#xff1b;使用 var 声明可变变量。 val a 10 // 类型自动推断为 Int&#xff0c;不可变 var b: Double 5.0 // 显示声明为 Double&#xff0c;可变变量…...

Jump( 2015-2016 ACM-ICPC Northeastern European Regional Contest (NEERC 15). )

Jump( 2015-2016 ACM-ICPC Northeastern European Regional Contest (NEERC 15). ) 题目大意&#xff1a; 在这个交互式问题中&#xff0c;你需要通过查询系统&#xff0c;逐步找出隐藏的位字符串 S。给定一个偶数 n&#xff0c;表示目标位字符串 S 的长度&#xff0c;你需要通…...

uniapp uniCloud引发的血案(switchTab: Missing required args: “url“)!!!!!!!!!!

此文章懒得排版了&#xff0c;为了找出这个bug, 星期六的晚上我从9点查到0点多&#xff0c;此时我心中一万个草泥马在崩腾&#xff0c;超级想骂人&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; uniCloud 不想…...

【Linux】冯诺依曼体系与操作系统理解

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;Linux 目录 前言 一、冯诺依曼体系结构 二、操作系统 1. 操作系统的概念 2. 操作系统存在的意义 3. 操作系统的管理方式 4. 补充&#xff1a;理解系统调用…...

STM32之软件SPI

SPI传输更快&#xff0c;最大可达80MHz&#xff0c;而I2C最大只有3.4MHz。输入输出是分开的&#xff0c;可以同时输出输入。是同步全双工。仅支持一主多从。SS是从机选择线。每个从机一根。SPI无应答机制的设计。 注意&#xff1a;所有设备需要共地&#xff0c;时钟线主机输出&…...

Python零基础学习第三天:函数与数据结构

一、函数基础 函数是什么&#xff1f; 想象你每天都要重复做同一件事&#xff0c;比如泡咖啡。函数就像你写好的泡咖啡步骤说明书&#xff0c;每次需要时直接按步骤执行&#xff0c;不用重新想流程。 # 定义泡咖啡的函数 def make_coffee(sugar1): # 默认加1勺糖 print("…...

启动wsl里的Ubuntu24报错:当前计算机配置不支持 WSL2,HCS_E_HYPERV_NOT_INSTALLED

问题&#xff1a;启动wsl里的Ubuntu24报错 报错信息&#xff1a; 当前计算机配置不支持 WSL2。 请启用“虚拟机平台”可选组件&#xff0c;并确保在 BIOS 中启用虚拟化。 通过运行以下命令启用“虚拟机平台”: wsl.exe --install --no-distribution 有关信息&#xff0c;请访…...

顶点着色器和片段着色器

在Unity渲染中&#xff0c;**顶点着色器&#xff08;Vertex Shader&#xff09;和片段着色器&#xff08;Fragment Shader&#xff09;**是图形渲染管线中的两个核心阶段。我们可以通过一个比喻来理解它们的分工&#xff1a;想象你要画一幅由三角形组成的3D模型&#xff0c;顶点…...

std::optional详解

基础介绍 c17版本引入了std::optional特性&#xff0c;这一个类模板&#xff0c;基本的使用方法如下&#xff1a; std::optional<T> 这个新特性的含义是利用std::optional<T>创建的某个类型的对象&#xff0c;这个对象存储某个类型的值&#xff0c;这个值可能存在…...

Web三件套学习笔记

<!-- HTML --> HTML是超文本标记语言 1、html常用标签 块级标签 独占一行 可以设置宽度&#xff0c;高度&#xff0c;margin,padding 宽度默认所在容器的宽度 标签作用table定义表格h1 ~ h6定义标题hr定义一条水平线p定义段落li标签定义列表项目ul定义无序列表ol定…...

Scala 中trait的线性化规则(Linearization Rule)和 super 的调用行为

在 Scala 中&#xff0c;特质&#xff08;Trait&#xff09;是一种强大的工具&#xff0c;用于实现代码的复用和组合。当一个类混入&#xff08;with&#xff09;多个特质时&#xff0c;可能会出现方法冲突的情况。为了解决这种冲突&#xff0c;Scala 引入了最右优先原则&#…...

C++入门——引用

C入门——引用 一、引用的概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。这就好比《水浒传》中&#xff0c;一百零八位好汉都有自己的绰号。通过&…...

深度学习模型组件之优化器—Lookahead:通过“快慢”两组优化器协同工作,提升训练稳定性

深度学习模型组件之优化器—Lookahead&#xff1a;通过“快/慢”两组优化器协同工作&#xff0c;提升训练稳定性 文章目录 深度学习模型组件之优化器—Lookahead&#xff1a;通过“快/慢”两组优化器协同工作&#xff0c;提升训练稳定性1. Lookahead优化器的背景2. Lookahead优…...

K8s 1.27.1 实战系列(五)Namespace

Kubernetes 1.27.1 中的 ​Namespace​(命名空间)是集群中实现多租户资源隔离的核心机制。以下从功能、操作、配置及实践角度进行详细解析: 一、核心功能与特性 ​1、资源隔离 Namespace 将集群资源划分为逻辑组,实现 Pod、Service、Deployment 等资源的虚拟隔离。例如,…...

Spring Boot整合ArangoDB教程

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、环境准备 JDK 17Maven 3.8Spring Boot 3.2ArangoDB 3.11&#xff08;本地安装或Docker运行&#xff09; Docker启动ArangoDB docker run -d --name ar…...

虚幻基础:动画层接口

文章目录 动画层&#xff1a;动画图表中的函数接口&#xff1a;名字&#xff0c;没有实现。动画层接口&#xff1a;由动画蓝图实现1.动画层可直接调用实现功能2.动画层接口必须安装3.动画层默认使用本身实现4.动画层也可使用其他动画蓝图实现&#xff0c;但必须在角色蓝图中关联…...

Python基础语法:访问器@property和修改器@xxx.setter

一、简介 访问器和修改器也是装饰器的一种。 property: 访问器&#xff0c;getter xxx.setter: 修改器&#xff0c;setter 访问器和修改器的根本目的是想将属性私有化&#xff0c;提供getter&setter去访问。 访问器和修改器能够做到访问属性其实在调用getter方法&#xff0…...

Taotoken的TokenPlan套餐如何实现更经济的模型调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken的TokenPlan套餐如何实现更经济的模型调用 1. 理解TokenPlan的计费模式 在模型应用开发过程中&#xff0c;成本的可预测性…...

从Gamma函数到泊松分布:一个概率论中的含参量积分实用案例解析

Gamma函数与泊松分布&#xff1a;概率论中的数学之美 在数据科学和机器学习的实践中&#xff0c;概率分布构成了建模的基石。当我们深入探究这些分布背后的数学原理时&#xff0c;Gamma函数以其优雅的性质和广泛的应用脱颖而出。它不仅连接了离散与连续概率世界&#xff0c;更在…...

浏览器 Profile 环境排查:Cookie、LocalStorage、网络出口与自动化任务配置清单

一、为什么浏览器环境经常“今天能用&#xff0c;明天失效”很多团队遇到登录状态丢失、页面配置异常、自动化任务失败时&#xff0c;会先怀疑网络、脚本或系统本身。但在实际项目里&#xff0c;问题经常不是单点故障&#xff0c;而是浏览器环境缺少稳定管理&#xff1a;对象常…...

三十岁想从零转行现实吗?带你分辨真正有前景的好工作

![](https://img-blog.csdnimg.cn/direct/b0bfa28b59f9478dae4e6feee6659cce.png)我是29岁那年&#xff0c;完成从转行裸辞副业的职业转型。 如果你把职业生涯看成是从现在开始30岁&#xff0c;到你退休那年&#xff0c;中间这么漫长的30年&#xff0c;那么30岁转行完全来得及…...

对比 Token Plan 与按量计费在 Taotoken 平台上的成本体感差异

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比 Token Plan 与按量计费在 Taotoken 平台上的成本体感差异 对于个人开发者或项目管理者而言&#xff0c;在接入大模型服务时&a…...

使用TaotokenCLI工具一键配置开发环境中的API密钥

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用Taotoken CLI工具一键配置开发环境中的API密钥 在团队协作或个人开发中&#xff0c;为每个项目或成员手动配置大模型API密钥和…...

长期使用Token Plan套餐在项目开发中的成本观察

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 长期使用Token Plan套餐在项目开发中的成本观察 在AI驱动的项目开发中&#xff0c;成本控制与预算管理是团队负责人必须面对的现实…...

告别Postman!用APIfox搞定接口测试+自动化,这份保姆级教程带你从环境配置到报告生成

从Postman到APIfox&#xff1a;接口测试自动化的高效迁移指南如果你还在为接口测试中的重复劳动和多环境切换头疼&#xff0c;是时候考虑从Postman迁移到APIfox了。作为一名经历过这个转型过程的开发者&#xff0c;我想分享一些实战经验&#xff0c;帮助你平滑过渡并最大化利用…...

InVideo插件深度解析:如何在Unreal Engine中实现高效视频流播放与录制

InVideo插件深度解析&#xff1a;如何在Unreal Engine中实现高效视频流播放与录制 【免费下载链接】InVideo 基于UE4实现的rtsp的视频播放插件 项目地址: https://gitcode.com/gh_mirrors/in/InVideo InVideo是一个基于Unreal Engine 5开发的RTSP视频播放插件&#xff0…...