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 : 这段时间的平均价。