国信证券学习系列(3)

日内回转策略:做T策略

择时交易:

 if date[-8:-3] != '14:55':if macd > 0 and macd_pre < 0:# 根据MACD>0则开仓,小于0则平仓if avaliable > df.iloc[-1, 0] * ContextInfo.Lots * 100:order_shares(ContextInfo.get_universe()[0], ContextInfo.Lots, 'fix', df.iloc[-1, 0], ContextInfo,ContextInfo.accountID)flage = Truesingleemited = TrueContextInfo.MarketPosition[ContextInfo.get_universe()[0]] += ContextInfo.Lotsprint (ContextInfo.get_universe()[0], 'open position at market price', ContextInfo.Lots, '股')elif macd < 0 and macd_pre > 0 and holding[ContextInfo.get_universe()[0]] >= ContextInfo.Lots:order_shares(ContextInfo.get_universe()[0], -ContextInfo.Lots, 'fix', df.iloc[-1, 0], ContextInfo,ContextInfo.accountID)flage = Falsesingleemited = Trueprint(ContextInfo.get_universe()[0], 'close position at market price', ContextInfo.Lots, '股')ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] -= ContextInfo.Lots# 临近收盘时若仓位数不等于昨仓则回转所有仓位

策略代码全部:
 

# coding:gbk
'''
回测模型示例(非实盘交易策略)本策略首先买入当前股票10000股
随后根据60s的数据来计算MACD(12,26,9)线,并在MACD>0,MACD_pre<0的时候买入100股,MACD<0,MACD_pre>0的时候卖出100股
但每日操作的股票数不超过原有仓位,并于收盘前把仓位调整至开盘前的仓位
本策略需在个股分钟线下运行
'''
import numpy as np
import pandas as pd
import talibdef init(ContextInfo):MarketPosition = {}ContextInfo.MarketPosition = MarketPosition  # 初始化持仓ContextInfo.set_universe([ContextInfo.stockcode + '.' + ContextInfo.market])ContextInfo.first = 0ContextInfo.Lots = 100  # 设定交易手数ContextInfo.day = [0, 0]ContextInfo.ending = 0ContextInfo.total = 10000ContextInfo.accountID = 'testS'def handlebar(ContextInfo):d = ContextInfo.barposif d < 35:returnstartdate = timetag_to_datetime(ContextInfo.get_bar_timetag(d - 35), '%Y%m%d%H%M%S')enddate = timetag_to_datetime(ContextInfo.get_bar_timetag(d), '%Y%m%d%H%M%S')##print startdate,enddatedate = timetag_to_datetime(ContextInfo.get_bar_timetag(d), '%Y-%m-%d %H:%M:%S')print('日期', date)flage = Falsesingleemited = Falsedf = ContextInfo.get_market_data(['close'], stock_code=ContextInfo.get_universe(), start_time=startdate,end_time=enddate, period=ContextInfo.period)# print dfif df.empty:return# print dfif ContextInfo.first == 0:order_shares(ContextInfo.get_universe()[0], ContextInfo.total, 'fix', df.iloc[-1, 0], ContextInfo,ContextInfo.accountID)flage = Truesingleemited = TrueContextInfo.first = 1ContextInfo.day[-1] = date[8:10]ContextInfo.turnaround = [0, 0]ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] = ContextInfo.totalreturnContextInfo.day[0] = date# 14:55:00之后不再交易if int(date[-8:-6] + date[-5:-3]) > 1455:returnavaliable = get_avaliable(ContextInfo.accountID, 'STOCK')holding = get_holdings(ContextInfo.accountID, 'STOCK')if ContextInfo.get_universe()[0] not in list(holding.keys()):holding[ContextInfo.get_universe()[0]] = 0# 计算MACD线if ContextInfo.total >= 0:recent_date = np.array(df.iloc[-35:, 0])macd = talib.MACD(recent_date)[0][-1]macd_pre = talib.MACD(recent_date)[0][-2]# 根据MACD>0则开仓,小于0则平仓if date[-8:-3] != '14:55':if macd > 0 and macd_pre < 0:# 根据MACD>0则开仓,小于0则平仓if avaliable > df.iloc[-1, 0] * ContextInfo.Lots * 100:order_shares(ContextInfo.get_universe()[0], ContextInfo.Lots, 'fix', df.iloc[-1, 0], ContextInfo,ContextInfo.accountID)flage = Truesingleemited = TrueContextInfo.MarketPosition[ContextInfo.get_universe()[0]] += ContextInfo.Lotsprint (ContextInfo.get_universe()[0], 'open position at market price', ContextInfo.Lots, '股')elif macd < 0 and macd_pre > 0 and holding[ContextInfo.get_universe()[0]] >= ContextInfo.Lots:order_shares(ContextInfo.get_universe()[0], -ContextInfo.Lots, 'fix', df.iloc[-1, 0], ContextInfo,ContextInfo.accountID)flage = Falsesingleemited = Trueprint(ContextInfo.get_universe()[0], 'close position at market price', ContextInfo.Lots, '股')ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] -= ContextInfo.Lots# 临近收盘时若仓位数不等于昨仓则回转所有仓位else:if ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] > ContextInfo.total:order_shares(ContextInfo.get_universe()[0],-(ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] - ContextInfo.total), 'fix',df.iloc[-1, 0], ContextInfo, ContextInfo.accountID)flage = Falsesingleemited = True# print ContextInfo.get_universe()[0], '回转操作市价单平多仓', ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] - ContextInfo.total, '股'ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] = ContextInfo.totalif ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] < ContextInfo.total:order_shares(ContextInfo.get_universe()[0],(ContextInfo.total - ContextInfo.MarketPosition[ContextInfo.get_universe()[0]]), 'fix',df.iloc[-1, 0], ContextInfo, ContextInfo.accountID)flage = Truesingleemited = True# print ContextInfo.get_universe()[0], '回转操作市价单开多仓', ContextInfo.total - ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] , '股'ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] = ContextInfo.total# 更新过去的日期数据'''ContextInfo.day[-1] = ContextInfo.day[0]if singleemited:if flage:ContextInfo.paint('do_buy',1,-1,0,"yellow",'noaxis')ContextInfo.paint('do_sell',0,-1,0,"red",'noaxis')else:ContextInfo.paint('do_buy',0,-1,0,"yellow",'noaxis')ContextInfo.paint('do_sell',1,-1,0,"red",'noaxis')'''# ContextInfo.paint('holding',ContextInfo.MarketPosition[ContextInfo.get_universe()[0]],-1,0)def get_avaliable(accountid, datatype):result = 0resultlist = get_trade_detail_data(accountid, datatype, "ACCOUNT")for obj in resultlist:result = obj.m_dAvailablereturn resultdef 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_nCanUseVolumereturn holdinglist

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

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

相关文章

时序数据库连载系列: 时序数据库一哥InfluxDB之存储机制解析

2019独角兽企业重金招聘Python工程师标准>>> InfluxDB 的存储机制解析 本文介绍了InfluxDB对于时序数据的存储/索引的设计。由于InfluxDB的集群版已在0.12版就不再开源&#xff0c;因此如无特殊说明&#xff0c;本文的介绍对象都是指 InfluxDB 单机版 1. InfluxDB 的…

如何在Linux上提高文本的搜索效率

本文由 极客范 - minejo 翻译自 Xmodulo。欢迎加入极客翻译小组&#xff0c;同我们一道翻译与分享。转载请参见文章末尾处的要求。对于系统管理员或程序员来说&#xff0c;当需要在复杂配置的目录中或者在大型源码树中搜寻特定的文本或模式时&#xff0c;grep类型的工具大概是…

Spring Boot 10:处理Json数据中的null值

Jackson版&#xff1a; /*** Jackson 配置类 对Json数据进行特殊处理** Author YangXuyue* Date 2019/04/02 07:12*/ Configuration public class JacksonConfig {/*** 配置Jackson** param builder* return* Author YangXuyue* Date 2019/04/02 07:14*/BeanPrimaryConditional…

国信证券学习系列(4)

机器学习篇章&#xff0c;本章不过时脚本小子&#xff0c;机器学习最核心的是机器&#xff0c;是模型。 学习&#xff0c;无非就是找些有的没的因子扔进去&#xff0c;但说实话&#xff0c;机器学习&#xff0c;太过容易过拟合&#xff0c;容易无效化。回测好看的一笔&#xf…

JSch - Java Secure Channel : java 代码实现服务器远程操作

一、前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 JSch是SSH2的纯Java实现 。 JSch允许您连接到sshd服务器并使用端口转发&#xff0c;X11转发&#xff0c;文件传输等&#xff0…

前嗅ForeSpider教程:数据建表

今天&#xff0c;小编为大家带来的教程是&#xff1a;如何在前嗅ForeSpider中&#xff0c;进行数据建表操作及各注意事项。主要内容包括&#xff1a;快速建表&#xff0c;自由建表&#xff0c;字段参数&#xff0c;数据表的创建&#xff0c;关联与删除&#xff0c;以及表单变更…

世纪大争论:Linux还是GNU/Linux?

本文由 极客范 - 爱开源的贡献开源社区 翻译自 Chris Hoffman。欢迎加入极客翻译小组&#xff0c;同我们一道翻译与分享。转载请参见文章末尾处的要求。我们在网上已经习惯用“Linux”来称呼Linux操作系统了&#xff0c;然而&#xff0c;偶尔也用“GNU/Linux”来称呼和指代同…

PyTorch Softmax

PyTorch provides 2 kinds of Softmax class. The one is applying softmax along a certain dimension. The other is do softmax on a spatial matrix sized in B, C, H, W. But it seems like some problems existing in Softmax2d. : ( 转载于:https://www.cnblogs.com/hiz…

国信证券学习系列(5)

网格策略&#xff0c;号称胜率100%的策略&#xff0c;只要扛得住回撤&#xff0c;怎么说呢&#xff0c;它包含了最简单的思想&#xff0c;大道至简&#xff0c;真的是没有什么复杂的&#xff0c;原理清晰&#xff0c;思路简单。可以明确知道我挣的是那笔钱&#xff0c;为什么获…

promise

## 前言 今天来分享下promise的用法&#xff0c;es6伟大发明之一&#xff0c;当初我学习的时候也是蛮头大的&#xff0c;不知道为啥&#xff0c;整个脑子就是&#xff0c;我在哪&#xff0c;我要干啥的懵圈&#xff0c;后面认真学习之后&#xff0c;觉得真是十分好用&#xff0…

计算机集群 解说

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 计算机集群简称集群是一种计算机系统&#xff0c;它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。 在某…

同时寻找最大数和最小数的最优算法 第二大数

我们知道&#xff0c;在一个容量为n的数据集合中寻找一个最大数&#xff0c;不管用什么样的比较算法&#xff0c;至少要比较n-1次&#xff0c;就算是用竞标赛排序也得比较n-1次&#xff0c;否则你找到的就不能保证是最大的数。那么&#xff0c;在一个容量为n的数据集合中同时寻…

浅谈mpvue项目目录和文件结构

2019独角兽企业重金招聘Python工程师标准>>> 在Visual Studio Code里面打开项目文件夹&#xff0c;我们可以看到类似如下的文件结构&#xff1a; 1、package.json文件 package.json是项目的主配置文件&#xff0c;里面包含了mpvue项目的基本描述信息、项目所依赖的各…

[AHOI2009]最小割(最大流+tarjan)

继续填坑了&#xff0c;啦啦啦 这道题本来是准备枚举每个边&#xff0c;暂时去除它&#xff0c;但发现时间会爆炸的 于是决定另辟蹊径 于是这篇题解就应运而生 首先还是网络流跑一边 毕竟题目叫最小割嘛&#xff0c;给个面子 然后跑一边tarjan对满流的边处理掉&#xff0c;即不…

进程间通信---信号

什么是信号&#xff1f; 】 信号处理流程 信号类型 发送信号的函数 参数sig&#xff1a;代表 信号 接收信号的函数 参数 handle 的处理方式有几种&#xff1f; 实例代码 实例逻辑 图中的等待操作使用&#xff1a;pause&#xff08;&#xff09;函数 代码 在这里插入代码片…

大白话解说,半分钟就懂 --- 分布式与集群是什么 ? 区别是什么?

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 PS&#xff1a;这篇文章算是笔记&#xff0c;仅部分文字是原创&#xff0c;相当内容只是收集、整理、提炼、总结别人写的。 没有标为原创…

国信证券学习系列(6)

行业轮动策略&#xff1a; 本策略每隔1个月定时触发计算1000能源&#xff08;399381.SZ&#xff09;、1000材料&#xff08;399382.SZ&#xff09;、1000工业&#xff08;399383.SZ&#xff09;、1000可选&#xff08;399384.SZ&#xff09;、1000消费&#xff08;399385.SZ&a…

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

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

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

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

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

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