什么是集合竞价?有什么用途?

​ 所谓集合竞价就是在当天还没有开盘之前,你可根据前一天的收盘价和对当日股市的预测来输入股票价格,在集合竞价时间里输入计算机主机的所有下单,按照价格优先和时间优先的原则计算出最大成交量的价格,这个价格就会是集合竞价的成交价格,而这个过程被称为集合竞价。

​ 每天开盘价在技术分析上具有重要的意义,目前世界各国股市市场均采用集合竞价的方式来确定开盘价,因为这样可以在一定程度上防止人为操纵现象。

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

策略思想

• 获取沪深300的成份股数据,并统计其30天内开盘价大于前收盘价的天数,并在该天数大于阈值18的时候加入股票池。

• 对不在股票池的股票平仓,并等权配置股票池的标的股票,每次交易间隔1个月。

策略主要步骤实现

获取当前交易日日期

now = context.now

直接调用context.now函数,返回“datetime.datetime”格式

获取上一交易日日期

last_day = get_previous_trading_date(exchange='SHSE', date=now)

获取上一交易日可调用get_previous_trading_date函数,返回值为字符串格式:

•  exchang需要设置交易市场代码。

•  date需要设置指定日期。

获取当天有交易的股票

    not_suspended_info = get_history_instruments(symbols='SHSE.000300', start_date=now, end_date=now)not_suspended_symbols = [item['symbol'] for item in not_suspended_info if not item['is_suspended']]

获取当天有交易的股票,即非停牌的股票,首先需获取停牌信息,这里需调用get_history_instruments函数,返回值类型为list[dict],之后就是将所提取的“字典”转换为”list“:

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

•  start_dateend_date需设置获取成分股的开始与结束日期,这里需要调成上一交易日以获取上一交易日的成分股信息。

固定月初调仓

schedule(schedule_func=algo, date_rule='1m', time_rule='09:40:00')

固定时间调仓可使用schedule函数进行定时任务配置:

•  schedule_func为调用的策略函数的名称。

•  date_rule可设为1m(一月)。

•  time_rule为开仓日的开仓时间,这里设为每月第一个交易日的09:40:00

获取沪深300成分股

stock300 = get_history_constituents(index='SHSE.000300', start_date=last_day,end_date=last_day)[0]['constituents'].keys()

获取指数成分股可调用函数get_history_constituents或者get_constituents,返回值类型为list[dict],这里调用get_history_constituents是因为再回测时需要获取上一交易日的成分股,而get_constituents只能获取最新的成分股:

•  index需要设置获取指数的代码。

•  start_dateend_date需设置获取成分股的开始与结束日期,这里需要调成上一交易日以获取上一交易日的成分股信息。

获取过去交易日的历史信息

return_index_his = history_n(symbol=symbol, frequency='1d', count=30, fields='close,preclose',fill_missing='Last', adjust=ADJUST_PREV, end_time=last_day, df=True)

获取历史信息需要调用histor_n函数,默认返回值为“字典“格式,如果参数df设为True,则返回"dataframe"格式

•  symbol设置所需获取的标的代码。

•  frequency获取历史信息的频率,如日线数据设置为1d

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

•  fileds设置返回值的种类。

•  fill_missing需要设置对于空值的填充方式, None- 不填充,NaN- 用空值填充, Last- 用上一个值填充,默认 None

•  adjust需要设置对于复权的处理,ADJUST_NONE or 0: 不复权, ADJUST_PREV or 1: 前复权, ADJUST_POST or 2: 后复权, 默认不复权。

•  end_time需设置获取历史信息的结束时间。

获取持仓信息

positions = context.account().positions()

在判断平仓条件时,需要获取持仓信息(包含持仓均价),这就需要调用context.account().position函数,返回字典型。

策略回测分析

分析

​ 我们选取了2017年7月至2017年10月作为回测周期,应用“EV/EBITDA”单因子作为选股基础。可以看出:

•  胜率(具有盈利的平仓次数与总平仓次数之比)达到了62.5%,也即策略每十次开仓,有六次是盈利的。

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

•  夏普比率(年化收益率减无风险收益率的差收益波动率之比)超过5,也即承受一单位的风险,会有超过五单位的收益回报

•  策略收益曲线总体稳定,适合在趋势行情中操作。

附:集合竞价选股源码

1# coding=utf-8
from __future__ import print_function, absolute_import, unicode_literals
from gm.api import *'''
本策略基于掘金量化交易平台 网址:www.myquant.cn本策略通过获取SHSE.000300沪深300的成份股数据并统计其30天内
开盘价大于前收盘价的天数,并在该天数大于阈值10的时候加入股票池
随后对不在股票池的股票平仓并等权配置股票池的标的,每次交易间隔1个月.
回测数据为:SHSE.000300在2015-01-15的成份股
回测时间为:2017-07-01 08:00:00到2017-10-01 16:00:00
'''def init(context):# 每月第一个交易日的09:40 定时执行algo任务schedule(schedule_func=algo, date_rule='1m', time_rule='09:40:00')# context.count_bench累计天数阙值context.count_bench = 18# 用于对比的天数context.count = 30# 最大交易资金比例context.ratio = 0.8def algo(context):# 获取当前时间now = context.now# 获取上一个交易日last_day = get_previous_trading_date(exchange='SHSE', date=now)# 获取沪深300成份股context.stock300 = get_history_constituents(index='SHSE.000300', start_date=last_day,end_date=last_day)[0]['constituents'].keys()# 获取当天有交易的股票not_suspended_info = get_history_instruments(symbols=context.stock300, start_date=now, end_date=now)not_suspended_symbols = [item['symbol'] for item in not_suspended_info if not item['is_suspended']]trade_symbols = []if not not_suspended_symbols:print('没有当日交易的待选股票')returnfor stock in not_suspended_symbols:recent_data = history_n(symbol=stock, frequency='1d', count=context.count, fields='pre_close,open',fill_missing='Last', adjust=ADJUST_PREV, end_time=now, df=True)diff = recent_data['open'] - recent_data['pre_close']# 获取累计天数超过阙值的标的池.并剔除当天没有交易的股票if len(diff[diff > 0]) >= context.count_bench :trade_symbols.append(stock)print('本次股票池有股票数目: ', len(trade_symbols))# 计算权重percent = 1.0 / len(trade_symbols) * context.ratio# 获取当前所有仓位positions = context.account().positions()# 如标的池有仓位,平不在标的池的仓位for position in positions:symbol = position['symbol']if symbol not in trade_symbols:order_target_percent(symbol=symbol, percent=0, order_type=OrderType_Market,position_side=PositionSide_Long)print('市价单平不在标的池的', symbol)# 对标的池进行操作for symbol in trade_symbols:order_target_percent(symbol=symbol, percent=percent, order_type=OrderType_Market,position_side=PositionSide_Long)print(symbol, '以市价单调整至权重', percent)if __name__ == '__main__':'''strategy_id策略ID,由系统生成filename文件名,请与本文件名保持一致mode实时模式:MODE_LIVE回测模式:MODE_BACKTESTtoken绑定计算机的ID,可在系统设置-密钥管理中生成backtest_start_time回测开始时间backtest_end_time回测结束时间backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POSTbacktest_initial_cash回测初始资金backtest_commission_ratio回测佣金比例backtest_slippage_ratio回测滑点比例'''run(strategy_id='8ec1595a-e146-11e7-9f7c-9cd21ef04ea9',filename='jihejingjia.py',mode=MODE_BACKTEST,token='c395247a76e8a5caeee699d668d6f550213bc418',backtest_start_time='2017-07-01 08:00:00',backtest_end_time='2017-10-01 16:00:00',backtest_adjust=ADJUST_PREV,backtest_initial_cash=10000000,backtest_commission_ratio=0.0001,backtest_slippage_ratio=0.0001)

来源:掘金量化 , myquant.cn

相关阅读: | 量化交易  | 期货模拟交易 | python量化交易 | 股票数据  | 量化交易策略 | 机器学习算法  | 多因子选股 |

| 双均线策略 |  网格交易法 |  海龟交易法  |  跨期套利  | 行业轮动  | 指数增强  | 跨品种套利 | 日内交易 |

集合竞价选股(附源码)相关推荐

  1. python编程选股_随笔吧量化投资选股的python程序实践(附源码)

    量化投资选股的python程序实践(附源码) 首先选取沪深股票市场,本人比较关注的12只股票: 000002 万科A,600566 济川药业,300051 三五互联,002039 黔源电力,60087 ...

  2. 股票日回易略(附源码

    原 股票日内回转交易策略(附源码) 什么是日内交易? ​ 日内交易(Day Trade)是一种交易模式.主要是指持仓时间短,不留过夜持仓的交易方式.日内交易捕捉入市后能够马上脱离入市成本的交易机会,入 ...

  3. 掘金量化 | 短周期量价策略(附源码)

    可能不少朋友都有阅读过国泰君安<基于短周期价量特征的多因子选股体系>这篇研报,对其内多达191个量价因子印象深刻.该研报是在2017年中旬发布的,时至今日已过去四年时光,为此大家可能会好奇 ...

  4. C#共享内存实例 附源码

    原文 C#共享内存实例 附源码 网上有C#共享内存类,不过功能太简单了,并且写内存每次都从开头写.故对此进行了改进,并做了个小例子,供需要的人参考. 主要改进点: 通过利用共享内存的一部分空间(以下称 ...

  5. java中batch基础_详解Spring batch 入门学习教程(附源码)

    详解Spring batch 入门学习教程(附源码) 发布时间:2020-09-08 00:28:40 来源:脚本之家 阅读:99 作者:achuo Spring batch 是一个开源的批处理框架. ...

  6. 炫酷,SpringBoot+Echarts实现用户访问地图可视化(附源码)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 SpringBoot+Echarts用户访问地图可视化 意义 在常 ...

  7. C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码...

    原文:C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码 前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github. ...

  8. 黯然微信小程序杂记(三):微信小程序实现倒计时功能 附讲解教学 附源码

    黯然微信小程序杂记(三):微信小程序实现倒计时功能 附超详细注释 附源码 一.功能描述 二.界面展示 三.test.wxml代码 四.test.js代码(注释很详细 很易懂) CSDN私信我,有关微信 ...

  9. 黯然微信小程序杂记(二):小程序最新版登录并进行缓存模块的实现 附源码

    黯然微信小程序杂记(二):小程序最新版登录进行缓存模块的实现 附源码 一.功能描述 二.mine.wxml界面图片 三.mine.wxml代码 四.mine.wxss代码 五.mine.js代码 六. ...

  10. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码]...

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码] 文件上传这东西说到底有时候很痛,原来的asp.net服务器 ...

最新文章

  1. 语音识别|基于CNN+DFSMN(简化版:标量+无步长因子)的声学模型实现及代码开源(keras)
  2. 数据格式、类型系统与展示
  3. 149.从网络的作用范围分类 150.使用范围分类 151.拓扑结构分类
  4. SQL Server 2008不能修改表的解决方法
  5. 中科院计算所开源Easy Machine Learning:让机器学习应用开发简单快捷 By 机器之心2017年6月13日 13:05 今日,中科院计算所研究员徐君在微博上宣布「中科院计算所开源了
  6. 区块链面试过程中的40个问题
  7. nginx与php-fpm通讯方式
  8. 修改Linux的基本配置(如主机名、ip等)
  9. ansible 修改文件变量_基于ansible的批量配置生成
  10. unity ab包加载_Unity资源管理和打包
  11. SpringSecurity之权限管理
  12. Linux system PXE网络环境
  13. Wagtail 教程 1 :基础设置
  14. 电脑维修小知识(我抄的!)
  15. 开源帮助:什么是退出代码 137,你能修复它吗?
  16. 钢琴五线谱 学习分享(兴趣爱好)
  17. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛
  18. 水果店圈子:水果店开业宣传文字怎么发,水果店准备开业怎么发朋友圈
  19. 南开大学20春计算机应用基础在线作业,南开大学20春学期计算机应用基础在线作业参考答案...
  20. Matlab实现图书管理系统

热门文章

  1. java面试题框架知识点总结
  2. 可以检测手机帧率和温度的软件_腾讯黑鲨游戏手机3评测:深度定制带来的全新游戏体验...
  3. stm32F4方向+脉冲发生器
  4. [JSON]2017年最新县及县以上行政区划代码
  5. 5万字 | 2020大厂面试总结,PDF供下载
  6. java从地址串中解析提取省市区-完美匹配中国所有地址
  7. k2p—b1版本刷固件遇到的问题
  8. sql语句如何获得当前日期
  9. FortiClient cannot establish caused by TLS version
  10. 汇编语言中xor指令_汇编语言基本指令