这是我第一篇博客,也是我的本科毕业课题--开发一个简易的量化系统,包括择时选股模块和回测模块。

所谓的量化系统,是指以数学模型代替人为判断,以程序交易替代人为操作,利用计算机的庞大的计算能力,制定能带来超额收益的交易策略。

由于之前没有开发相关系统的经验,我决定先从一个开源的量化系统开始学习,以python作为主要开发语言,同时学习python和量化知识。我选择阿布量化系统作为开发模板,学习配套书籍量化交易之路。Github地址:https://github.com/bbfamily/abu 这一系列笔记将从书本第七章量化系统入门开始,学习书上所有的例程。

趋势跟踪策略

趋势跟踪模型是大名鼎鼎的海归交易法则里面提到的一个经典量化模型,基本的策略是在一个上扬趋势刚刚开始的时候买入,在这个趋势即将结束之前退出系统。

首先我们选取苹果的历史两年股票数据作为数据来源:

from abupy import ABuSymbolPd
Apple_pd = ABuSymbolPd.make_kl_df('AAPL', n_folds=2)
Apple_pd.tail()

通过Apple_pd.tail()查看股票的数据结构和尾部数据如下图,可以看到包括close, high, low, p_change, open, pre_close,volume, date, date_week, key,atr21,atr14 等列 ,我们目前主要需要的是开盘价,最高价,最低价,收盘价,振幅的数据。

接下来使用seaborn库画出可视化的振幅变化图:

sns.set_context(rc={'figure.figzize':(14,7)})
sns.regplot(x=np.arange(0, Apple_pd.shape[0]),y=Apple_pd.close.values,marker='+')
plt.show()

下面使用abu内置的函数计算趋势角度方向:

start = 0
# 前1/4的数据
end = int(Apple_pd.shape[0] / 4)
# 将x也使用arange切割
x = np.arange(start, end)
# y根据start,end进行切片
y = Apple_pd.close.values[start:end]
sns.regplot(x=x, y=y, marker='+')
plt.show()
deg = ABuRegUtil.calc_regress_deg(y)
print('趋势角度:' + str(deg))

得到下面的结果,可以看出前四分之一的股价呈现明显的上升趋势,且趋势角度为8.98:

经过初步分析,对这一段的数据,可以使用趋势跟踪策略,下面编写一个简单的趋势跟踪策略模型,趋势跟踪模型的两个参数是买入信号和卖出信号的确定,当天的收盘价格超过N天的最高价格作为买入持有信号,收盘价格低于N天的最低价格作为卖出抛售信号。首先设置42天的最高价格和21天的最低价格作为阈值,设置两个不同的阈值主要是为了保证非均衡的胜负收益。

# 当天收盘价格超过N1天内最高价格作为买入信号
N1 = 42
# 当天收盘价格超过N2天内最低价格作为卖出信号
N2 = 21
# 通过rolling_max方法计算最近N1个交易日的最高价
from abupy import pd_rolling_max,pd_expanding_max,pd_rolling_min, pd_expanding_min
Apple_pd['n1_high'] = pd_rolling_max(Apple_pd['high'], window=N1)
expan_max = pd_expanding_max(Apple_pd['close'])
# fillna使用序列对应的expan_max
Apple_pd['n1_high'].fillna(value=expan_max, inplace=True)
Apple_pd['n2_low'] = pd_rolling_min(Apple_pd['low'], window=N2)
# expanding_min与expanding_max类似
expan_min = pd_expanding_min(Apple_pd['close'])
# fillna使用序列对应的eexpan_min
Apple_pd['n2_low'].fillna(value=expan_min, inplace=True)
# 当天收盘价格超过N天内的最高价或最低价, 超过最高价格作为买入信号买入股票持有
buy_index = Apple_pd[Apple_pd['close'] > Apple_pd['n1_high'].shift(1)].index
Apple_pd.loc[buy_index, 'signal'] = 1# 当天收盘价格超过N天内的最高价或最低价, 超过最低价格作为卖出信号
sell_index = Apple_pd[Apple_pd['close'] < Apple_pd['n2_low'].shift(1)].index
Apple_pd.loc[sell_index, 'signal'] = 0Apple_pd[0:5]

得到扩展后的新的股票数据:

接下来将操作信号转化成持股状态,计算基准收益,计算使用趋势突破策略的收益之后可视化收益情况:

"""将信号操作序列移动一个单位,代表第二天再将操作信号执行,转换得到持股状态这里不shift(1)也可以,代表信号产生当天执行,但是由于收盘价格是在收盘后才确定的,计算突破使用了收盘价格,所以使用shift(1)更接近真实情况
"""
Apple_pd['keep'] = Apple_pd['signal'].shift(1)
Apple_pd['keep'].fillna(method='ffill', inplace=True)# 计算基准收益
Apple_pd['benchmark_profit'] = np.log(Apple_pd['close'] / Apple_pd['close'].shift(1))# 计算使用趋势突破策略的收益
Apple_pd['trend_profit'] = Apple_pd['keep'] * Apple_pd['benchmark_profit']# 可视化收益的情况对比
Apple_pd[['benchmark_profit', 'trend_profit']].cumsum().plot(grid=True,figsize=(14, 7));

得到如下的结果:

可以看出使用趋跟踪策略的盈利率略微高于benchmark值,但是还是处于负收益率期间,主要原因是测试数据整个阶段的股价处于下降阶段,仅仅一个趋势跟踪策略并不能违反市场盈利情况。

总结

一个单一的策略往往适用范围有限,考虑到股价在不同的阶段可能会处于不同的波动类型,如果能有更高级的策略模型用来判断股价的基本类型,从而对于不同的变化类型使用不同的子策略,可能会有不错的效果。Numpy, Pandas,Matplotlib, Seaborn是常用于Python量化系统的库,需要大量练习,重点掌握。

菜鸟de量化之路——(1)趋势跟踪策略相关推荐

  1. python:chatGPT 写一个趋势跟踪策略 量化交易程序

    chatGPT:趋势跟踪策略的量化交易程序可能会因语言和框架而异,下面是一个简单的Python代码示例,用于演示如何通过量化编程来实现趋势跟踪策略. 这段代码是一个简单的策略实现,它读取股票数据并计算 ...

  2. 趋势跟踪策略在专业量化交易策略中的地位

    Vincent Leiberich:趋势策略简单有效.回撤有时候的确很大,但是抗一抗总能过去了.因此很多专业机构都用趋势跟踪策略.我敢说,国内"只用"趋势跟踪策略的期货私募应该一抓 ...

  3. 股票个人量化交易接口最常见的趋势跟踪策略

    趋势跟踪策略相对于高频策略和统计套利类的策略来说风险就相对较大了,这是因为该策略风险敞口暴露较多. 我们在市面上常见的比如Smart Beta策略,CTA趋势跟踪策略和股票指数增强都是属于这种风险敞口 ...

  4. 商品期货CTA策略系列文章 -- 主流量化CTA策略之趋势跟踪策略

    2016年之前,大宗商品市场一直低迷,南华商品指数年涨跌幅在2014年为-16.54%,在2015年为-14.52%,这两年间股票市场不断创造历史新高而整个商品市场却持续下跌,在2015年股市一波&q ...

  5. 趋势跟踪策略失效了,哈丁和他的元盛该怎么办?

    趋势跟踪策略失效了,哈丁和他的元盛该怎么办? CTA基金网 昨天 东英资管/作者 全球对冲汇/来源 哈丁和他的元盛,该怎么办? 01 /// 最受欢迎的交易策略之一,失败了 大卫•哈丁(David H ...

  6. 如何追踪期货趋势跟踪策略的表现

    来源: Chihiro Quantitative Research 作者:刀疤连 趋势跟踪策略,学术上又被称为时间序列动量(time series momentum),在CTA基金中被广泛使用,也是多 ...

  7. 83、【backtrader期货策略】一个国债期货的日线趋势跟踪策略

    有读者咨询怎么获取国债期货的数据以及如何用国债期货做一个交易策略,并且指定其中要涉及到移仓换月,交易逻辑和64.[backtrader期货策略]基于macd与ema的趋势跟踪策略(真实回测-2021- ...

  8. 外汇经典交易策略,最基本的趋势跟踪策略

    在所有的经典交易策略中,趋势跟随策略可以说是非常主流的策略,趋势跟随策略一直是盈利能力非常强的交易的策略,往往可以出现较大盈利的策略一般都有趋势跟随的影子,毕竟交易的一条基本准则就是:顺势而为.下面我 ...

  9. 金融量化-基于K线形态锤子线的趋势跟踪策略

    1.基本原理 1.1 K线部位定义: 实体:某一根K线开盘价和收盘价之间部分; 上影线:某一根K线最高价到实体上端的部分; 下影线:某一根K线最低价到实体下端的部分; 1.2 锤子线定义 实体处于整个 ...

最新文章

  1. oracle按照时间过滤
  2. golang 协程同步 简介
  3. T-SQL 将存储过程结果插入到表中
  4. 基于ssm的用户管理系统_基于SSM的高校学生实习管理系统
  5. PHP连接mysql8.0出错“SQLSTATE[HY000] [2054] The server requested authentication method unknown to”的解决办法
  6. h1、h2、h3标签及strong标签对页面seo的影响
  7. 阅读笔记 火球UML大战需求分析4
  8. 华为P30真机屏幕盖板曝光:超窄边框水滴屏
  9. nodejs操作mysql查询返回的数据_nodejs连接mysql进行数据库查询返回前台数据的坑...
  10. 中小企业上云多地域办公组网(SAG)解决方案
  11. Vue 中的计算属性,方法,监听器
  12. pda通用扫描app_手持终端PDA盘点机盘点软件盘点APP
  13. 复合梯形法求积分c语言,复合梯形公式求积分
  14. JavaWeb解决中文下载出现乱码问题
  15. 我的世界刷猪人塔java版_我的世界1.11.2自动猪人塔制作指南 猪人塔存档下载 | 我的世界 | MC世界侠...
  16. Filter过滤器(详细使用方法)
  17. formality 命令/变量的使用及各种设置
  18. 目标检测、追踪梳理:帧差法、光流法、背景减除法
  19. 【墨天轮】openGausss数据库有奖征文活动开始啦!华为平板、京东购物卡等你拿!
  20. 芯盾时代:一种会思考的新一代安全身份认证方式

热门文章

  1. 超级时间整理术:每天多出一小时
  2. DA14580开发工具的下载与使用
  3. 缩进text-indent标签造成图片也缩进解决方案
  4. Linux自动化密码输入
  5. 关于手机安全卫士开发详解
  6. Oracle19客户端下载安装步骤
  7. 超长整数加法c语言,两个超长正整数的加法
  8. 搭建阿里云Windows版服务器+使用宝塔安装MySQL数据库+本地Navicat访问数据库(增删改查)——详细流程
  9. 隐藏键盘_吊打苹果官方键盘?ipad第三方磁吸可拆卸键盘评测
  10. 威学一百_威学一百安卓版下载|威学一百app下载_v1.0.3_9ht安卓下载