seo网站推广培训,编程网页,怎么建设一个外国网站,如何做好一个营销方案CTA策略演变史
全称#xff1a;Commodity Trading Advisor #xff08;商品交易顾问#xff09;
CTA最开始是指通过为客户提供期权、期货方面的交易建议#xff0c;或者直接通过受管理的期货账户参与实际交易#xff0c;来获得收益的机构或个人。
随着市场的发展#…CTA策略演变史
全称Commodity Trading Advisor 商品交易顾问
CTA最开始是指通过为客户提供期权、期货方面的交易建议或者直接通过受管理的期货账户参与实际交易来获得收益的机构或个人。
随着市场的发展市场对CTA的理解普遍发生了改变它已不再是商品期货而是基于量价的趋势跟踪策略——无论是商品期货、金融期货还是股票、外汇只要是有历史公开量价的二级市场都可以成为CTA策略运作的市场。 在国内市场中期货相比股票交易起来的限制较小t0交易且可以做空因此推荐用期货来学习 趋势跟踪策略是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但保持价差宽度不变。
例如本来的收盘价1010100012001170——其中1000到1200就是由假跳空导致的这时我们就把后面的两个序列减去200得到新的收盘价101010001000930这种处理方法的优点是价格序列整体简洁缺点是收益率会出现偏差要让收益率不会出现偏差我们可以采用乘除复权法也就是在原来的数字上乘上一个因子比如在刚刚举例的1010100012001170序列当中就可以把后面的两个数字乘上1/1.2这样就得到了连续时收益率不变的新序列101010001000975 前复权就是对前面的数据复权后复权就是对后面的数据复权 法三的主要缺点是容易造成数据损失 在这里给大家介绍一个比较成熟的库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, matypeMA_Type.T3)
可以计算其布林线
output talib.MOM(close, timeperiod5)
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_colDate, parse_datesTrue)
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], timeperiodbbands_period, nbdevupstd_dev, nbdevdnstd_dev)# 计算均线趋势指标T
data[MA_Fast] ta.SMA(data[Close], timeperiodfast_ma_period)
data[MA_Slow] ta.SMA(data[Close], timeperiodslow_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], labelClose Price)
plt.plot(data[MA_Fast], labelFast MA)
plt.plot(data[MA_Slow], labelSlow MA)
plt.plot(data[BB_UP], labelBB_UP)
plt.plot(data[BB_MID], labelBB_MID)
plt.plot(data[BB_LOW], labelBB_LOW)
plt.scatter(data.index[data[Signal] 1], data[Close][data[Signal] 1], colorgreen, labelBuy Signal)
plt.scatter(data.index[data[Signal] -1], data[Close][data[Signal] -1], colorred, labelSell 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有效时信号才有效。