在股票量化策略中,还会用到一些常用的对象,如 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 一样的处理:

  1. 可以添加自己的变量,每次进程关闭时持久保存,进程重启时恢复

  2. 以"_"开头的变量不会被持久保存

  3. 如果添加的变量与系统的冲突,将覆盖掉系统变量,如果想恢复系统变量,就要删除自己的变量

    实例代码:

    def handle_data(context, data):# 执行下面的语句之后,context.portfolio 的整数 1context.portfolio = 1log.info(context.portfolio)# 要恢复系统的变量,只需要使用下面的语句即可del context.portfolio# 此时,context.portfolio 将变成账户信息log.info(context.portfolio.portfolio_value)
    
  4. 以后可能会向 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 : 这段时间的平均价

注:本文章为个人学习笔记,参考了一些书籍与官方教程,不作任何商业用途!

量化交易入门笔记-策略常用对象相关推荐

  1. 量化交易入门笔记-策略回测与评估

    首先,编写一个简单的"双均线量化策略" 代码如下: def initialize(context):"""双均线量化策略的初始化函数"&qu ...

  2. 量化交易入门笔记-小市值股票策略

    ''' 筛选出市值介于20亿~30亿的股票 选取其中市值最小的三只股票 然后每天开盘买入,持有5个交易日,然后调仓 '''import jqdatadef initialize(context):&q ...

  3. 量化交易入门笔记-KD指标策略

    ''' 超买超卖型技术指标,即随机指标KD 实现K在20左右向上交叉D时,则全仓买入 K在80左右向下交叉D时,全仓卖出 '''import jqdata from jqlib.technical_a ...

  4. 【量化】量化交易入门系列2:经典的量化交易策略(上)

    作者:悠悠做神仙 来源: 恒生LIGHT云社区 上一篇文章 量化交易入门系列1:编程语言与数据源 ,介绍了关于量化交易的基本概念,以及要做量化交易的编程语言选择,和量化交易的一些数据源获取工具.那么, ...

  5. 【量化】量化交易入门系列5:量化交易学习书籍推荐(一)

    作者:悠悠做神仙 来源: 恒生LIGHT云社区 量化交易入门系列,给大家介绍了关于量化交易的数据源获取.编程语言推荐.经典的交易策略,那么本篇将介绍一些比较经典的量化交易书籍. 书籍是人类智慧的结晶, ...

  6. 量化交易python入门书籍_张杨飞《Python量化交易入门》PDF下载

    张杨飞<Python量化交易入门>PDF下载 首页 > 计算机类 字号:小 中 大 评论:0 条 评论:0 条 Python量化交易入门 [作 者]张杨飞 [形态项] 402 [出版 ...

  7. Python量化交易学习笔记(1)

    Python量化交易学习笔记(1) http://zwpython.com/ http://www.topquant.vip/?p=2275 [更多参见] <zwPython,目前最好的py开发 ...

  8. 十行代码带你量化交易入门

    说起量化交易入门,很多时候得到的答案都是长长的书单,让人望而却步. 这里,就为新手准备了这篇文章--十行代码带你量化交易入门 数据获取,策略回测,行情链接,交易信号,直接体验整个量化交易的核心流程,立 ...

  9. 量化交易入门读物列表

    量化交易入门读物列表 勿当作专业人员的推荐来看. 量化交易入门-译言网 当真躺着赚钱?量化交易的十大难题 一文弄懂量化交易 怎样躺着赚钱? Quantitative Trading: How to B ...

  10. 【量化】量化交易入门系列6:量化交易学习书籍推荐(二)

    作者:悠悠做神仙 来源: 恒生LIGHT云社区 上一篇 量化交易入门系列5:量化交易学习书籍推荐(一) 我们介绍一些量化交易一些操作和理论性书籍,可能对于刚入门的大家而言,可能有些枯燥.所以这篇文章, ...

最新文章

  1. Windows内核 基本汇编指令
  2. 微信基于时间序的海量存储扩展性与多机容灾能力提升
  3. 箭头函数的使用用法(一)
  4. mybatis源码阅读(六) ---StatementHandler了解一下
  5. 【HDOJ】1720 A+B coming
  6. Spring-Jpa : @MappedSuperclass的作用
  7. cobol和java区别,COBOL语法和文法(1)
  8. keil中下载程序的擦除功能
  9. 深度学习《InfoGAN模型》
  10. 雷云3 Razer Synapse官方版-雷云3 Razer Synapse官方版下载
  11. ResNet再进化!重新思考ResNet:采用高阶方案的改进堆叠策略
  12. ArcGIS数据编辑操作
  13. 我的第一个博客:爬取豆瓣top250电影名
  14. 2020 蓝桥杯大学模拟赛(三) - 程序设计:养猫题解
  15. 应各位朋友的要求,贴出当年写的考研经历文章,希望能再给准备考研的朋友一些启发吧
  16. bootstrap框架 基础样式
  17. R 语言中1 和1L的区别
  18. Microsoft Edge打开主页就是2345界面
  19. Artifact xxx:war exploded: Error during artifact deployment.
  20. htc系统Android 7.1,HTC太强大,被誉为刷机之王,一路升到安卓7

热门文章

  1. 每秒50W笔交易,阿里双十一,架构如何优化到极致!
  2. 2020双十一,阿里云GRTN拉开直播和RTC技术下半场的序幕
  3. 【神经网络】权重衰减(weight-decay)
  4. 页面滚动到指定位置的方法
  5. google 企业邮箱 smtp pop3设置
  6. 三极管场效应参数全集
  7. JSLint中常见报错提示
  8. C语言条件运算符(?:)的使用
  9. 熊市之后!除了割肉就是割肉!(爆笑漫画)
  10. ip查看服务器信息,如何查看服务器的出口ip地址