美文网首页程序员
量化交易入门笔记-策略常用对象

量化交易入门笔记-策略常用对象

作者: 东南有大树 | 来源:发表于2018-10-05 22:58 被阅读4次

    在股票量化策略中,还会用到一些常用的对象,如 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 = 1
        g.flag = 0
        
    def 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 的整数 1
          context.portfolio = 1
          log.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.year
        month = context.current_dt.month
        day = context.current_dt.day
        hour = context.current_dt.hour
        minute = context.current_dt.minute
        second = 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 : 这段时间的平均价

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

    相关文章

      网友评论

        本文标题:量化交易入门笔记-策略常用对象

        本文链接:https://www.haomeiwen.com/subject/wtdcaftx.html