股票内回易策略附码

原 股票日内回转交易策略(附源码)

什么是日内交易?

​ 日内交易(Day Trade)是一种交易模式。主要是指持仓时间短,不留过夜持仓的交易方式。日内交易捕捉入市后能够马上脱离入市成本的交易机会,入市之后如果不能马上获利,就准备迅速离场。因为这种交易方式在市时间短,所以承受的市场波动的风险较低。目前,全球范围内有一些操盘高手采用此交易方式取得稳定的盈利,获得了成功。

日内策略在中国市场可行吗?

​ 与国外市场不同,我国股票市场现阶段施行“T+1”交易,在这个基础上的“T+0”操作,必须是有底仓的高抛低吸。

​ 但凡在日内交易上经验丰富且有很高胜率的选手,在持股期,都会对日内交易拥有极高的兴趣,交易频次也会比较高。以上表述已经暗含了一个隐藏的前提:必须是当天不准备卖出者才能做T,否则会为了几个点的微小价差而得不偿失。

​ 日内交易因为其快速了结和价差较小的特点,交易者盈利的首要条件即为一个交易来回的价差大于交易成本。按照当前券商普遍采用的佣金标准万三计算,一个完整交易轮回的摩擦成本略小于0.2%,从这点看,低佣金使得日内交易的盈利变得相对容易。根据我自身的交易经验,只要参与者对单次盈利预期合理且在介入时间点上不至太过偏离,均能在长久的做T生涯中获得不菲的正收益。

策略实现(基于掘金量化平台

策略思想

  • 本策略首先买入“SHSE.600000”股票10000股。

  • 根据300s的数据来计算“MACD(12,26,9)”线。

  • “MACD”水下金叉,配合均线多头排列的时候买入1000股,“MACD”水上死叉,配合均线空头排列的时候卖出1000股。

  • 每日操作的股票数不超过原有仓位,并于收盘前把仓位调整至开盘前的仓位。

策略主要步骤实现

订阅数据

subscribe(symbols=symbols, frequency='300s', count=35, wait_group=True)(symbols=symbols, frequency='300s', count=35, wait_group=True)

​ 订阅数据需要在定义init函数里面设置,并调用subscribe函数:

  • symbols需要设置订阅的标的代码。

  • frequency需设置订阅数据的周期级别,这里设置1d 表示以一天为周期。

  • count需要设置获取的bar的数量

数据获取

recent_data = context.data(symbol=symbol, frequency='300s', count=35, fields='close') = context.data(symbol=symbol, frequency='300s', count=35, fields='close')

​ 订阅数据之后,需要获取已经订阅的数据来进行操作,这时需调用context.data函数:

  • symbols 需要设置订阅的标的代码。

  • frequency需设置订阅数据的周期级别,这里设置1d表示以一天为周期。

  • count需要设置获取的bar的数量

  • fields需要设置返回值的种类

获取当前bar的时间

def on_bar(context, bars):
    bar = bars[0]
    day = bar.bob.strftime('%Y-%m-%d %H:%M:%S') on_bar(context, bars):
    bar = bars[0]
    day = bar.bob.strftime('%Y-%m-%d %H:%M:%S')

​ 在on_bar函数里,需要判断当前bar是否为当天交易的最后一根,以判断是否平仓,这里可直接过去传入bar的信息。

参数名类型说明
symbolstr标的代码
frequencystr频率
openfloat开盘价
closefloat收盘价
highfloat最高价
lowfloat最低价
amountfloat成交额
volumefloat成交量
positionlong持仓量
pre_closefloat前收盘价
bobdatetime.datetimebar开始时间
eobdatetime.datetimebar结束时间

回测报告

分析

​ 我们选取了2016年1月至2016年7月作为回测周期,保利地产(600048)作为标的股票,可以看出:

  • 胜率(具有盈利的平仓次数与总平仓次数之比)达到了46%,当然,您可以根据需要,制定别的高胜率的开平仓条件。

  • 卡玛比率(年化收益率与历史最大回撤之比)是使用最大回撤率来衡量风险。采用最大回撤率来衡量风险,关注的是最极端的情况。卡玛比率越高表示策略承受每单位最大损失获得的报酬越高。在这里卡玛比率达到了1.4。

  • 夏普比率(年化收益率减无风险收益率的差收益波动率之比)达到0.78。

  • 策略收益曲线与标的股票收益具有很大相关性,日内交易的关键点在于手续费的控制,在提高胜率的同时,尽量提高盈亏比,使得平仓的价差收益大于手续费的损耗。

 

股票日内回转交易策略源码:

 

  1. # coding=utf-8
  2. from __future__ import print_function, absolute_import, unicode_literals
  3. try:
  4. import talib
  5. except:
  6. print('请安装TA-Lib库')
  7. from gm.api import *
  8.  
  9. '''
  10. 本策略首先买入SHSE.600000股票10000股
  11. 随后根据60s的数据来计算MACD(12,26,9)线,并在MACD>0的时候买入100股,MACD<0的时候卖出100股
  12. 但每日操作的股票数不超过原有仓位,并于收盘前把仓位调整至开盘前的仓位
  13. 回测数据为:SHSE.600000的60s数据
  14. 回测时间为:2017-09-01 08:00:00到2017-10-01 16:00:00
  15. '''
  16.  
  17.  
  18. def init(context):
  19. # 设置标的股票
  20. context.symbol = 'SHSE.600000'
  21. # 用于判定第一个仓位是否成功开仓
  22. context.first = 0
  23. # 订阅浦发银行, bar频率为1min
  24. subscribe(symbols=context.symbol, frequency='60s', count=35)
  25. # 日内回转每次交易100股
  26. context.trade_n = 100
  27. # 获取昨今天的时间
  28. context.day = [0, 0]
  29. # 用于判断是否触发了回转逻辑的计时
  30. context.ending = 0
  31.  
  32.  
  33. def on_bar(context, bars):
  34. bar = bars[0]
  35. if context.first == 0:
  36. # 最开始配置仓位
  37. # 需要保持的总仓位
  38. context.total = 10000
  39. # 购买10000股浦发银行股票
  40. order_volume(symbol=context.symbol, volume=context.total, side=PositionSide_Long,
  41. order_type=OrderType_Market, position_effect=PositionEffect_Open)
  42. print(context.symbol, '以市价单开多仓10000股')
  43. context.first = 1.
  44. day = bar.bob.strftime('%Y-%m-%d')
  45. context.day[-1] = day[-2:]
  46. # 每天的仓位操作
  47. context.turnaround = [0, 0]
  48. return
  49.  
  50. # 更新最新的日期
  51. day = bar.bob.strftime('%Y-%m-%d %H:%M:%S')
  52. context.day[0] = bar.bob.day
  53. # 若为新的一天,获取可用于回转的昨仓
  54. if context.day[0] != context.day[-1]:
  55. context.ending = 0
  56. context.turnaround = [0, 0]
  57. if context.ending == 1:
  58. return
  59.  
  60. # 若有可用的昨仓则操作
  61. if context.total >= 0:
  62. # 获取时间序列数据
  63. symbol = bar['symbol']
  64. recent_data = context.data(symbol=symbol, frequency='60s', count=35, fields='close')
  65. # 计算MACD线
  66. macd = talib.MACD(recent_data['close'].values)[0][-1]
  67. # 根据MACD>0则开仓,小于0则平仓
  68. if macd > 0:
  69. # 多空单向操作都不能超过昨仓位,否则最后无法调回原仓位
  70. if context.turnaround[0] + context.trade_n < context.total:
  71. # 计算累计仓位
  72. context.turnaround[0] += context.trade_n
  73. order_volume(symbol=context.symbol, volume=context.trade_n, side=PositionSide_Long,
  74. order_type=OrderType_Market, position_effect=PositionEffect_Open)
  75. print(symbol, '市价单开多仓', context.trade_n, '股')
  76. elif macd < 0:
  77. if context.turnaround[1] + context.trade_n < context.total:
  78. context.turnaround[1] += context.trade_n
  79. order_volume(symbol=context.symbol, volume=context.trade_n, side=PositionSide_Short,
  80. order_type=OrderType_Market, position_effect=PositionEffect_Close)
  81. print(symbol, '市价单平多仓', context.trade_n, '股')
  82. # 临近收盘时若仓位数不等于昨仓则回转所有仓位
  83. if day[11:16] == '14:55' or day[11:16] == '14:57':
  84. position = context.account().position(symbol=context.symbol, side=PositionSide_Long)
  85. if position['volume'] != context.total:
  86. order_target_volume(symbol=context.symbol, volume=context.total, order_type=OrderType_Market,
  87. position_side=PositionSide_Long)
  88. print('市价单回转仓位操作...')
  89. context.ending = 1
  90. # 更新过去的日期数据
  91. context.day[-1] = context.day[0]
  92.  
  93.  
  94. if __name__ == '__main__':
  95. '''
  96. strategy_id策略ID,由系统生成
  97. filename文件名,请与本文件名保持一致
  98. mode实时模式:MODE_LIVE回测模式:MODE_BACKTEST
  99. token绑定计算机的ID,可在系统设置-密钥管理中生成
  100. backtest_start_time回测开始时间
  101. backtest_end_time回测结束时间
  102. backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POST
  103. backtest_initial_cash回测初始资金
  104. backtest_commission_ratio回测佣金比例
  105. backtest_slippage_ratio回测滑点比例
  106. '''
  107. run(strategy_id='strategy_id',
  108. filename='main.py',
  109. mode=MODE_BACKTEST,
  110. token='token_id',
  111. backtest_start_time='2017-09-01 08:00:00',
  112. backtest_end_time='2017-10-01 16:00:00',
  113. backtest_adjust=ADJUST_PREV,
  114. backtest_initial_cash=2000000,
  115. backtest_commission_ratio=0.0001,
  116. backtest_slippage_ratio=0.0001)

文章来源:掘金量化交易平台 ,转载请注册出处!

 

----------------------------------------------------------------------------------------------------------------------------------------------------------

更多经典股票/期货量化策略源码查看:

1双均线策略(期货)  量化策略源码https://www.myquant.cn/docs/python_strategyies/153
2alpha对冲(股票+期货)  量化策略源码https://www.myquant.cn/docs/python_strategyies/101
3集合竞价选股(股票) 量化策略源码https://www.myquant.cn/docs/python_strategyies/102
4多因子选股(股票)  量化策略源码https://www.myquant.cn/docs/python_strategyies/103
5网格交易(期货)  量化策略源码https://www.myquant.cn/docs/python_strategyies/104
6指数增强(股票)  量化策略源码https://www.myquant.cn/docs/python_strategyies/105
7跨品种套利(期货)量化策略源码https://www.myquant.cn/docs/python_strategyies/106
8跨期套利(期货) 量化策略源码https://www.myquant.cn/docs/python_strategyies/107
9日内回转交易(股票)量化策略源码https://www.myquant.cn/docs/python_strategyies/108
10做市商交易(期货) 量化策略源码https://www.myquant.cn/docs/python_strategyies/109
11海龟交易法(期货) 量化策略源码https://www.myquant.cn/docs/python_strategyies/110
12行业轮动(股票) 量化策略源码https://www.myquant.cn/docs/python_strategyies/111
13机器学习(股票) 量化策略源码https://www.myquant.cn/docs/python_strategyies/112

《算法导论 第三版英文版》_高清中文版

《深度学习入门:基于Python的理论与实现》_高清中文版

《深入浅出数据分析》_高清中文版

《Python编程:从入门到实践》_高清中文版

《Python科学计算》_高清中文版

《深度学习入门:基于Python的理论与实现》_高清中文版

《深入浅出数据分析》_高清中文版

《Python编程:从入门到实践》_高清中文版


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
★★1.编译注意事项 使用VC6打开工作区StkUI.dsw 然后可以按照以下顺序依次编译各个工程 GuiLib、profuisdll、XPFace、StkLib、StkNet、StkUI、Tools 其中工程StkUI是软件的主界面程序,Tools 是注册机以及一些简单的工具,其他 都是动态连接库。 ★★2.工程profuisdll介绍 profuisdll是一套比较专业的Windows界面库,是俄国人做的,还不错,本软件 改正了它的几个bug。在ProfUIS\Modified.txt文件中有说明。 本软件3.0版仅使用了该界面库的颜色选择对话框。 ★★3.工程GuiLib介绍 GuiLib是另一套Windows界面库,本软件改正了它的几个bug。在GuiLib\Modified.txt 文件中有说明。 本软件3.0版使用了该界面库的界面框架、菜单条、工具条。 ★★4.工程XPFace介绍 主要是本软件的一些界面美化的类,放在了这个DLL里面。 ★★5.工程StkLib介绍 这个工程是实现股票数据结构、技术指标计算的动态连接库,代码与平台无关。 其中比较重要的几个文件如下: Database.h 读取数据文件接口定义 QianLong.h 钱龙格式数据文件接口定义 SelfDB.h 自有格式数据文件接口定义,除了除权数据和行情数据外, 其他与钱龙一样 Stock.h 股票数据结构定义 Technique.h 技术指标类定义 Container.h 股票信息数据CStockInfo的数组类 Express.h 股票列表视图的列变量定义,以及自定义列的表达式计算 Strategy.h 策略定义 Profile.h 记录软件的用户配置并保存 BaseData.cpp 基本资料数据结构类实现 Database.cpp 数据文件读写实现 DRData.cpp 除权数据结构数组类实现 KData.cpp K线数据结构数组类实现 Report.cpp 行情数据结构数组类实现 Minute.cpp 行情分时数据结构数组类实现 Outline.cpp 行情额外数据结构数组类实现 QianLong.cpp 钱龙数据文件读写实现 SelfDB.cpp 自有格式数据文件读写实现 Stock.cpp 股票数据结构实现 StStore.cpp 数据文件读写实现 TechCL.cpp 自有技术指标 TechEnergy.cpp 能量类技术指标 TechKLine.cpp K线叠加类技术指标 Technique.cpp 技术指标基类 TechSwing.cpp 摆动类技术指标 TechTrend.cpp 趋势类技术指标 TechOther.cpp 其它类技术指标 Container.cpp 股票信息数据CStockInfo的数组类实现 Express.cpp 股票列表视图的列变量定义,以及自定义列的表达式计算实现 Strategy.cpp 策略定义实现 Profile.cpp 记录软件的用户配置并保存 有关详细的说明,参看源文件中的注释。 工程StkLib的几个全局静态变量: g_stockcontainer:AfxGetStockContainer()可以得到该变量的引用,该 变量记录所有股票的行情信息和基本信息,CStockInfo的数组。 g_domaincontainer:AfxGetDomainContainer()可以得到该变量的引用, 该变量记录所有板块的信息。 g_groupcontainer:AfxGetGroupContainer()可以得到该变量的引用,该 变量记录所有分组的信息。 g_stdatabase:AfxGetDB()可以得到该变量的引用,该变量实现了本软件的 数据文件接口。 g_stprofile:AfxGetProfile()可以得到该变量的引用,该变量记录当前软 件的一些设置。 ★★6.工程StkNet介绍 这个工程是实现网络数据自动下载功能的动态连接库。其中比较重要的几个文 件如下: NetDB.h 一些数据下载,安装的接口 HttpClt.h HTTP协议客户端类 InfoZip.h 压缩/解压缩Zip文件 Markup.h XML解析 XMLDoc.h XML辅助 secret.h 主要包括一些注册机的加密算法和读取硬盘序列号的类。 NetDB.cpp 一些数据下载,安装的接口实现 HttpClt.cpp HTTP协议客户端类实现 InfoZip.cpp 压缩/解压缩 Markup.cpp XML解析实现 Secret.cpp 加密文件,读取硬盘系列号等 XMLDoc.cpp XML辅助实现 secret.cpp 主要包括一些注册机的加密算法和读取硬盘序列号的类实现。 其中工程中的Tongshi Files为支持通视卡行情的实现程序 其中工程中的Yongxin Files为支持清华永新卡行情的实现程序 其中工程中的Receiver Files为本软件的行情接收的实现程序,其中将通视卡和清 华永新卡的数据结构转换成本软件内的通用数据结构,报价(REPORT)、分时(MINUTE)、 额外(OUTLINE)、K线(KDATA)、除权信息(DRDATA) 工程StkNet的全局静态变量: g_sview:AfxGetSView()可以得到该变量的引用,该变量记录注册信息。 ★★7.工程StkUI介绍 该工程生成最终可执行文件,主要是软件的界面。主要几个文件如下: BaseView.cpp 基本资料视图 ChildFrm.cpp 子窗口框架 MainFrm.cpp 主框架,响应菜单命令 StkUI.cpp 应用程序类,主程序初始化,初始数据读取等 StaticDoc.cpp 文档类 WizardView.cpp 向导视图 SimuView.cpp 策略视图 MarketView.cpp 实时行情视图 SListView.cpp 股票列表视图 StockGraph.cpp 技术指标视图画图类 DrawTech.cpp 画具体技术指标的函数,属于CGraphView类的方法 GraphView.cpp 技术指标视图 StrategyView.cpp 策略树视图 GroupView.cpp 股票分组树视图 TechsView.cpp 技术指标树视图 ★★8.工程Tools介绍 该工程包含以下几个模块: 注册机,利用了StkNet工程导出的AfxGetSView()。 从txt基本资料文件中提取财务数据的小工具。 修改文件时间的小工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值