量化交易入门笔记-策略常用对象
在股票量化策略中,还会用到一些常用的对象,如 Order 对象、全局对象 g 、Trade 对象等。下面详细讲解一下常用的对象
Order 对象
Order 对象常用的属性如下:
- amount : 下单数量,不管是买还是卖,都是正数
- filled : 已经成交的股票数量,正数
- security : 股票代码
- order_id : 订单 id
- price : 平均成交价格,已经成交的股票的平均成交价格(一个订单可能分多次成交)
- avg_cost : 卖出时表示下单卖出前的此股票的持仓成本,用来计算此次卖出的收益。买入时表示此次买入的均价(等于 price )
- side : 用来指定开多单,还是空单。如果其值是 long 代表开多单,如果其值是 short 代表开空单
- action : 用来指定是开仓,还是平仓。如果其值是 open 代表开仓,如果其值是 close 代表平仓
- add_time : 订单添加时间
全局对象 g
全局对象 g,用来存储用户的种类可被 pickle.dumps 函数序列化的全局数据
在模拟盘中,如果中途进程中断,我们会使用 pickle.dumps 序列化所有的 g 下面的变量内容,保存到磁盘中,再启动的时候模拟盘就不会有任何数据影响。如果没有用 g 声明,会出现模拟盘重启后,变量数据丢失的问题
如果不想 g 中某个变量被序列化,可以让变量以 "_"开头,这样,这个变量在序列化会被忽略
全局对象 g 的实例代码如下:
def initialize(context):g.secruity = "000001.XSHG"g.count = 1g.flag = 0def process_initialize(context):# 保存不能被序列化的对象,进程每次重启都初始化g._q = query(valuation)def handle_data(context, data):log.info(g.security)log.info(g.count)log.info(g.flag)
Trade 对象
Trade 对象用于记录订单的一次交易。但需要注意的是,一个订单可能分多次交易。Trade 对象的常用属性如下:
- time : 交易时间
- amount : 交易数量
- price : 交易价格
- trade_id : 交易记录 id
- order_id : 对应的订单 id
tick 对象
tick 中的信息是在 tikc 事件发生时,盘面的一个快照。tikc 对象的家长属性如下:
- code : 标的代码
- datetime : tick 发生的时间
- current : 最新价
- high : 最高价
- low : 最低价
- volume : 截至当前时刻的成交量
- amount : 截至当前时刻的成交额
- position : 截至当前时刻的持仓量,只适用于期货 tick 对象
- a1_v ~ a5_v : 卖一量到卖五量,对于期货,只有卖一量
- a1_p ~ a5_p : 卖一价到卖五价,对于期货,只有卖一价
- b1_v ~ b5_v : 买一量到买五量,对于期货,只有买一量
- b1_p ~ b5_p : 买一价到买五价,对于期货,只有买一价
Context 对象
Context 对象,即量化策略加油对象,其常用属性如下:
- subportfolios : 当前单个操作仓位的资金和标的的信息
- portfolio : 账户信息,即 subportfolios 的汇总信息
- cruuent_dt : 当前单位时间的开始时间。如果是按天回测,那么开始时间是 hour = 9, minute = 30, second = microsecond = 0; 如果是按分钟回测,那么开始时间是 second = microsecond = 0
- previous_date : 前一个交易日
- universe : 查询 set_universe() 设定的股票池,例如:[“000001.XSHG”, “600000.XSHG”]
- run_params : 表示此次运行的参数,有如下属性:
- start_date : 回测/模拟开始日期
- end_date : 回测/模拟结束日期
- type : 运行方式,如果其值是 “simple_backtest”,表示回测是通过单击“编译运行”运行;如果其值是"full_backtest"表示回测是通过单击“运行回测”运行;如果其值是"sim_trade",表示模拟交易
- frequency : 运行频率,只能是 “day”/ “minute"或"tick”
另外,此对象也做了和 g 一样的处理:
可以添加自己的变量,每次进程关闭时持久保存,进程重启时恢复
以"_"开头的变量不会被持久保存
如果添加的变量与系统的冲突,将覆盖掉系统变量,如果想恢复系统变量,就要删除自己的变量
实例代码:
def handle_data(context, data):# 执行下面的语句之后,context.portfolio 的整数 1context.portfolio = 1log.info(context.portfolio)# 要恢复系统的变量,只需要使用下面的语句即可del context.portfolio# 此时,context.portfolio 将变成账户信息log.info(context.portfolio.portfolio_value)
以后可能会向 context 中添加新的变量来支持量多功能,为了减少麻烦,这里建议大家使用 g
Context 对象的实例代码如下:
def handle_data(context, data):#获得当前回测相关时间year = context.current_dt.yearmonth = context.current_dt.monthday = context.current_dt.dayhour = context.current_dt.hourminute = context.current_dt.minutesecond = context.current_dt.second#得到"年-月-日"格式date = context.current_dt.strftime("%Y-%m-%d")#得到周几weekday = context.current_dt.isoweekday()# 获取账户的持仓价值positions_value = context.portfolio.positions_value# 获取仓位subportfolios[0]的可用资金available_cash = context.subportfolios[0].available_cash# 获取subportfolios[0]中多头仓位的security的持仓成本hold_cost = context.subportfolios[0].long_positions[security].hold_cost
Position 对象
Position 对象是特有的某个标的的信息,其常用属性如下:
- security : 标的的代码
- price : 最新行情价格
- avg_cost : 开创均价,买入标的的加权平均价
- hold_cost : 持仓成本,针对期货有效
- init_time : 建仓时间,格式为 datetime.datetime
- total_amount : 总仓位,但不包括挂单冻结仓位
- closeable_amount : 可卖出的仓位
- today_amount : 今天开的仓位
- locked_amount : 挂单冻结仓位
- value : 标的的价值,计算方法是 :price * total_amount * multiplier, 其中股票、基金的 multiplier 为1,期货为相应的合约乘数
- side : 用来指定开多单,还是空单。如果其值是 long 代表开多单,如果其值是 short 代表开空单
- pindex : 仓位索引
SubPortfolio 对象
SubPortfolio 对象是某个仓位的资金和标的信息,其常用属性如下:
- inount_cash : 累计的出入金,比如初始资金为1000元,后来转移出去100元,则这值是 1000-100=900元
- available_cash : 可用资金,可用来购买证券的资金
- transferable_cash : 可取资金,即可以提现的资金,不包括今日卖出的证券所得资金
- locked_cash : 挂单锁住资金
- type : 账户所属类型
- long_positions : 多单仓位
- short_positions: 空单仓位
- positions_value : 持仓价值,股票基金才有持仓价值,期货为0
- total_value : 总资产,包括现金,保证金,仓位的总价值,可用来计算收益
- toatl_liability : 总负债,等于融资负债、融券负债、利息总负债的总和
- net_value : 净资产,等于总资产减去总负债
- cash_liability : 融资负债
- sec_liability : 融券负债
- interest : 利息总负债
- maintenance_margin_rate : 维持担保比例
- available_margin : 融资融券可用保证金
- margin : 保证金,股票、基金保证金都为100%;融资融券保证金为0;期货保证金会实时更新,总是等于当前期货价值 * 保证金比率,当保证金不足时,强制平仓。平仓顺序是:亏损多的(相对于开仓均价)平仓
Portfolio 对象
Portfolio 对象是所有标的的操作仓位的信息汇总,其常用属性如下
- inout_cash : 累计出入金,比如初始资金为1000元,后来转移出去100元,则这个值是1000-100=900
- available_cash : 可用资金,可用来购买证券的资金
- transferable_cash : 可取资金,即可以提现的资金,不包括今日卖出证券所得资金
- locked_cash : 挂单锁住资金
- margin : 保证金,股票、基金保证金都为100%
- positions : 等同于 long_positions
- long_positions : 多单的仓位
- short_positions: 空间的仓位
- total_value : 总的权益,包括现金,保证金,仓位的总价值,可用来计算的收益
- returns : 总权益的累计收益
- starting_cash : 初始资金
- positions_value : 持仓价值,股票基金才有持仓价值,期货为0
- locked_cash_by_purchase : 基金申购未完成所冻结的金额
- locked_cash_by_redeem : 基金赎回未到账的金额
- locked_amount_by_redeem : 基金赎回时,冻结的份额
SecurityUnitData 对象
SecurityUintData 对象是一个单位时间内的股票的数据,其常用属性如下:
- security : 股票代码。例如"000001.XSHG"
- returns : 股票在这个单位时间的相对收益比例
- open : 时间段开始时价格
- close : 时间段结束时价格
- low : 最低价
- high : 最高价
- volume : 成交的股票的数量
- factor : 前复权因子。利用前复权因子可以算出原始价格,方法是价格除以 factor ,即原始价格 = close / factor
- high_limit : 涨停价
- low_limit : 跌停价
- avg : 这段时间的平均价
注:本文章为个人学习笔记,参考了一些书籍与官方教程,不作任何商业用途!
量化交易入门笔记-策略常用对象相关推荐
- 量化交易入门笔记-策略回测与评估
首先,编写一个简单的"双均线量化策略" 代码如下: def initialize(context):"""双均线量化策略的初始化函数"&qu ...
- 量化交易入门笔记-小市值股票策略
''' 筛选出市值介于20亿~30亿的股票 选取其中市值最小的三只股票 然后每天开盘买入,持有5个交易日,然后调仓 '''import jqdatadef initialize(context):&q ...
- 量化交易入门笔记-KD指标策略
''' 超买超卖型技术指标,即随机指标KD 实现K在20左右向上交叉D时,则全仓买入 K在80左右向下交叉D时,全仓卖出 '''import jqdata from jqlib.technical_a ...
- 【量化】量化交易入门系列2:经典的量化交易策略(上)
作者:悠悠做神仙 来源: 恒生LIGHT云社区 上一篇文章 量化交易入门系列1:编程语言与数据源 ,介绍了关于量化交易的基本概念,以及要做量化交易的编程语言选择,和量化交易的一些数据源获取工具.那么, ...
- 【量化】量化交易入门系列5:量化交易学习书籍推荐(一)
作者:悠悠做神仙 来源: 恒生LIGHT云社区 量化交易入门系列,给大家介绍了关于量化交易的数据源获取.编程语言推荐.经典的交易策略,那么本篇将介绍一些比较经典的量化交易书籍. 书籍是人类智慧的结晶, ...
- 量化交易python入门书籍_张杨飞《Python量化交易入门》PDF下载
张杨飞<Python量化交易入门>PDF下载 首页 > 计算机类 字号:小 中 大 评论:0 条 评论:0 条 Python量化交易入门 [作 者]张杨飞 [形态项] 402 [出版 ...
- Python量化交易学习笔记(1)
Python量化交易学习笔记(1) http://zwpython.com/ http://www.topquant.vip/?p=2275 [更多参见] <zwPython,目前最好的py开发 ...
- 十行代码带你量化交易入门
说起量化交易入门,很多时候得到的答案都是长长的书单,让人望而却步. 这里,就为新手准备了这篇文章--十行代码带你量化交易入门 数据获取,策略回测,行情链接,交易信号,直接体验整个量化交易的核心流程,立 ...
- 量化交易入门读物列表
量化交易入门读物列表 勿当作专业人员的推荐来看. 量化交易入门-译言网 当真躺着赚钱?量化交易的十大难题 一文弄懂量化交易 怎样躺着赚钱? Quantitative Trading: How to B ...
- 【量化】量化交易入门系列6:量化交易学习书籍推荐(二)
作者:悠悠做神仙 来源: 恒生LIGHT云社区 上一篇 量化交易入门系列5:量化交易学习书籍推荐(一) 我们介绍一些量化交易一些操作和理论性书籍,可能对于刚入门的大家而言,可能有些枯燥.所以这篇文章, ...
最新文章
- Windows内核 基本汇编指令
- 微信基于时间序的海量存储扩展性与多机容灾能力提升
- 箭头函数的使用用法(一)
- mybatis源码阅读(六) ---StatementHandler了解一下
- 【HDOJ】1720 A+B coming
- Spring-Jpa : @MappedSuperclass的作用
- cobol和java区别,COBOL语法和文法(1)
- keil中下载程序的擦除功能
- 深度学习《InfoGAN模型》
- 雷云3 Razer Synapse官方版-雷云3 Razer Synapse官方版下载
- ResNet再进化!重新思考ResNet:采用高阶方案的改进堆叠策略
- ArcGIS数据编辑操作
- 我的第一个博客:爬取豆瓣top250电影名
- 2020 蓝桥杯大学模拟赛(三) - 程序设计:养猫题解
- 应各位朋友的要求,贴出当年写的考研经历文章,希望能再给准备考研的朋友一些启发吧
- bootstrap框架 基础样式
- R 语言中1 和1L的区别
- Microsoft Edge打开主页就是2345界面
- Artifact xxx:war exploded: Error during artifact deployment.
- htc系统Android 7.1,HTC太强大,被誉为刷机之王,一路升到安卓7