获取指数池:

def init(ContextInfo):#设置股票池stock300 =ContextInfo.get_stock_list_in_sector('沪深300')ContextInfo.stock300_weight = {}stock300_symbol = []stock300_weightlist = [] ContextInfo.index_code = ContextInfo.stockcode+"."+ContextInfo.market#重新制作股票池for key in stock300:# 保留权重大于0.35%的成份股if (ContextInfo.get_weight_in_index(ContextInfo.index_code, key) / 100) > 0.0035:stock300_symbol.append(key)ContextInfo.stock300_weight[key] = ContextInfo.get_weight_in_index(ContextInfo.index_code, key) / 100stock300_weightlist.append(ContextInfo.get_weight_in_index(ContextInfo.index_code, key) / 100)print('选择的成分股权重总和为: ', np.sum(stock300_weightlist)) ContextInfo.set_universe(stock300_symbol)#print ContextInfo.stock300_weight# 资产配置的初始权重,配比为0.6-0.8-1.0ContextInfo.ratio = 0.8#账号ContextInfo.accountid = "testS"

择时买卖:

                # 获取过去5天的价格数据,若连续上涨则为强势股,调仓到(权重+0.2)的仓位if all(diff>0) and holdings[stock] < buytarget_num:buy_num = buytarget_num - holdings[stock]order_shares(stock,buy_num*100,'fix',pre_close,ContextInfo,ContextInfo.accountid)buy_sum += 1#print "买入",stock,buy_num# 获取过去5天的价格数据,若连续下跌则为弱势股,调仓到(权重-0.2)的仓位elif all(diff<0) and holdings[stock] > selltarget_num:sell_num = holdings[stock] - selltarget_numorder_shares(stock,(-1.0)*sell_num*100,'fix',pre_close,ContextInfo,ContextInfo.accountid)sell_sum += 1#print "卖出",stock,sell_num

策略代码:

#coding:gbk
'''
回测模型示例(非实盘交易策略)本策略以0.8为初始权重跟踪指数标的沪深300中权重大于0.35%的成份股.
个股所占的百分比为(0.8*成份股权重)*100%.然后根据个股是否:
1.连续上涨5天 2.连续下跌5天
来判定个股是否为强势股/弱势股,并对其把权重由0.8调至1.0或0.6'''
#在指数(例如HS300)日线下运行
import numpy as npdef init(ContextInfo):#设置股票池stock300 =ContextInfo.get_stock_list_in_sector('沪深300')ContextInfo.stock300_weight = {}stock300_symbol = []stock300_weightlist = [] ContextInfo.index_code = ContextInfo.stockcode+"."+ContextInfo.marketfor key in stock300:# 保留权重大于0.35%的成份股if (ContextInfo.get_weight_in_index(ContextInfo.index_code, key) / 100) > 0.0035:stock300_symbol.append(key)ContextInfo.stock300_weight[key] = ContextInfo.get_weight_in_index(ContextInfo.index_code, key) / 100stock300_weightlist.append(ContextInfo.get_weight_in_index(ContextInfo.index_code, key) / 100)print('选择的成分股权重总和为: ', np.sum(stock300_weightlist)) ContextInfo.set_universe(stock300_symbol)#print ContextInfo.stock300_weight# 资产配置的初始权重,配比为0.6-0.8-1.0ContextInfo.ratio = 0.8#账号ContextInfo.accountid = "testS"def handlebar(ContextInfo):buy_sum = 0sell_sum = 0index  = ContextInfo.barposrealtimetag = ContextInfo.get_bar_timetag(index)print(timetag_to_datetime(realtimetag, '%Y%m%d %H:%M:%S'))dict_close=ContextInfo.get_history_data(7,'1d','close',3)print('测试1',ContextInfo.get_history_data(7,'1d','close'))print('测试',ContextInfo.get_history_data(7,'1d','close',3))print('测试',ContextInfo.get_history_data(7,'1d','close',2))print('测试',ContextInfo.get_history_data(7,'1d','close',1))#持仓市值holdvalue = 0#持仓holdings=get_holdings(ContextInfo.accountid,"STOCK")#剩余资金surpluscapital=get_avaliablecost(ContextInfo.accountid,"STOCK")for stock in ContextInfo.stock300_weight:if  stock  in holdings:if len(dict_close[stock]) == 7:holdvalue += dict_close[stock][-2] * holdings[stock]for stock in ContextInfo.stock300_weight:# 若没有仓位则按照初始权重开仓if  stock not in holdings and stock in list(dict_close.keys()):if len(dict_close[stock]) == 7:pre_close = dict_close[stock][-1]buy_num = int(ContextInfo.stock300_weight[stock] * ( holdvalue + surpluscapital ) *ContextInfo.ratio / pre_close /100)order_shares(stock,buy_num*100,'fix',pre_close,ContextInfo,ContextInfo.accountid)buy_sum += 1#print "买入",stock,buy_numelif stock in list(dict_close.keys()):if len(dict_close[stock]) == 7:diff = np.array(dict_close[stock][1:6]) - np.array(dict_close[stock][:-2])pre_close = dict_close[stock][-1]buytarget_num = int(ContextInfo.stock300_weight[stock] * ( holdvalue + surpluscapital ) * (ContextInfo.ratio + 0.2)/ pre_close /100)selltarget_num = int(ContextInfo.stock300_weight[stock] * ( holdvalue + surpluscapital ) *(ContextInfo.ratio - 0.2)/ pre_close /100)# 获取过去5天的价格数据,若连续上涨则为强势股,调仓到(权重+0.2)的仓位if all(diff>0) and holdings[stock] < buytarget_num:buy_num = buytarget_num - holdings[stock]order_shares(stock,buy_num*100,'fix',pre_close,ContextInfo,ContextInfo.accountid)buy_sum += 1#print "买入",stock,buy_num# 获取过去5天的价格数据,若连续下跌则为弱势股,调仓到(权重-0.2)的仓位elif all(diff<0) and holdings[stock] > selltarget_num:sell_num = holdings[stock] - selltarget_numorder_shares(stock,(-1.0)*sell_num*100,'fix',pre_close,ContextInfo,ContextInfo.accountid)sell_sum += 1#print "卖出",stock,sell_numif not ContextInfo.do_back_test:ContextInfo.paint('buy_num', buy_sum, -1, 0)ContextInfo.paint('sell_num', sell_sum, -1, 0)def get_holdings(accountid,datatype):holdinglist={}resultlist=get_trade_detail_data(accountid,datatype,"POSITION")for obj in resultlist:holdinglist[obj.m_strInstrumentID+"."+obj.m_strExchangeID]=obj.m_nVolume/100return holdinglistdef get_avaliablecost(accountid,datatype):result=0resultlist=get_trade_detail_data(accountid,datatype,"ACCOUNT")for obj in resultlist:result=obj.m_dAvailablereturn result

国信证券学习系列(2)相关推荐

  1. 国信证券学习系列(4)

    机器学习篇章,本章不过时脚本小子,机器学习最核心的是机器,是模型. 学习,无非就是找些有的没的因子扔进去,但说实话,机器学习,太过容易过拟合,容易无效化.回测好看的一笔,实盘垃圾的不行. 获取训练数据 ...

  2. 国信证券学习系列(1)

    软件不错,满足了我对股票,期货,期权的全部要求.而且数据可以提供下载,简直没话说了. 数据清洗问题,我其实很早以前就在思考这个问题,回测,到底在测什么?什么样的数据可以用来回测?什么样的回测才是好的回 ...

  3. 国信证券学习系列(6)

    行业轮动策略: 本策略每隔1个月定时触发计算1000能源(399381.SZ).1000材料(399382.SZ).1000工业(399383.SZ).1000可选(399384.SZ).1000消费 ...

  4. 国信证券学习系列(5)

    网格策略,号称胜率100%的策略,只要扛得住回撤,怎么说呢,它包含了最简单的思想,大道至简,真的是没有什么复杂的,原理清晰,思路简单.可以明确知道我挣的是那笔钱,为什么获利?为什么亏损?可能唯一要关注 ...

  5. 国信证券学习系列(3)

    日内回转策略:做T策略 择时交易: if date[-8:-3] != '14:55':if macd > 0 and macd_pre < 0:# 根据MACD>0则开仓,小于0则 ...

  6. 国信证券学习系列(7)

    跨品种套利策略: 本策略根据计算滚动的.过去的30个bar的均值正负0.5个标准差得到布林线 并在最新价差上穿上轨来做空价差,下穿下轨来做多价差 并在回归至上下轨水平内的时候平仓 获取数据: # 获取 ...

  7. 国信证券学习系列(8)

    我为什么要用国信,就是这个原因,可以做期权,期货,股票,etf,可转债的回测.满足了我所有的需要,我要做指数增强.通常的做法是股票和期货.但实际上,股票和期权做组合,成本更低. (1)认沽期权和认购期 ...

  8. 数据结构学习系列文章合集

    数据结构学习系列文章目录 前言 1.稀疏数组和队列 稀疏数组和二位数组的转换 数组队列的实现 环形队列的介绍与实现 2.链表 单链表的增.删.改.查 总结 前言 学习数据结构记录,作为自己的笔记,同时 ...

  9. OpenCV学习系列教程第五篇:测试和提高代码的效率

    Opencv-Python学习系列教程第五篇 来自opencv-python官方学习文档,本人谨做翻译和注释,以及一些自己的理解 本文由作者翻译并进行代码验证,转载请注明出处~ 官方文档请参阅:htt ...

最新文章

  1. vmware workstation无法打开内核设备问题处理办法
  2. 从单体应用转为分布式系统:来自Deliveroo的实践
  3. 百度网盘小程序互转工具:wx2正式开源!
  4. python axis 0_Python之NumPy(axis=0/1/2...)的透彻理解
  5. 这就是库克的重大计划?英特尔新CEO帕特誓言:CPU必须要比苹果好!
  6. Win7系统电脑休眠后无法唤醒的解决方法
  7. 《深入理解分布式事务》第七章 XA 强一致性分布式事务原理
  8. Javascript中交换两个变量值的十种方法相关笔记(一)
  9. 乘法口诀练习(python-for循环)
  10. 17 行代码实现的简易 Javascript 字符串模板
  11. 类加载与 Java主类加载机制解析
  12. 手机qq的位置服务器,腾讯面试题:腾讯服务器每秒有2w个QQ号同时上线,找出5min内重新登入的qq号并打印出来。...
  13. Java IO流经典实例
  14. PS零基础自学笔记:常见操作方法记录(去水印、抠图、调色调)
  15. 洪磊父亲详述被拘细节:银行卡共100万
  16. DOTA数据集 | 数据前后处理操作系列
  17. 钢琴家软件里曲谱的数据为什么更新不了_王者荣耀安卓与IOS互通?IOS恐怕得到不少利益,不然这事成不了...
  18. Java自动化测试系列[v1.0.0][TestNG测试开发环境配置]
  19. 法语入门学习资料汇总
  20. 2019北邮计算机机试

热门文章

  1. CloseableHttpClient 和 MultipartFile 配合上传文件
  2. 深入HotSpot虚拟机源码探究synchronized底层实现原理【万字总结synchronized】
  3. 嵌入式操作系统复习总结
  4. 汽车操作系统攻防综述
  5. 思科 网络安全 考试期末
  6. 台式计算机可以接收无线不,台式电脑无线接收器插上连不上网怎么处理
  7. Flink常见的面试题
  8. Lucene6.6.0 案例与学习路线
  9. 比尔及梅琳达·盖茨基金会宣布追加最高 1 亿美元捐款,支持抗击新型冠状病毒疫情!...
  10. 46、Flutter之 布局组件 流式布局Wrap,Flow