国信证券学习系列(6)

行业轮动策略:

本策略每隔1个月定时触发计算1000能源(399381.SZ)、1000材料(399382.SZ)、1000工业(399383.SZ)、1000可选(399384.SZ)、1000消费(399385.SZ)、1000医药(399386.SZ)这几个行业指数过去20个交易日的收益率并选取了收益率最高的指数的成份股并获取了他们的市值数据随后把仓位调整至市值最大的5只股票上

该策略在股票指数日线下运行

获取股票池:

index_list = ['399381.SZ','399382.SZ','399383.SZ','399384.SZ','399385.SZ','399386.SZ']

获取收益率最高的指数的成分股:

for k in list(his.keys()):if len(his[k]) == 0:del his[k]for index in index_list:ratio = 0try:ratio = (his[index][-2] - his[index][0])/his[index][0]except KeyError:print('key error:' + index)except IndexError:print('list index out of range:' + index)return_index.append(ratio)# 获取指定数内收益率表现最好的行业best_index = index_list[np.argmax(return_index)]

获取股票对应的市值:

        # 获取当天有交易的股票index_stock = ContextInfo.get_sector(best_index)stock_available = []for stock in index_stock:if ContextInfo.is_suspended_stock(stock) == False:stock_available.append(stock)for stock in stock_available:if stock in list(his.keys()):#目前历史流通股本取不到,暂用总股本if len(his[stock]) >= 2:stocksize =his[stock][-2] * float(ContextInfo.get_financial_data(['CAPITALSTRUCTURE.total_capital'],[stock],lastdate,date).iloc[0,-1])size_dict[stock] = stocksizeelif len(his[stock]) == 1:stocksize =his[stock][-1] * float(ContextInfo.get_financial_data(['CAPITALSTRUCTURE.total_capital'],[stock],lastdate,date).iloc[0,-1])size_dict[stock] = stocksizeelse:returnsize_sorted = sorted(list(size_dict.items()), key = lambda item:item[1])pre_holding = []

策略代码:

#coding:gbk'''
回测模型示例(非实盘交易策略)本策略每隔1个月定时触发计算1000能源(399381.SZ)、1000材料(399382.SZ)、1000工业(399383.SZ)、
1000可选(399384.SZ)、1000消费(399385.SZ)、1000医药(399386.SZ)这几个行业指数过去
20个交易日的收益率并选取了收益率最高的指数的成份股并获取了他们的市值数据
随后把仓位调整至市值最大的5只股票上
该策略在股票指数日线下运行
'''
import numpy as np
import math
def init(ContextInfo):MarketPosition ={}ContextInfo.MarketPosition = MarketPosition #初始化持仓index_universe = ['399381.SZ','399382.SZ','399383.SZ','399384.SZ','399385.SZ','399386.SZ'] index_stocks = []for index in index_universe:for stock in ContextInfo.get_sector(index):index_stocks.append(stock)ContextInfo.set_universe(index_universe+index_stocks)   #设定股票池ContextInfo.day = 20ContextInfo.ratio = 0.8ContextInfo.holding_amount = 5ContextInfo.accountID='testS'def handlebar(ContextInfo):buy_condition = Falsesell_condition = Falsed = ContextInfo.barposlastdate = timetag_to_datetime(ContextInfo.get_bar_timetag(d - 1), '%Y%m%d')date = timetag_to_datetime(ContextInfo.get_bar_timetag(d), '%Y%m%d')print(date)index_list = ['399381.SZ','399382.SZ','399383.SZ','399384.SZ','399385.SZ','399386.SZ']return_index = []weight = ContextInfo.ratio/ContextInfo.holding_amountsize_dict = {}if  (float(date[-4:-2]) != float(lastdate[-4:-2])):#print '---------------------------------------------------------------------------------'#print '当前交易日',date,date[-4:-2]his = ContextInfo.get_history_data(21,'1d','close')#print "his",his,timetag_to_datetime(ContextInfo.get_bar_timetag(d),"%Y%m%d")for k in list(his.keys()):if len(his[k]) == 0:del his[k]for index in index_list:ratio = 0try:ratio = (his[index][-2] - his[index][0])/his[index][0]except KeyError:print('key error:' + index)except IndexError:print('list index out of range:' + index)return_index.append(ratio)# 获取指定数内收益率表现最好的行业best_index = index_list[np.argmax(return_index)]#print '当前最佳行业是:', ContextInfo.get_stock_name(best_index)[3:]+'行业'# 获取当天有交易的股票index_stock = ContextInfo.get_sector(best_index)stock_available = []for stock in index_stock:if ContextInfo.is_suspended_stock(stock) == False:stock_available.append(stock)for stock in stock_available:if stock in list(his.keys()):#目前历史流通股本取不到,暂用总股本if len(his[stock]) >= 2:stocksize =his[stock][-2] * float(ContextInfo.get_financial_data(['CAPITALSTRUCTURE.total_capital'],[stock],lastdate,date).iloc[0,-1])size_dict[stock] = stocksizeelif len(his[stock]) == 1:stocksize =his[stock][-1] * float(ContextInfo.get_financial_data(['CAPITALSTRUCTURE.total_capital'],[stock],lastdate,date).iloc[0,-1])size_dict[stock] = stocksizeelse:returnsize_sorted = sorted(list(size_dict.items()), key = lambda item:item[1])pre_holding = []for tuple in size_sorted[-ContextInfo.holding_amount:]:pre_holding.append(tuple[0])#print '买入备选',pre_holding#函数下单if len(pre_holding) > 0:sellshort_list = []for stock in list(ContextInfo.MarketPosition.keys()):if stock not in pre_holding and (stock in list(his.keys())):order_shares(stock,-ContextInfo.MarketPosition[stock],'lastest',his[stock][-1],ContextInfo,ContextInfo.accountID)print('sell',stock)sell_condition = Truesellshort_list.append(stock)if len(sellshort_list) >0:for stock in sellshort_list:del ContextInfo.MarketPosition[stock]for stock in pre_holding:if stock not in list(ContextInfo.MarketPosition.keys()):Lots = math.floor(ContextInfo.ratio * (1.0/len(pre_holding)) * ContextInfo.capital / (his[stock][-1] * 100))order_shares(stock,Lots *100,'lastest',his[stock][-1],ContextInfo,ContextInfo.accountID)print('buy',stock)buy_condition = TrueContextInfo.MarketPosition[stock] = Lots *100#ContextInfo.paint('do_buy', int(buy_condition), -1, 0)#ContextInfo.paint('do_sell', int(sell_condition), -1, 0)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用Linux命令行修图——缩放、编辑、转换格式——一切皆有可能

本文由 极客范 - 八卦爱好者 翻译自 How-To Geek。欢迎加入极客翻译小组,同我们一道翻译与分享。转载请参见文章末尾处的要求。ImageMagick是一系列的用于修改、加工图像的命令行工具。ImageMagick能够快速地使用命令行对图片进行操作,对大量的图片进行…

剑指offer:二维数组中的查找

目录 题目解题思路具体代码题目 题目链接剑指offer:二维数组中的查找题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数&a…

函数对象 函数嵌套 名称空间与作用域

函数对象: 函数是第一类对象,即函数可以当做数据传递 1 可以被引用 2 可以当做参数传递 3 返回值可以是函数 (函数名 不带() 就是函数名的内存地址,带括号就是执行函数) 4 可以当做容器类型的…

国信证券学习系列(7)

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

dubbo-admin管理平台搭建

一、前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 dubbo的使用,其实只需要有注册中心,消费者,提供者这三个就可以使用了,但是并不能…

不朽传奇-云计算技术背后的那些天才程序员:Qemu的作者法布里斯贝拉

作者:Liu Guo Hui,OpenStack中国社区,转载请注明出处 众所周知,虚拟化技术是构建云基础架构不可或缺的关键技术之一,而在众多虚拟化技术实现当中,KVM(Kernel Virtual Machine)因为L…

C学习笔记-字符串

对于C语言来说,字符串其实就是最后一个元素为’\0’的char数组 字符数组的初始化 字符数组常见的有两种初始化方式 char str[] "hello";或者 char str[] {h, e, l, l, o};当使用sizeof(str)时,得到的大小为6&#xff…

Shiro安全框架入门篇(登录验证实例详解与源码)

一、Shiro框架简单介绍 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 Apache Shiro是Java的一个安全框架,旨在简化身份验证和授权。Shiro在JavaSE和JavaEE项目中都可以使用…

国信证券学习系列(8)

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

Socket程序从Windows移植到Linux下的一些注意事项

关于这个话题网上流传的是一个相同的版本,就是那个第一项是头文件的区别,但后面列出的头文件只有#include没有(估计是原版的在不断转载的过程中有人不小心忘了把尖括号转义,让浏览器当html标记解析没了)的那个。现在整…

边缘控制平面Ambassador全解读

Ambassador是由Datawire开源的一个API网关项目,主要在Kubernetes的容器编排框架中使用。Ambassador本质上是一个通过配置边缘/API来管理Envoy数据面板的控制面板。而Envoy则是一个基于第7层协议的网络代理和通信总线,它是一个由Lyft开源的云原生服务&…

Linux 文件编辑命令 详细整理

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 一、vi编辑器有3种基本工作模式 首先需要知道vi编辑器有3种基本工作模式,分别是:命令模式、文本输入模式、和末…

专访迅雷首席工程师:迅雷的下一代互联网底层技术构想

摘要:互联网合纵连横频频上演,迅雷与小米的联姻也成为了热点,有许多人为迅雷的上市和迅雷的未来担忧,这家像工程师一样的公司,命运会怎样,他们未来会如何走下去?对此CSDN专访了迅雷首席工程师刘…

YASnippet - emacs 的代码片段管理工具

添加 snippet M-x 然后输入 yas-new-snippet 回车 RET&#xff0c;会出现一个新的 buffer # -*- mode: snippet -*-# name: # key: # --在出现的 buffer 中填写相应的数据 # -*- mode: snippet -*-# name: vard# key: vard# --echo <pre>;var_dump($0);die;c-x c…

深入vuex原理(上)

前言 vuex作为vue生态的重要组成部分&#xff0c;是对store进行管理的一柄利剑。简而言之&#xff0c;vuex是vue的状态管理器。使用vuex可用使数据流变得清晰、可追踪、可预测&#xff0c;更可以简单的实现 类似时光穿梭 等高级功能&#xff0c;对于复杂的大型应用来讲&#xf…

Maven入门(含实例教程)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Maven这个个项目管理和构建自动化工具&#xff0c;越来越多的开发人员使用它来管理项目中的jar包。接下来小宝鸽&#xff0c;将从下面几个…

进阶正则表达式

本文同步自我的博客园&#xff1a;http://www.cnblogs.com/hustskyking/ 关于正则表达式&#xff0c;网上可以搜到一大片文章&#xff0c;我之前也搜集了一些资料&#xff0c;并做了排版整理&#xff0c;可以看这篇文章http://www.cnblogs.com/hustskyking/archive/2013/06/04/…

tkinter拦截关闭事件

import tkinter as tk from tkinter import messageboxroot tk.Tk()def on_closing():if messagebox.askokcancel("Quit", "Do you want to quit?"):root.destroy()root.protocol("WM_DELETE_WINDOW", on_closing) root.mainloop() 转载于:htt…

阿里云服务器一分价钱一分货,切记!

阿里云为了满足低端市场的需求&#xff0c;会推出一些价格非常便宜的机器&#xff0c;但是这些机器是为新手练手用或者做测试用的&#xff0c;性能不行。你不要指望花每月9.5元&#xff0c;买一台学生机&#xff0c;就可以放置流量大的网站还不卡&#xff0c;那个不现实。阿里云…

请记住:你的付出都会以该有的方式归来(图)

人&#xff0c;这一生就像一个耕种的农民。你不是在付出&#xff0c;就是在收获。当然&#xff0c;有人说&#xff0c;付出并不一定有回报。这是大多数人都认同的&#xff0c;也就是付出与得到不一定成正比&#xff0c;不是付出的越多就得到的越多。但我想告诉你的是&#xff0…