9.6 股票量化策略的常用对象

9.6 股票量化策略的常用对象


在股票量化策略中,还会用到一些常用的对象,如Order 对象、全局对象g 、Trade 对象等。下面详细讲解一下常用对象。

9.6.1 Order 对象

Order 对象的常用属性如下:

Amount: 下单数量,不管是买还是卖,都是正数。

filled :已经成交的股票数量,正数。

security : 股票代码。

order_id : 订单id 。

price : 平均成交价格,已经成交的股票的平均成交价格(一个订单可能分多次成交)。

avg_cost : 卖出肘表示下单卖出前的此股票的持仓成本,用来计算此次卖出的收益。买入时表示此次买入的均价(等同于price)。

side : 用来指定开多单,还是空单。如果其值是long 代表开多单,如果其值是short 代表开空单。

action: 用来指定是开仓,还是平仓。如果其值是open 代表开仓, 如果其值是close 代表平仓。

add_time: 订单添加时间。

9.6.2 全局对象9

全局对象g ,用来存储用户的各类可被pickle.dumps 函数序列化的全局数据。

在模拟盘中,如果中途进程中断,我们会使用pickle.dumps 序列化所有的g 下面的变量内容,保存到磁盘中,再启动的时候模拟盘就不会有任何数据影响。如果没有用g 声明,会出现模拟盘重启后,变量数据丢失的问题。

如果不想g 中的某个变量被序列化,可以让变量以"—'开头,这样,这个变量在序列化时就会被忽略。

全局对象g 的实例代码如下:

9.6.3 Trade 对象

Trade 对象用于记录订单的一次交易。但需要注意的是,一个订单可能分多次交易。Trade 对象的常用属性如下:

time: 交易时间。

amount : 交易数量。

pnce: 交易价格。

trade_id :交易记录id。

order_id : 对应的订单id 。

9.6.4 tick 对象

tick 中的信息是在tick 事件发生肘,盘面的一个快照。tick 对象的常用属性如下:

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 :买一价到买五价,对于期货,只有买一价。

9.6.5 Context 对象

Context 对象,即量化策略回测对象,某常用属性如下:

subportfolios :当前单个操作仓位的资金和标的信息。

portfolio : 账户信息,即subportfolios 的汇总信息。

current_dt :当前单位时间的开始时间。如果是按天回测,那么开始肘间是hour = 9 , m皿ute = 30 , second = microsecond = 0; 如果是按分钟回测,那么开始时间是second = microsecond = 0 。

previous_date :前一个交易日。

universe : 查询set_uni verse( )设定的股票池,例如: [ "000001.XSHE" 、"600000.xSHG" 1 。

run_params: 表示此次运行的参数,有如下属性:

start date: 回测/模拟开始曰期。

end_date: 回测/模拟结束曰期。

type: 运行方式,如果真值是"、"simple_backtest",表示回测是通过单击"编译运行"运行; 如果其值是 "full_backtest" 表示回测是通过单击"运行回测"运行;如果其值是"sim_trade" ,表示模拟交易。

frequency : 运行频率,只能是"day" 、" minute" 或"tick" 。

为了让从其他平台迁移过来的程序员更顺手的使用系统,我们对此对象也做了和g 一样的处理:

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

第二,以"一"开头的变量不会被持久保存。

第三,如果添加的变量与系统的冲突, 将覆盖掉系统变量,如果想恢复系统变里,就要删除自己的变量, 实例代码如下:

第四,以后可能会向context 中添加新的变量来支持更多功能,为了减少不必要的麻烦,还是建议大家使用g 。

Context 对象的实例代码如下:

9.6.6 Position 对象

Position 对象是持有的某个标的的信息,其常用属性如下:

security : 标的代码。

price: 最新行情价格。

avg_cost : 开仓均价,买入标的的加权平均价。

hold_cost : 持仓成本,针对期货有效。

init_time :建仓时间,格式为datetime.datetime 。

transact_time : 最后交易时间,格式为datetime.datetime 。

total_amount : 总仓位但不包括挂单冻结仓位。

closeable_arnount : 可卖出的仓位。

today_amount :今天开的仓位。

locked_amount :挂单冻结仓位。

value : 标的价值,计算方法是: price * total_amount * multiplier,其中股票、基金的multiplier 为1 ,期货为相应的合约乘数。

side: 用来指定开多单,还是空单。如果其值是long 代表开多单,如果其值是short 代表开空单。

pindex: 仓位索引。

9.6.7 SubPortfolio 对象

SubPortfolio 对象是某个仓位的资金和标的信息,其常用属性如下:

inout_cash : 累计出入金,比如初始资金1000 元,后来转移出去100,则这个值是1000-100=900 元。

available_cash :可用资金,可用来购买证券的资金。

transferable_cash :可取资金,即可以提现的资金,不包括今日卖出证券所得资金。

locked_cash : 挂单锁住资金。

type : 账户所属类型。

long_positions : 多单的仓位。

short_positions : 空单的仓位。

positioDS_ value :持仓价值,股票基金才有持仓价值,期货为0 。

total_ value : 总资产,包括现金,保证金,仓位的总价值,可用来计算收益。

total_liability: 总负债,等于融资负债、融券负债、利息总负债的总和。

net_value: 净资产,等于总资严减去总负债。

cash_liability :融资负债。

sec_liability :融券负债。

interest :利息总负债。

maintenance_margin_rate: 维持担保比例。

available_margin :融资融券可用保证金。

margin: 保证金,股票、基金保证金都为100% ;融资融券保证金为0;期货保证金会实时更新,总是等于当前期货价值×保证金比率,当保证金不足时,强制平仓。平仓顺序是:亏损多的(相对于开仓均价)先平仓。

9.6.8 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 : 总的权益,包括现金,保证金,仓位的总价值,可用来计算收益。

retums: 总权益的累计收益。

starting_cash: 初始资金。

positions_val ue : 持仓价值,股票基金才有持仓价值,期货为0 。

locked_cash_by purchase :基金申购未完成所冻结的金额。

locked_cash_by redeem : 基金赎回来到账的金额。

locked_arnount_by redeem :基金赎回时,冻结的份额。

9.6.9 SecurityUnitData 对象

SecurityUnitData 对象是一个单位时间内的股票的数据,其常用属性如下:

security: 股票代码。例如"000001.xSHE" 。

retums: 股票在这个单位时间的相对收益比例。

open : 时间段开始时价格。

close : 时间段结束时价格。

low: 最低价。

high: 最高价。

volume : 成交的股票数量。

money : 成交的金额。

factor : 前复权因子。利用前复权因子可以算出原始价格,方法是价格除以factor ,即原始价格=close÷factor 。

high_limit : 涨停价。

low_limit: 跌停价。

avg : 这段时间的平均价。