用Python编程借助现有量化平台编写股票交易策略和回测分析
一、简介
接下来笔者会给大家介绍股票交易中的常见几种交易策略实现思路和源码编写过程,如果大家听说过量化交易这个词语的话,对其中的交易策略或许了解过,大概意思就是在股票、加密货币或者金融衍生物在价格的波动过程中根据其交易策略进行不断的买入和卖出,不断的套利,降低持仓陈本,来达到收益最大化。
常见的交易策略有很多种,例如趋势型,网格型,剥头皮,概率法则,高频交易等,今天主要给大家介绍2种低频的交易策略,高抛低吸网格交易策略、日内做T策略。
二、需求分析&实现思路
每个交易日的股票都会上涨或者下跌,在这个过程中笔者们偶尔会想针对部分股票进行股价的涨跌幅进行监控,或者自动进行交易,在这个需求前提下,现有券商、股票分析软件都会带有机器人自动交易策略功能,大部分都需要收费或者部分策略不能满足自己的需求,笔者这边提供2种实现思路:
1、借助现有量化平台编写策略和回测分析,然后在券商软件层面进行策略执行。
2、自己编写功能代码来监控估价,对股价波动进行特殊处理满足特殊需求。
第一种实现成本较低,但功能受限于平台;第二种实现成本毋庸置疑相对较高,但是逻辑可以自己控制。
三、借助现有量化平台编写策略和回测分析
这里利用米筐量化实现和分析自己的交易策略,需要先注册个账号,然后进入到平台-笔者的策略中进行策略编写,平台的功能使用可以参考平台文档。
笔者这里贴出笔者自己写的2种策略代码,这个平台只支持使用Python脚本编写。
1)价差交易策略
平台截图:
部分代码如下,详细代码可以自己手撸实现,也可以在文末进行获取:
你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context, bar_dict):
...if newPrice >= context.nextSellPrice:logger.info("执行高抛交易,对应价格:{}".format(newPrice))amount = context.portfolio.positions[context.s1].quantityif amount >= context.tradeNumber:logger.info("执行高抛交易,对应数量:{}".format(context.tradeNumber))order_shares(context.s1, -context.tradeNumber)plot("S", newPrice)elif amount >= 100:logger.info("执行高抛交易,对应数量:{}".format(amount))order_shares(context.s1, -amount)plot("S", newPrice) calc_next_trade_price(context,newPrice)obj = {"nextSellPrice":context.nextSellPrice,"nextBuyPrice":context.nextBuyPrice,"curTradePrice":context.curTradePrice}context.buyTradeList.append(obj)if newPrice <= context.nextBuyPrice:logger.info("执行低吸交易,对应价格:{}".format(newPrice))amount = int(context.portfolio.cash / newPrice / 100.0) * 100if amount >= context.tradeNumber:logger.info("执行低吸交易,对应数量:{}".format(context.tradeNumber))order_shares(context.s1, context.tradeNumber)plot("B", newPrice)calc_next_trade_price(context,newPrice)obj = {"nextSellPrice":context.nextSellPrice,"nextBuyPrice":context.nextBuyPrice,"curTradePrice":context.curTradePrice}context.sellTradeList.append(obj)
选择回测时间段,点击右侧平台右侧按钮运行回测,结果页面如下
从结果中可以看到,对招商银行[600036]这只股票进行价差网格交易,其参数设置在上涨8%的时候卖出,下跌8%的时候买入,最大连续下跌买入次数为3次。
回测收益:13.628%
回测年化收益:17.096%
比基准年化收益-6%高出非常之大,这是在股价波动的过程中可以进行执行该策略来不断的降低持仓成本。从交易详情面板来看,这个策略可以通过参数调节交易频率,在上涨下跌比率较大的情况下,其交易次数是能控制的相对较少,结果图如下:
2)日内做T策略
同样的,只贴部分代码
# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context, bar_dict):
...newPrice = bar_dict[context.s1].lastif newPrice >= context.nextSellPrice:context.lastTradeType = 1logger.info("执行高抛交易,对应价格:{}".format(newPrice))amount = context.portfolio.positions[context.s1].quantity#if amount - context.tradeNumber >= context.lockStockNumber:if amount - context.tradeNumber >= 0:logger.info("执行高抛交易,对应数量:{}".format(context.tradeNumber))order_shares(context.s1, -context.tradeNumber)plot("S", newPrice)else:logger.info("股票数量不足,无法执行高抛交易,对应数量:{}".format(amount))return calc_next_trade_price(context,newPrice)obj = {"nextSellPrice":context.nextSellPrice,"nextBuyPrice":context.nextBuyPrice,"curTradePrice":context.curTradePrice}context.buyTradeList.append(obj)if newPrice <= context.nextBuyPrice:context.lastTradeType = 0logger.info("执行低吸交易,对应价格:{}".format(newPrice))amount = int(context.portfolio.cash / newPrice / 100.0) * 100if amount >= context.tradeNumber:logger.info("执行低吸交易,对应数量:{}".format(context.tradeNumber))order_shares(context.s1, context.tradeNumber)plot("B", newPrice)else:logger.info("现金不足,无法执行低吸交易,对应数量:{}".format(amount))return calc_next_trade_price(context,newPrice)obj = {"nextSellPrice":context.nextSellPrice,"nextBuyPrice":context.nextBuyPrice,"curTradePrice":context.curTradePrice}context.sellTradeList.append(obj)
你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context, bar_dict):
…
newPrice = bar_dict[context.s1].last
if newPrice >= context.nextSellPrice:
context.lastTradeType = 1
logger.info(“执行高抛交易,对应价格:{}”.format(newPrice))
amount = context.portfolio.positions[context.s1].quantity
#if amount - context.tradeNumber >= context.lockStockNumber:
if amount - context.tradeNumber >= 0:
logger.info(“执行高抛交易,对应数量:{}”.format(context.tradeNumber))
order_shares(context.s1, -context.tradeNumber)
plot(“S”, newPrice)
else:
logger.info(“股票数量不足,无法执行高抛交易,对应数量:{}”.format(amount))
return
calc_next_trade_price(context,newPrice)obj = {"nextSellPrice":context.nextSellPrice,"nextBuyPrice":context.nextBuyPrice,"curTradePrice":context.curTradePrice}context.buyTradeList.append(obj)if newPrice <= context.nextBuyPrice:context.lastTradeType = 0logger.info("执行低吸交易,对应价格:{}".format(newPrice))amount = int(context.portfolio.cash / newPrice / 100.0) * 100if amount >= context.tradeNumber:logger.info("执行低吸交易,对应数量:{}".format(context.tradeNumber))order_shares(context.s1, context.tradeNumber)plot("B", newPrice)else:logger.info("现金不足,无法执行低吸交易,对应数量:{}".format(amount))return calc_next_trade_price(context,newPrice)obj = {"nextSellPrice":context.nextSellPrice,"nextBuyPrice":context.nextBuyPrice,"curTradePrice":context.curTradePrice}context.sellTradeList.append(obj)
总体来说,代码逻辑还是比较简单,就是对价格的涨跌进行处理,其参数设置在日内上涨2%的时候卖出,下跌2%的时候买入,初始买入资金比例7成,锁定最低仓位5成。然后运行回测,其结果如下
回测收益:5.501%
回测年化收益:6.839%
基准收益:19.26%
可以看到日内做T这种高频交易,在长期来看收益可能并不高,适合在短期价格内运行。
四、总结
这个量化平台在笔者的熟悉情况下,它可以很方便的回测你的交易策略,但是在股价盯盘上,或者自定义逻辑上支持的不是很完善,很多功能也是需要收费才能使用。本文基于Python,借助现有量化平台编写策略和回测分析,希望对大家的学习有所帮助。
最后
作为一个IT的过来人,我自己整理了一些python学习资料,都是别人分享给我的,希望对你们有帮助。
有问题可以扫描下面二维码——>添加csdn官方认证二维码探讨
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、精品Python学习书籍
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、Python练习题
检查学习结果。
七、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后,千万别辜负自己当时开始的一腔热血,一起变强大变优秀。
用Python编程借助现有量化平台编写股票交易策略和回测分析相关推荐
- 如何借助现有股票量化交易平台编写策略和回测分析
每个交易日的股票都会上涨或者下跌,在这个过程中笔者们偶尔会想针对部分股票进行股价的涨跌幅进行监控,或者自动进行交易,在这个需求前提下,现有券商.股票分析软件都会带有机器人自动交易策略功能,大部分都需要 ...
- 如何使用ricequant量化平台进行落单和回测
如何使用ricequant量化平台进行落单和回测: def init(context): : context.s1 = "000001.XSHE" update_ ...
- 【QMT策略编写】如何优雅地调教QMT量化平台编写量化策略(使用notepad++、pycharm、vscode等外部IDE编写量化交易代码)
如何优雅地调教QMT量化平台编写量化策略(使用notepad++.pycharm.vscode等外部IDE编写量化交易代码) 前言 一.先搞清楚QMT的安装目录 二.QMT调教步骤 1.QMT里新建量 ...
- 深入浅出Python量化交易实战--第2章 回测与经典策略(下)
2.3 经典策略之海龟策略 说起经典的交易策略,就不得不提到"海龟策略"--一个20世纪80 年代提出的,以海龟交易法则为核心的交易策略.其核心要点是:在股 价超过过去N个交易日的 ...
- vnpy怎么创建策略并回测_【手把手教你】入门量化回测最强神器backtrader(一)
1 引言 目前基于Python的量化回测框架有很多,开源框架有zipline.vnpy.pyalgotrader和backtrader等,而量化平台有Quantopian(国外).聚宽.万矿.优矿.米 ...
- 1、股票交易及量化投资回测分析系统的数据库设计-5
在阅读文章前,请读者朋友认真阅读免责声明: 免责声明:本人所发表的所有文章.资源.知识等内容(包括免费.付费等)旨在向广大读者介绍我的职业生涯中积累的一些经验.知识等内容,受个人水平所限这些知识.经验 ...
- 用 Python 基于均线交叉策略进行回测
本篇文章中,我将用 Python 构建一个简单的移动平均线交叉交易策略进行回测,并使用 标准普尔 500 指数(S&P500) 进行测试. 一个简单的移动平均线交叉策略可能是使用技术指标的量化 ...
- 为什么很多量化策略,回测很丰满,实盘却很骨感
来源丨AI科学投资(ID:AItraders) 关于回测,很多人是完全不相信的.这也很好理解,回测有太多的细节,甚至策略研发者本人可能都发现不了回测过程中可能存在的问题.但是回测对策略研发者又是如此重 ...
- 使用java开发一个股票交易及量化投资回测分析系统
经过近两年的研究和学习,我使用java开发(也使用了部分python,数据源:聚宽)出了一个股票交易及量化投资回测分析系统,将于近期陆续推出系列文章,向大家介绍一下整个开发过程,当整个系列文章都完成后 ...
最新文章
- 【原创】【专栏】《Linux设备驱动程序》--- LDD3源码目录结构和源码分析经典链接
- python update_python 字典中的Update()函数
- 关于haproxy的重定向
- SAP Fiori Elements 应用 manifest.json 文件里 resources.json 的含义
- 漫谈单体架构与微服务架构(上):单体架构
- SQL 异常处理 Begin try end try begin catch end catch--转
- 正则匹配括号里面的内容不包括括号_python正则表达式
- SpringBoot在自定义类中调用service层等Spring其他层
- Mysql学习总结(63)——Mysql数据库架构方案选择与分析
- python的setheading什么意思_用Python告诉你什么是佩奇
- 国产高人气无线蓝牙耳机测评,抖音火爆的蓝牙耳机值得入手吗?
- 店铺没有自然流量,系统平台如何引流。
- mysql对时间范围的查询
- torch.cuda.is_available()返回false?
- Arduino+MAX4080S制作小量程电流表
- throughput(吞吐量)
- 记一次成功的软件著作权的申请
- Cas5.3.14手机号码登录(五)
- python如何换行
- VS2017 + Qt设置窗口置顶与不置顶的注意问题
热门文章
- 使用Springboot异步发送模板邮件完成注册功能
- python opencv特征点检测和匹配教程
- OpenStack——编排(Heat)服务介绍与安装
- 使用Siri+捷径控制ESP8266+WS2812B
- 联想小新14用来学计算机,联想小新Air14/Pro13/15分不清楚 看完这些你就懂了
- 软考A计划-电子商务设计师-专业英语
- python爬虫 房天下js逆向模拟登录
- [SqlServer]创建链接服务器
- Python 3.x教程:如何使用Python将图片转为漫画风格?
- bug---由于协议未知,无法导航至“localhost:8080