解释:

  • 下面定义了四个函数。但是,其实只用了第一个函数,跟最后一个函数。这两个函数是必有的。
  • 多定义的这几个函数 getPrice,跟getRolling 也是比较简单的。
  • 除开这两个自定的函数外,另外两个函数,相信,看到了我做的注释之后,看起来会简单很多。(后续,如果想看对于这个两个自定函数的分析。除了看上面的注释之外,我在最后也会做解释的~

代码

import talib# 初始化函数
def init(context):  # 设置参数context.s1 = "000001.XSHE" context.SHORTPERIOD = 12 # EMA 快context.LONGPERIOD = 26  # EMA 慢context.SMOOTHPERIOD = 9context.OBSERVATION = 100  # 查看的天数,这个在后面会用到# 用户自定义函数
def getPrice():  # 封装好米矿的API,这里是获取数据stocks_name='沪深300'start_date='2016-10-01'end_date='2017-10-13'
#   fields=['ClosingPx']#选择沪深300里面所有的股票代码stocks=index_components(stocks_name)#正式获取股票价格stock_price=get_price(stocks,start_date=start_date,end_date=end_date,fields=fields)#获得沪深300指数benchmark_name='399300.XSHE'benchmark_price=get_price(benchmark_name,start_date=start_date,end_date=end_date,fields=fields)return stock_price,benchmark_price,stocks#  用户自定义函数
def getRolling(data,shortPeriod,longPeriod):  # 这里假设的是data是一个dataframe.for i in range(len(data.ix[1])):col=data.ix[:,i]name=data.columns[i]data[name+'_'+str(shortPeriod)+'days']=col.rolling(window=shortPeriod).mean()data[name+'_'+str(longPeriod)+'days']=col.rolling(window=longPeriod).mean()return data#  上面两个用户自定义函数,在这个策略中都没有用到~# 操作函数
def handle_bar(context, bar_dict):prices = history_bars(context.s1, context.OBSERVATION, '1d', 'close')# 得到目前前 OBSERVATION天的日收盘价macd, signal, hist = talib.MACD(prices, context.SHORTPERIOD, context.LONGPERIOD, context.SMOOTHPERIOD)# 这里的返回值 macd 就是离差值DIF = EMA12 - EMA26# 这里的返回值 signal 就是离差平均值DEA ## [-1]得到的是当前的值, [-2]是指前一天的数值if macd[-1] - signal[-1] > 0 and macd[-2] - signal[-2] < 0:# 满仓入股order_target_percent(context.s1, 1)  # 仓位调整,肠胃的目标比例价值为目标# 投资组合中的百分比# logger.info(context.introduction)context.day = 0if macd[-1] - signal[-1] < 0 and macd[-2] - signal[-2] > 0:# 获取该股票的仓位curPosition = context.portfolio.positions[context.s1].quantity# context.portfolio是类自带元素(同样是一个类)类内元素,通过之前设计股票代码来进行寻找(寻找的函数就是positions).通过quantity 来进行查询量# 清仓if curPosition > 0:order_target_value(context.s1, 0)  # 仓位调整,价值调整。后面是目标价值(在投资中)

自定义函数解释

获得价格的函数

# 用户自定义函数
def getPrice():  # 封装好米矿的API,这里是获取数据stocks_name='沪深300'start_date='2016-10-01'end_date='2017-10-13'
#   fields=['ClosingPx']#选择沪深300里面所有的股票代码stocks=index_components(stocks_name)#正式获取股票价格stock_price=get_price(stocks,start_date=start_date,end_date=end_date,fields=fields)#获得沪深300指数benchmark_name='399300.XSHE'benchmark_price=get_price(benchmark_name,start_date=start_date,end_date=end_date,fields=fields)return stock_price,benchmark_price,stocks
  • 这个函数用了一些简单的API。分别是:index_components, 跟get_price
  • get_price, 这个函数就是字面意思,获取价格。前面放的是股票的代码。 然后设置起始日期跟终止日期。最后一个fields是返回字段名称。然后这里的这个代码那选择了注释的原因是,米矿的API做了修改。不再是ClosingPx,而是close,这样来表示收盘价。 为什么要设置这个呢?主要是数据会比较多,所以建议还是选择好特定的列嘛。这样会比较简单。还有其他的意思。这个可以在API中查,还是很详细的~
  • index_components : 是获取一个指数的所有股票代码。这里用的是查沪深300的所有股票代码

getRolling函数

  • 这里其实是假设用到了pandas库的。很明显,data.ix[] 这是pandas中dataFrame的典型函数。(当然啦,也不排除是其他库的可能,但用Python的经验告诉我,这就是pandas)
  • dataframe的组成那些,我就不在这里多嘴了。如果不嫌弃,大家也可以在我的数据分析可以博客分栏中可以找到吧。当然网上玩pandas比我玩的溜的大神也是一大把的 hh
  • 这个函数主要用了dataframe.ix[]函数。dataframe.columns函数。Series.rolling函数。
  • 具体的话,可以在pandas官网上查,或者百度,google都可以。pandas官网,点击访问
#  用户自定义函数
def getRolling(data,shortPeriod,longPeriod):  # 这里假设的是data是一个dataframe.for i in range(len(data.ix[1])):col=data.ix[:,i]name=data.columns[i]data[name+'_'+str(shortPeriod)+'days']=col.rolling(window=shortPeriod).mean()data[name+'_'+str(longPeriod)+'days']=col.rolling(window=longPeriod).mean()return data

希望,看到这篇博文能给一部分人帮助,成为一个又一个Quanter吧~

附上一篇关于rolling函数的解析~
https://blog.csdn.net/wj1066/article/details/78853717

Ricequant米矿【MACD策略代码解释】量化交易相关推荐

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

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

  2. python量化交易策略实例_python量化交易策略入门(一):MACD的威力

    最近刚开始学习量化交易,在聚宽网上看了几篇教程,对操作流程有了大致的了解,接下来打算好好研究一下交易策略. 据大奖章基金的Simons透露,他那个每年收益率20%以上的系统,一点都不费解(compli ...

  3. matlab布林算法代码,MATLAB量化交易策略源码分享之 布林通道+高低点

    策略原理: 通过布林带以及突破后的高低点的形成产生交易信号 采取跟踪止损出场 回测曲线: 2017-2-27 10:09:43 上传 下载附件 (65.41 KB) 策略代码: function  S ...

  4. python历史性分布计算代码_量化交易中,如何使用Python计算「筹码分布」指标【附代码】 [量化小讲堂-64]...

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总] 请点击此处 这是邢不行第  64 ...

  5. python 天勤 金叉 编程代码_Python量化交易工具之#39;自适应#39;跟踪止盈算法,进阶必看!...

    点及财经,股票期货专业投机者. 这期文章,作者主要给大家分享,如何用Python 代码编写双均线策略,然后在策略中采用加速算法跟踪止盈作为出场方式,并回测. 前言 俗话说,会买的是徒弟,会卖的是师父, ...

  6. python量化交易通达信_通达信交易策略,通达信量化交易

    内容导航: Q1:通达信交易策略公式 满足gg后出现aa卖出 DIF:=EMA(CLOSE,12)-EMA(CLOSE,26); DEA:=EMA(DIF,9); MACD:=(DIF-DEA)*2; ...

  7. 打造稳健的MT4 黄金交易策略,挑战1年翻3倍不爆仓的量化交易EA(附mql4程序)

    附上两个ea: 1.easy deal: 源码iEasy-Deal: mt4/mt5 黄金自动量化交易EA,高频交易单单清,没有浮亏 (gitee.com) 2.Nerve Knife(本文ea) ( ...

  8. 量化交易主要有哪些经典的策略?

    一.交易策略 一个完整的交易策略一般包括交易标的的选择,进出场时机的选择,仓位和资金管理等几个方面. 按照人的主观决断和计算机算法执行在策略各方面的决策中的参与程度的不同,可以将交易策略分为主观策略和 ...

  9. Python机器学习与量化交易

    文章目录 1. 量化交易简介 1.1 量化交易的历史 1.2 什么是量化交易 1.3 量化交易分类 1.4 金融产品及衍生品的投资策略 1.5 量化交易的优势 1.6 如何做量化交易项目 2. 量化回 ...

  10. 比特币量化交易:利用Python构建自己的算法交易系统

    随着科技的不断发展,传统的手工交易已经不再是唯一的路径,自动化交易系统越来越受到投资者们的欢迎.尤其是在高频率交易中,精细的算法能够让交易决策更快速.准确和有效. 本文将介绍以比特币为例,如何使用Py ...

最新文章

  1. 可伸缩性架构常用技术——之数据切分
  2. 后端开挂:3行代码 = 8个接口
  3. 不得不看的17 个linux实用技巧
  4. Spring3 MVC Login Interceptor(Spring 拦截器)
  5. PHP常用的缓存技术汇总
  6. C# 序列化技术详解《转》
  7. 大工20春计算机文化基础在线测试2,大工20春《计算机文化基础》在线测试2
  8. t470键盘拆解_Thinkpad 二手T470笔记本拆解|支持双硬盘|拆机教程
  9. vue——回到顶部监听滚动事件
  10. scrapy爬取时出现错误:Forbidden by robots.txt: <GET https://www.xinpianchang.com/channel/index/sor
  11. 爬取人民日报_抓取人民日报
  12. Keil RTX 系统函数 定义
  13. TCX推出前沿货币债券指数
  14. 今年9月开学!香港科技大学(广州)人工智能专业已开始招生!
  15. 大牛项目经理10年经验分享!
  16. 准确率、召回率和F值的概念和计算
  17. 班级纪念册php源码,我们的班级毕业纪念册个人主页怎么做好
  18. Android 音频系统播放延迟时间获取(latency)
  19. 豌豆荚范怀宇:我们在豌豆荚2.0重构时遇到的坑
  20. ICCV2021 Group-Free 3D Object Detection via Transformers

热门文章

  1. 从电视购物到抖音,流量平台与骗子斗了20年
  2. python读音有道-[Python]通过有道词典API获取单词发音MP3
  3. 2012 苹果第三代iPad3(NewPAD)发布会图文实录
  4. vc模拟 tabletpc_KB895953-TCServer.exe TabletPC崩溃/内存泄漏HotFix
  5. java 行政区划编号_行政区划 | Java Service SDK | 开发支持 | 四维地图开放平台
  6. 传承百年经典的瑞吉管家静待您的优雅旅程再次开启
  7. Android混淆篇 ijkplayer混淆
  8. 高通QCOM 8610平台电量计算
  9. debian9上的openwrt创建自己的IPK软件
  10. 【协议分析】PC QQ协议聊天内容破解