目录

一、模型介绍

二、可学习部分

1.通过应用ContextInfo.barpos确定时间段和时间点

2.取一个股票的时间段值

3.设置不交易时间

三、代码逐行解释


一、模型介绍

本策略首先买入当前加载图的股票10000股

随后根据60s的数据来计算MACD(12,26,9)线,

在MACD>0,MACD_pre<0的时候买入100股,MACD<0,MACD_pre>0的时候卖出100股

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

二、可学习部分

1.通过应用ContextInfo.barpos确定时间段和时间点

 startdate = timetag_to_datetime(ContextInfo.get_bar_timetag(d - 35), '%Y%m%d%H%M%S')#将毫秒时间转换成日期时间,这种方式可以输出到秒的值,设置35分钟前是开始时间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)

2.取一个股票的时间段值

 df = ContextInfo.get_market_data(['close'], stock_code=ContextInfo.get_universe(), start_time=startdate,end_time=enddate, period=ContextInfo.period)#1支股票代码,在一个时间段取值,返回pandas.DataFrame(pandas二维表格型数据结构类型的值。

3.设置不交易时间

 if int(date[-8:-6] + date[-5:-3]) > 1455:   #14+55return

三、代码逐行解释

# coding:gbk
'''
回测模型示例(非实盘交易策略)'''
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.barpos  #当前运行到的 K 线的位置if d < 35:returnstartdate = timetag_to_datetime(ContextInfo.get_bar_timetag(d - 35), '%Y%m%d%H%M%S')#将毫秒时间转换成日期时间,这种方式可以输出到秒的值,设置35分前是开始时间enddate = timetag_to_datetime(ContextInfo.get_bar_timetag(d), '%Y%m%d%H%M%S')date = timetag_to_datetime(ContextInfo.get_bar_timetag(d), '%Y-%m-%d %H:%M:%S')print('日期', date)print(date[-8:-6])print(date[-5:-3])flage = False          #这是用于在过去的图上绘出信号的singleemited = Falsedf = ContextInfo.get_market_data(['close'], stock_code=ContextInfo.get_universe(), start_time=startdate,end_time=enddate, period=ContextInfo.period)#1支股票代码,在一个时间段取值,返回pandas.DataFrame(pandas二维表格型数据结构类型的值。#ContextInfo.get_universe()获取股票池中的股票,返回列表#ContextInfo.get_market_data()获取行情数据#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)#iloc通过整数位置获得行和列的数据。逗号表示 -1(行) 和 0(列),也就是最后一行的第一列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:   #14+55returnavaliable = 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  #持仓字典值为0# 计算MACD线if ContextInfo.total >= 0:  #设置买入大于0recent_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.Lots   #开盘买入+新下单的持仓总数print (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

0018-量化第五天:QMT—日内回转回测注释相关推荐

  1. Python 量化投资实战教程(3) —A股回测MACD策略

    量化投资系列文章: Backtrader 教程 - Python 量化投资实战教程(1) Python 量化投资实战教程(2) -MACD策略(+26.9%) Python 量化投资实战教程(3) - ...

  2. Python量化交易实战-38使用开源项目回测双均线策略

    B站配套视频教程观看 使用PyAlgoTrade回测双均线策略 双均线策略:长短周期均线,通过金叉,死叉的方式买入卖出股票,获取收益的策略. 回顾上节课代码的部分,上节课完成了可视化代码的部分, 主要 ...

  3. 量化策略——准备3 数据、Backtrader回测框架与quantstats评价指标

    我们一般使用AKShare这个库来获取股票数据或策略中用得到的数据: AKShare github主页:https://github.com/akfamily/akshare 使用Backtrader ...

  4. 量化交易:止盈策略与回测

    我们买基金或股票的时候通常用最简单的策略进行决策:低买高卖,跌的多了就加仓拉低持有成本,达到收益率就卖出. 那么如何用代码表示这个策略呢?首先定义交易信号则是:0.5%时买入,目标止盈线是1.5%,达 ...

  5. 日内回转交易(股票)——Python量化

    目录 1. 原理 1.1 日内回转交易 1.2 股票的日内回转交易 1.3 MACD指标简介 2. 策略思路 3. 策略代码 4. 回测结果与稳健性分析 1. 原理 1.1 日内回转交易 日内回转交易 ...

  6. 日内回转交易策略-股票

    1. 原理 1.1 日内回转交易 日内回转交易,顾名思义就是在一天内完成"买"和"卖"两个相反方向的操作(可一次也可多次),也就是"T+0" ...

  7. Python量化投资——股票择时到底能否赚钱?ADX指标的有效性回测

    ADX指标的有效性回测 Python量化投资--`ADX`技术指标的有效性研究 背景介绍 技术指标介绍 指标用法建议 `qteasy`中的ADX内置策略 433支股票五年回测结果 12.45% --该 ...

  8. 小散量化炒股记|说某个指标能赚钱?不盲从,先量化回测一番!

    前言 相信大家都听说了量化交易这个东西了吧!量化交易是一种新兴的系统化金融投资方法. 那么,什么才是普通股民所适合的量化交易打开方式呢? 本文就用一个接地气的股票分析场景 -- 用量化回测来识别技术指 ...

  9. 量化交易中用到的回测评估指标(策略收益、基准收益、Alpha比率、Beta比率、夏普比率、索提诺比率)详解

    前言 近日在做A股的过程中接触到了量化交易.通过一个月时间的了解发现并非全自动印钞机,也有可能有全自动接盘侠的潜质.故现阶段以学习量化交易的知识为主,多学多问总是没错的嘛~ 现阶段使用Python爬取 ...

最新文章

  1. 视觉三维重建的关键技术及实现思路汇总
  2. Windows 10或成为最后一个Windows版本
  3. 如何构建高可用ZooKeeper集群
  4. python百分号和斜杠_Python中正反斜杠(‘/’和‘\’)的意义与用法
  5. NYOJ 358 取石子(五)
  6. 最近对latin-1这个字符集产生了不少好感
  7. jquery mysql实现加入购物车_jQuery实现加入购物车飞入动画效果
  8. 密码学专题 密钥生成|分组加密的模式 ECB|CBC|CFB|OFB
  9. canal mysql从库_canal中间件|数据增量同步解决方案
  10. 坯子库曲面推拉教程_一招曲面流动,搞定99%异形建模
  11. dede自定义表单html,织梦自定义表单制作在线订单详细解说
  12. Spring-boot-AnnotationConfigServletWebApplicationContext
  13. SQL分页查询的写法总结-MySQL、SQL Server、Oracle
  14. 挑战程序设计竞赛学习笔记2
  15. MTk2503,使用移动物联网卡上线慢问题
  16. 计算机毕业设计Java车辆保险管理系统(源码+系统+mysql数据库+lw文档)
  17. flash for linux安装教程,Flash Player 9 FOR Linux 的安装
  18. 10家不错的iphone编程资源站
  19. Poisson方程的五点差分格式例题求解-Matlab实现
  20. 工作室多拨宽带如何优化?

热门文章

  1. 解决、鼠标间歇性、自动断开、又重连(有图)
  2. 软件工程 常见术语 中英对照
  3. Java 实现阿里云直播
  4. 正则表达式的条件用法
  5. 【论文笔记】Incorporating Learnable Membrane Time Constant to Enhance Learning of SNN
  6. 数据分析——数据科学
  7. 学习SpringSecurity这一篇就够了
  8. 米什金版货币金融学简答及一些知识点
  9. 谈IT大学生的竞争优势
  10. 指示灯循环控制C语言代码,指示灯循环控制.doc