量化交易平台Ptrade的对象

文章介绍了Python中的对象概念,特别是在量化编程中的应用。通过Ptrade平台的例子,展示了如何使用对象进行参数传递和数据操作,包括Context上下文对象、SecurityUnitData、Portfolio和Position等关键概念,帮助初学者理解量化交易中的数据处理和管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于只学过一些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)

欢迎私信交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方圆量化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值