赞
踩
对于只学过一些python编程但是又想学习量化的朋友来说,他可能不太理解什么是对象,但是对象贯穿于整个编程过程,如果不会使用对象的话,可能很难学会量化编程。在python里,对象其实是一个指针,指向一个数据结构,数据结构里有属性,有方法。
- #我们先定义一个类
- class para():
- pass
- #然后
- para = para() #这里的para参数其实就是一个对象
- #我们可以使用para在不同的函数之间传递传输
-
- #例如:
- def initialize(context):
- para.A = 5
-
- def handle_data(context, data):
- log.info(para.A)
Ptrade里面有一个全局对象g,我们可以直接用来传递参数,例如:
- def initialize(context):
- g.A = 5
-
- def handle_data(context, data):
- log.info(g.A)
当然了Ptrade作为一个十分成熟的量化平台还有其他很好用的对象,里面包含了一些常用的方法,可以让你获取到一些数据。比如:
Context 上下文对象
context上下文对象中包含的方法有
capital_base -- 起始资金 previous_date –- 前一个交易日 sim_params -- SimulationParameters对象 capital_base -- 起始资金 data_frequency -- 数据频率 portfolio -- 账户信息,可参考Portfolio对象 initialized -- 是否执行初始化 slippage -- 滑点,VolumeShareSlippage对象 volume_limit -- 成交限量 price_impact -- 价格影响力 commission -- 佣金费用,Commission对象 tax—印花税费率 cost—佣金费率 min_trade_cost—最小佣金 blotter -- Blotter对象(记录) current_dt -- 当前单位时间的开始时间,datetime.datetime对象(北京时间) recorded_vars -- 收益曲线值
使用示例:
- def initialize(context):
- g.security = ['600570.SS', '000001.SZ']
- set_universe(g.security)
-
- def handle_data(context, data):
- #获得当前回测相关时间
- pre_date = context.previous_date
- log.info(pre_date)
- year = context.blotter.current_dt.year
- log.info(year)
- month = context.blotter.current_dt.month
- log.info(month)
- day = context.blotter.current_dt.day
- log.info(day)
- hour = context.blotter.current_dt.hour
- log.info(hour)
- minute = context.blotter.current_dt.minute
- log.info(minute)
- second = context.blotter.current_dt.second
- log.info(second)
- #得到"年-月-日"格式
- date = context.blotter.current_dt.strftime("%Y-%m-%d")
- log.info(date)
- #得到周几
- weekday = context.blotter.current_dt.isoweekday()
- log.info(weekday)
SecurityUnitData对象
要点:要在initialize框架种设置股票池,data才会更新其SecurityUnitData对象,data的key是股票代码sid,值是对应的SecurityUnitData对象
基本方法:
- dt 时间
- open 时间段开始时价格
- close 时间段结束时价格
- price结束时价格
- low 最低价
- high 最高价
- volume 成交的股票数量
- money 成交的金额
使用示例:
- def initialize(context,data):
- list = ['600519.SS']
- set_universe(list) #设置股票池,使data中更新对应的SecurityUnitData对象
-
- def handle_data(context,data):
- data['600519.SS'].price #取该标的价格
Portfolio对象
内容:
- cash 当前可用资金(不包含冻结资金)
- positions 当前持有的标的(包含不可卖出的标的),dict类型,key是标的代码,value是Position对象
- portfolio_value 当前持有的标的和现金的总价值
- positions_value 持仓价值
- capital_used 已使用的现金
- returns 当前的收益比例, 相对于初始资金
- pnl 浮动盈亏
- start_date 开始时间
使用示例:
- def initialize(context):
- pass
-
- def handle_data(context, data):
- log.info(context.portfolio.portfolio_value)
Position对象
内容:
sid 标的代码 enable_amount 可用数量 amount 总持仓数量 last_sale_price 最新价格 cost_basis 持仓成本价格(期货不支持) today_amount 今日开仓数量(期货不支持,且仅回测有效) 期货专用字段: delivery_date 交割日,期货使用 today_short_amount 空头今仓数量 today_long_amount 多头今仓数量 long_cost_basis 多头持仓成本 short_cost_basis 空头持仓成本 margin_rate 保证金比例 contract_multiplier 合约乘数 long_amount 多头总持仓量 short_amount 空头总持仓量 long_pnl 多头浮动盈亏 short_pnl 空头浮动盈亏 long_enable_amount 多头可用数量 short_enable_amount 多空头可用数量 business_type 业务类型
使用示例:
- def initialize(context):
- g.security = '600570.SS'
- set_universe(g.security)
-
- def handle_data(context, data):
- order(g.security,1000)
- position = get_position(g.security)
- log.info(position)
Order对象
内容:
- id -- 订单号
- dt -- 订单产生时间
- limit -- 指定价格
- symbol -- 标的代码(备注:标的代码尾缀为四位,上证为XSHG,深圳为XSHE,如需对应到代码请做代码尾缀兼容)
- amount -- 下单数量,买入是正数,卖出是负数
- created -- 订单生成时间, datetime.date对象
- filled -- 成交数量,买入时为正数,卖出时为负数
- entrust_no -- 委托编号
- priceGear -- 盘口档位
- status -- 订单状态(str),该字段取值范围:
- '0' -- "未报"
- '1' -- "待报"
- '2' -- "已报"
- '3' -- "已报待撤"
- '4' -- "部成待撤"
- '5' -- "部撤"
- '6' -- "已撤"
- '7' -- "部成"
- '8' -- "已成"
- '9' -- "废单"
- '+' -- "已受理"
- '-' -- "已确认"
- 'V' -- "已确认"
示例:
- def initialize(context):
- g.security = '600570.SS'
- set_universe(g.security)
-
- def handle_data(context, data):
- order(g.security, 100)
- order_obj = get_orders()
- log.info(order_obj)
欢迎私信交流
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。