金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 3610|回复: 13

关于portfolio属性的修改

[复制链接]

13

主题

64

帖子

74

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
发表于 2021-11-26 11:54 | 显示全部楼层 |阅读模式
在均线示例策略中,下单环节的语句如下
if ma5[-1]>ma20[-1] and ma5[-2]<ma20[-2]:        buy_open(context.s1, "market", volume=100)if ma5[-1]<ma20[-1] and ma5[-2]>ma20[-2]:        portfolio = get_portfolio(context.s1,0)        sell_close(context.s1,"market", volume=portfolio.buy_quantity)



buy_open()指令是在portfolio对象创立之前执行的,那portfolio.buy_quantity这个值是怎样被修改的?从而能够传入sell_close()之中。
回复

使用道具 举报

31

主题

7889

帖子

7899

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2021-11-26 13:01 | 显示全部楼层
没明白你问题,这就是返回这个品种的多头持仓
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

13

主题

64

帖子

74

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2021-11-26 13:16 | 显示全部楼层
我的意思是portfolio.buy_quantity的值是什么时候赋值或者修改的,比如是在执行了BUY_、sell_等指令之后,系统对之进行了修改吗?
回复

使用道具 举报

31

主题

7889

帖子

7899

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2021-11-26 13:18 | 显示全部楼层
你账户有持仓了,他就有值了
他就是直接读你账户持仓的,就和你看你账户那边持仓一样,有了就有了
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

13

主题

64

帖子

74

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2021-11-26 13:44 | 显示全部楼层
如果是回测环节呢?并没有账户,它是怎么赋值的?
回复

使用道具 举报

31

主题

7889

帖子

7899

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2021-11-26 13:49 | 显示全部楼层
回测也是报单后等下一根k才成交,也就是说报单后不是马上有持仓的
这个就和软件pel回测一样,都是会建立回测账户的
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

13

主题

64

帖子

74

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2021-11-26 14:03 | 显示全部楼层
PEL的持仓变化是不一样的,例如
bfholding:=holding;
buy(1,s,limitr,open);
afholding:=holding;
这里触发BUY指令后,当根K线,holding就变了,不需要等下一根K
回复

使用道具 举报

31

主题

7889

帖子

7899

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2021-11-26 14:04 | 显示全部楼层
python的回测设计更贴合实盘点,所以做了一个开盘后不是立即持仓的变化

这个是和图表不一样的

ps:后台回测也是一样,开仓后不是立即有持仓
ps:这些你可以自己写个程序自己测试的,这样更好理解
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

13

主题

64

帖子

74

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2021-11-26 14:19 | 显示全部楼层
好的,我试下,谢谢
回复

使用道具 举报

13

主题

64

帖子

74

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2021-11-29 10:05 | 显示全部楼层
经过测试,我总结的规律如下:
1、必须要执行get_portfolio()函数,刷新对象,portfolio的属性的值才会被修改,一般情况下之所以要到下一个BAR,portfolio.sell_quantity才会变化,是因为要到下一根BAR时,才会循环重新执行get_portfolio语句。
2、但如果在buy_\sell_指令下面,插入get_portfolio(),例如
portfolio = get_portfolio('dqeb00', 0)
if ma5[-1] > ma20[-1] and ma5[-2] < ma20[-2]:
            if portfolio.sell_quantity > 0:
                buy_close(i, "market", volume = portfolio.sell_quantity,serial_id = 1)
                portfolio = get_portfolio('dqeb00', 0)
                print('平空后,多头%d,空头%d' %(portfolio.buy_quantity, portfolio.sell_quantity))
                buy_open(i, "market", volume = 1,serial_id = 2)
                portfolio = get_portfolio('dqeb00', 0)
                print('反手买开,多头%d,空头%d' %(portfolio.buy_quantity, portfolio.sell_quantity))
结果显示,平仓指令后,get_portfolio(),持仓量马上就变化了,不需要等到下一根K,这跟PEL中的虚拟持仓holding 一样;但是,在开仓指令后,get_portfolio(),
持仓量却不会改变,必须要到下一根K,才能读到持仓量的变化。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-29 21:53 , Processed in 0.223110 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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