金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 1423|回复: 5

portfolio.pnl好像有问题

[复制链接]

13

主题

64

帖子

74

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
发表于 2021-12-14 23:47 | 显示全部楼层 |阅读模式
为观察开仓前后portfolio对象的属性变化,在before_trading(context)和after_trading方法中获取相关数据,并打印
部分代码:
def before_trading(context):
    date_time_base = history_bars('sqau00', 5, 'self', 'datetime', True, True, True)
    #拿到datetime.datetime类型的日期 数组,以调用其方法
    date_time = get_datetime(date_time_base)
    for i in context.heyue:
        close = history_bars(i, context.period + 1, 'self', 'close', True, True, True)
        portfolio = get_portfolio(i, 0)
        kcfdyk = portfolio.pnl
        kcj = portfolio.buy_avg_open_price
        ccj = portfolio.buy_avg_holding_price
        kcj2 = portfolio.sell_avg_open_price
        ccj2 = portfolio.sell_avg_holding_price
        print('日期{},品种{},盘前浮动盈亏{},今收{}, 多头开仓成本{},多头持仓成本{},\
        空头开仓成本{},空头持仓成本{}'.format(date_time[-1].day,i, kcfdyk, close[-1], kcj, ccj,
        kcj2, ccj2))
策略部分为平仓反手。。。。

def after_trading(context):
    date_time_base = history_bars('sqau00', 5, 'self', 'datetime', True, True, True)
    #拿到datetime.datetime类型的日期 数组,以调用其方法
    date_time = get_datetime(date_time_base)
    for i in context.heyue:
        close = history_bars(i, context.period + 1, 'self', 'close', True, True, True)
        portfolio = get_portfolio(i, 0)
        todaybuy = portfolio.buy_today_quantity
        todaysell = portfolio.sell_today_quantity
        kcfdyk = portfolio.pnl
        kcj = portfolio.buy_avg_open_price
        ccj = portfolio.buy_avg_holding_price
        kcj2 = portfolio.sell_avg_open_price
        ccj2 = portfolio.sell_avg_holding_price
        print('日期{},品种{},盘后,今日开多{},今日开空{},开仓后浮动盈亏{}, 多头开仓成本{},\
        多头持仓成本{}, 空头开仓成本{},空头持仓成本{},今收{}'.format(date_time[-1].day, i,
        todaybuy, todaysell, kcfdyk, kcj, ccj, kcj2, ccj2, close[-1]))


打印结果:
1、异常段
22:47:00 > 日期7,品种SQAU00,盘前浮动盈亏17311.58447265625,今收404.9249267578125, 多头开仓成本396.2691345214844,多头持仓成本396.2691345214844,        空头开仓成本0.0,空头持仓成本0.0
22:47:00 > 日期8,品种SQAU00,盘后,今日开多0,今日开空0,开仓后浮动盈亏11223.44970703125, 多头开仓成本396.2691345214844,        多头持仓成本396.2691345214844, 空头开仓成本0.0,空头持仓成本0.0,今收401.880859375
22:47:00 > 日期8,品种SQAU00,盘前浮动盈亏11223.44970703125,今收401.880859375, 多头开仓成本396.2691345214844,多头持仓成本396.2691345214844,        空头开仓成本0.0,空头持仓成本0.0
22:47:00 > 日期11,品种SQAU00,盘后,今日开多0,今日开空2,开仓后浮动盈亏-781316.5893554688, 多头开仓成本0.0,        多头持仓成本0.0, 空头开仓成本390.6282958984375,空头持仓成本390.6282958984375,今收390.6582946777344
22:47:00 > 日期11,品种SQAU00,盘前浮动盈亏-781316.5893554688,今收390.6582946777344, 多头开仓成本0.0,多头持仓成本0.0,        空头开仓成本390.6282958984375,空头持仓成本390.6282958984375
22:47:00 > 日期12,品种SQAU00,盘后,今日开多0,今日开空0,开仓后浮动盈亏-786227.783203125, 多头开仓成本0.0,        多头持仓成本0.0, 空头开仓成本390.6282958984375,空头持仓成本390.6282958984375,今收393.1138916015625

*****说明,在11日平多开空后,浮动盈亏(portfolio.pnl)突然变成了-781316.5893554688,这是不可能的,只开了两手,按收盘价开仓,浮动盈亏应该只亏手续费
2、正常段
22:47:00 > 日期1,品种SQAU00,盘后,今日开多0,今日开空0,开仓后浮动盈亏-738388.4887695312, 多头开仓成本0.0,        多头持仓成本0.0, 空头开仓成本390.6282958984375,空头持仓成本390.6282958984375,今收369.1942443847656
22:47:00 > 日期1,品种SQAU00,盘前浮动盈亏-738388.4887695312,今收369.1942443847656, 多头开仓成本0.0,多头持仓成本0.0,        空头开仓成本390.6282958984375,空头持仓成本390.6282958984375
22:47:00 > 日期2,品种SQAU00,盘后,今日开多2,今日开空0,开仓后浮动盈亏-59.99755859375, 多头开仓成本374.281982421875,        多头持仓成本374.281982421875, 空头开仓成本0.0,空头持仓成本0.0,今收374.2519836425781
22:47:00 > 日期2,品种SQAU00,盘前浮动盈亏-59.99755859375,今收374.2519836425781, 多头开仓成本374.281982421875,多头持仓成本374.281982421875,        空头开仓成本0.0,空头持仓成本0.0
22:47:00 > 日期6,品种SQAU00,盘后,今日开多0,今日开空0,开仓后浮动盈亏-5481.93359375, 多头开仓成本374.281982421875,        多头持仓成本374.281982421875, 空头开仓成本0.0,空头持仓成本0.0,今收371.541015625

*****说明,在2日平空开多后,浮动盈亏(portfolio.pnl)为-59.99755859375,这是正常的,按收盘价开仓,浮动盈亏只亏手续费
另外,测试报告成交明细,未见异常,所以仅仅是portfolio.pnl有问题。
问题总结:开多时,portfolio.pnl浮动盈亏正常,开空时,portfolio.pnl浮动盈亏异常。请确认问题并查找原因。
截图202112142345293437.png
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2021-12-15 09:34 | 显示全部楼层
问题已看到,会提交开发组查下问题
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

13

主题

64

帖子

74

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2021-12-15 16:28 | 显示全部楼层
get_charge()这个函数好像也有问题,如图,由于是收盘价开仓,所以当日浮动盈亏,实际上就是亏的手续费,
但是get_charge()获得的费用却明显小于当日浮动盈亏,代码如下:
for i in context.heyue:
        close = history_bars(i, context.period + 1, 'self', 'close', True, True, True)
        if len(close) < context.period + 1 :
            continue
        portfolio = get_portfolio(i, 0)
        todaybuy = portfolio.buy_today_quantity
        todaysell = portfolio.sell_today_quantity
        totalbuy = portfolio.buy_quantity
        totalsell = portfolio.sell_quantity
        kcfdyk = portfolio.pnl
        kcj = portfolio.buy_avg_open_price
        ccj = portfolio.buy_avg_holding_price
        kcj2 = portfolio.sell_avg_open_price
        ccj2 = portfolio.sell_avg_holding_price
        if  totalbuy > 0 or todaysell > 0:
            charge = get_charge(i, close[-1], max(todaybuy,todaysell), 0)
        else:
            charge = 0

        print('{},品种{},盘后,今开多{},今开空{},多总持{},空总持{},浮动盈亏{},多头开仓成本{},\
多头持仓成本{}, 空头开仓成本{},空头持仓成本{},今收{}, 费用{}'.format(date, i,
        todaybuy, todaysell, totalbuy, totalsell, kcfdyk, kcj, ccj, kcj2, ccj2, close[-1], charge))
输出见图
截图202112151621403309.png
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2021-12-15 16:35 | 显示全部楼层
计算交易费用,根据 交易菜单->合约信息设置 中预设的合约信息和费率

这个不是你实际费用,就是根据费率然后结合你数量和价格算出来的,就是基本的连乘计算,你自己把价格数量,费率,单位都乘起来就是
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

13

主题

64

帖子

74

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2021-12-15 16:40 | 显示全部楼层
系统在计算开仓成本的时候也是计算了手续费的,这个手续费当然也是合约信息设置中预设的,我的意思是在多头开仓当日出现的浮动盈亏,实际上就是因为开仓成本里面加了手续费造成的,这个浮动盈亏是对的。charge = get_charge(i, close[-1], max(todaybuy,todaysell), 0),我这个传参因该没问题,但是输出结果是不对的。
回复

使用道具 举报

13

主题

64

帖子

74

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2021-12-15 16:49 | 显示全部楼层
不好意思,是我算错了,函数没问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2024-12-22 19:24 , Processed in 0.250113 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表