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

量化交易:借助talib使用技术分析指标

什么是技术分析?

所谓股票的技术分析,是相对于基本面分析而言的。基本分析法着重于对一般经济情况以及各个公司的经营管理状况、行业动态等因素进行分析,以此来研究股票的价值,衡量股价的高低。而技术分析则是透过图表或技术指标的记录,研究市场过去及现在的行为反应,以推测未来价格的变动趋势。其依据的技术指标的主要内容是由股价、成交量或涨跌指数等数据计算而得的,技术分析只关心证券市场本身的变化,而不考虑会对其产生某种影响的经济方面、政治方面的等各种外部的因素。

什么是talib?

talib的简称是Technical Analysis Library,主要功能是计算股价的技术分析指标。先简单看看talib都给我们提供了那些计算技术指标的函数,按技术指标的类型示例如下:

函数名:CDL2CROWS 名称:Two Crows 两只乌鸦 简介:三日K线模式,第一天长阳,第二天高开收阴,第三天再次高开继续收阴,收盘比前一日收盘价低,预示股价下跌。 例子:integer = CDL2CROWS(open, high, low, close)

函数名:CDL3STARSINSOUTH 名称:Three Stars In The South 南方三星 简介:三日K线模式,与大敌当前相反,三日K线皆阴,第一日有长下影线,第二日与第一日类似,K线整体小于第一日,第三日无下影线实体信号,成交价格都在第一日振幅之内,预示下跌趋势反转,股价上升。 例子:integer = CDL3STARSINSOUTH(open, high, low, close)

函数名 : MA 名称:Moving average 移动平均值 简介:移动平均值是在一定范围内的价格平均值 例子:ma = MA(close, timeperiod=30, matype=0)

函数名:ADX 名称:Average Directional Movement Index 平均趋向指数 简介:ADX指数是反映趋向变动的程度,而不是方向的本身。 例子:adx = ADX(high, low, close, timeperiod=14)

函数名:ATR 名称:Average True Range 平均真实波幅 简介:主要用来衡量价格的波动。因此,这一技术指标并不能直接反映价格走向及其趋势稳定性,而只是表明价格波动的程度。 例子:atr = ATR(high, low, close, timeperiod=14)

函数名:OBV 名称:On Balance Volume 能量潮 简介:通过统计成交量变动的趋势推测股价趋势 计算公式:以某日为基期,逐日累计每日上市股票总成交量,若隔日指数或股票上涨,则基期OBV加上本日成交量为本日OBV。隔日指数或股票下跌,则基期OBV减去本日成交量为本日OBV 例子:obv = OBV(close, volume)

由于篇幅有限,技术分析指标不能在此充分介绍,可以参考talib官方文档

如何使用:MA实例

  • 已知MA这个函数的调用方式为:ma = MA(close, timeperiod=30, matype=0)

  • close表示收盘价序列,timeperiod指定义好均线的计算长度即几日均线,不输入的话,默认为30日, matype可以默认不用输入,然后就可以得到均线的值

  • 因此简单来讲,只取获取收盘价,就可以轻松计算移动平均值

下面以平安银行(000001.SZA)为例进行说明:

# 获取数据
df = D.history_data(['000001.SZA'],'2015-12-01','2016-02-20',fields=['date','close']).set_index('date')
# 通过rolling_mean函数计算移动平均值(方法1)
df['MA10_rolling'] = pd.rolling_mean(df['close'],10)
# 将价格数据转化成float类型
close = [float(x) for x in df['close']]
# 通过talib计算移动平均值(方法2)
df['MA10_talib'] = talib.MA(np.array(close), timeperiod=10) 
# 检查两种方法计算结果是否一致
df.tail(12)

 计算结果如下所示:

就这样很方便的计算出了移动平均线的值,接下来我们计算下稍微复杂一点的EMA和MACD

# 调用talib计算6日指数移动平均线的值
df['EMA12'] = talib.EMA(np.array(close), timeperiod=6)  
df['EMA26'] = talib.EMA(np.array(close), timeperiod=12)   # 调用talib计算MACD指标
df['MACD'],df['MACDsignal'],df['MACDhist'] = talib.MACD(np.array(close),fastperiod=6, slowperiod=12, signalperiod=9)   
df.tail(12)

补充说明一下,close是收盘价,timeperiod指的是指数移动平均线EMA的长度,fastperiod指更短时段的EMA的长度,slowperiod指更长时段的EMA的长度,signalperiod指DEA长度

策略实战:MACD策略

  • 当macd下穿signal时,卖出股票

  • 当macd上穿signal时,买入股票

完整的策略如下:

技术分析指标策略: 基于MACD指标

1. 策略参数

import talib
instruments = ['000651.SZA'] #以格力电器为例
start_date = '2010-09-16'# 起始时间    
end_date = '2017-11-08' # 结束时间

2. 策略主体

def initialize(context):context.set_commission(PerDollar(0.0015)) # 手续费设置# 需要设置计算MACD的相关参数参数context.short = 12context.long = 26context.smoothperiod = 9context.observation = 100def handle_data(context, data):if context.trading_day_index < 100: # 在100个交易日以后才开始真正运行 returnsid = context.symbol(instruments[0])# 获取价格数据prices = data.history(sid, 'price', context.observation, '1d')# 用Talib计算MACD取值,得到三个时间序列数组,分别为macd, signal 和 histmacd, signal, hist = talib.MACD(np.array(prices), context.short,context.long, context.smoothperiod)# 计算现在portfolio中股票的仓位cur_position = context.portfolio.positions[sid].amount# 策略逻辑# 卖出逻辑 macd下穿signalif macd[-1] - signal[-1] < 0 and macd[-2] - signal[-2] > 0:# 进行清仓if cur_position > 0 and data.can_trade(sid):context.order_target_value(sid, 0)# 买入逻辑  macd上穿signalif macd[-1] - signal[-1] > 0 and macd[-2] - signal[-2] < 0:# 买入股票if cur_position == 0 and data.can_trade(sid):context.order_target_percent(sid, 1)

3. 回测接口

m=M.trade.v3( instruments=instruments,start_date=start_date,end_date=end_date,initialize=initialize,handle_data=handle_data,order_price_field_buy='open',order_price_field_sell='open',capital_base=float("1.0e6"),benchmark='000300.INDX',
)

相关文章:

  • Python字典六种类型概述
  • 和解电话(匿名电话)/情侣拉黑联系电话/虚拟号/虚拟中间号/拉黑联系项目代码
  • 直流电机干扰的产生-EMC和EMI
  • Linux的简单使用
  • ATTCK实战系列——红队实战(一)
  • 生成对抗网络(GAN)
  • 云服务器windows service2022 部署git服务器
  • 【开题报告】基于SpringBoot的中小企业设备管理系统的设计与实现
  • Linux使用ifconifg命令,没有显示ens33
  • 数据结构:反射
  • Java的JDBC编程
  • 集合框架面试题
  • Kubernetes(k8s)进阶
  • Apache Airflow (九) :Airflow Operators及案例之BashOperator及调度Shell命令及脚本
  • 创芯科技USB_CAN【库文件】
  • 【译】JS基础算法脚本:字符串结尾
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 10个最佳ES6特性 ES7与ES8的特性
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • canvas 绘制双线技巧
  • input的行数自动增减
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • MySQL几个简单SQL的优化
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • SpringBoot 实战 (三) | 配置文件详解
  • Terraform入门 - 3. 变更基础设施
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 给Prometheus造假数据的方法
  • 前端知识点整理(待续)
  • 使用SAX解析XML
  • 推荐一个React的管理后台框架
  • 微信小程序:实现悬浮返回和分享按钮
  • 无服务器化是企业 IT 架构的未来吗?
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 积累各种好的链接
  • ​queue --- 一个同步的队列类​
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • $().each和$.each的区别
  • $.ajax中的eval及dataType
  • (07)Hive——窗口函数详解
  • (1)常见O(n^2)排序算法解析
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (Forward) Music Player: From UI Proposal to Code
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (待修改)PyG安装步骤
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (黑马C++)L06 重载与继承
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转) Face-Resources
  • (转)Linq学习笔记
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网