VeighNa量化社区
你的开源社区量化交易平台
Member
离线
31 帖子
声望: 0

大侠说的,我明白。视频中最后的那个总结图,我也觉得没看明白。锁仓目的是平今手续费。都是先检查今仓,和昨仓,在看是否反向开仓的情况。这些都能理解。但是,对于有昨仓(无今仓)的情况下,开仓怎么处理? 正如上面我举例的那个情况,能否按照我的例子给解答一下。
1)昨仓Buy 2手,Sell 2手
2)今第一笔开仓:开空仓1手(sell open 1手)。在策略层下单self.short(lock=True)
3) 代码走到converter.py,offset被改成了close。(但是direction没变,仍是short)
if yd_available:
req_yd = copy(req)
if self.exchange in [Exchange.SHFE, Exchange.INE]:
req_yd.offset = Offset.CLOSEYESTERDAY
else:
req_yd.offset = Offset.CLOSE
req_yd.volume = close_volume
req_list.append(req_yd)

4)最终下单就得到了short close,也即sell close。

到底哪里不对了??
是第2),在开空仓时不应该用self.short? 而是self.cover() ,即buyclose吗? 我要的是开空仓,如果自己判断了平今惩罚,而变成buyclose,就不用走锁仓模式啊?
是说 平仓时才用lock=True。 开仓就不用?(记得说过要用锁仓,就都要用啊)

xiaohe wrote:

> 多平是cover。锁仓模式只修改offset不修改direction

多谢回答。 有点更迷糊了,麻烦给捋捋。。。

我是想要开一手空,不是要平多。(我的理解平多,应该是锁仓模式给自动转换的?)

还是上面的例子,逻辑上来说,想要开一手空(即 sell open),正常应该是下单self.short() .
如果不用锁仓模式,当然就直接下去到交易所就好。显示出来也是sell open。
如果用了锁仓模式,该订单在convert里边转化成cover,即发了平多出去(经过未开今以及有昨仓的判断后)。

不是以上的过程这样? 如果不是,上面的例子,要开空,就要下平多。这就变成我自己判断,不需要锁仓转换了啊??

还请大侠再详细解释指点一下,我是哪个地方想错了。

假定股指有昨仓 buy 2手,sell 2手; 今天第一笔开仓想要 sell open 1手。 调用的self.short(). 用了锁仓模式lock=True。
结果应该是变成buy1手,sell 2手?(即 buy close 1)--我认为预期结果是这个。
还是 buy 2手,sell 3 手?(即直接sell open 1 )?

按照convert.py代码里的:
if yd_available:
req_yd = copy(req)
if self.exchange in [Exchange.SHFE, Exchange.INE]:
req_yd.offset = Offset.CLOSEYESTERDAY
else:
req_yd.offset = Offset.CLOSE
req_yd.volume = close_volume
req_list.append(req_yd)

发现最终下出去的指令是 sell close。。。为什么不是buy close?!

麻烦大侠指教,谢谢

谢谢大神的回答!

谢谢耐心指导。菜鸟问题多多,不好意思。
一个品种跑一个策略,这个前提,我能理解。

1)“在process_position_event函数下给OffsetConverter这个类更新了仓位。”
这个process_position_event是怎样才会触发? 系统检查底层仓位有变化,就触发更新OffsetConverter?还是说要成交回报来触发(错过就不会触发)?
2)如果上边这点是底层仓位变化就触发,那么要获得仓位,只要在OffsetConverter获取get_position_holding就能获取?如果不是,你说的get_pos是指哪个?

谢谢

谢谢回答。 我再理解一下,就是说:如果确实漏掉了成交回报,再等多3秒(底层自动刷新时间),pos会被更新成正确的持仓,是吗?
那如果重启系统,会不会在读取完json(此时还是错误的)之后,会将pos与底层同步一次? 如果是这样,是不是可以理解成,万一漏掉成交回报,不一致了,就重启一次系统,即可完成底层与pos的同步?

照我的理解,问题就是:当系统被意外关闭或者网络意外断开,导致错过了部分成交回报,这种情况下,系统对于self.pos就无法被更新了?(即便重启系统也没用?) 除了手动修改json文件,让系统重启的时候读取之外,还有其他方法吗? 比如,不是说系统会每隔3秒在底层查询一次持仓,这个查询会更新到pos上来吗?或者策略可否主动查询,然后自己来更新这个pos?

以上这种情况,应该实盘很常见,不知道各位大神都是怎么处理的。。。
麻烦再给回答一下,谢谢。

若在实盘交易过程中,因各种原因导致程序退出或网络中断,一段时间后,程序网络又重新启动恢复正常。如果恰好退出/断开的中间有成交回报错过,因为 策略层没法主动查询底层持仓,持仓怎么维护?
1)原本策略代码想是通过成交回报自己维护持仓。那么中断导致策略漏掉数据,有什么方法?
2)系统重启动后,self.pos(逻辑持仓)还会是准确的吗?系统重启时,会主动更新一次逻辑持仓吗? 怎么可以获取详细持仓信息然后同步回策略自己维护的持仓当中。
3)断开的过程中,可能还包括手动去做的一些下单操作等,这些成交怎么可以同步回逻辑持仓当中?
谢谢

1)日志问题:为了debug,从run.py 加载ui界面。然后进入CTA回测。在回测当中,界面上有日志,可是日志文件始终没有生成。 在界面的配置里面已经设置了级别10,True等。是要怎么才有文件日志生成呢?

2)CTA策略init时,调用ArrayManager(10) 。假设参数是10. 为什么分钟onbar开始的时候,第一分钟就是从9:40开始,为什么不是9:30开始呢?
是不是说因为我的策略要求前10分钟的数据需要用来计算指标之类的,所以必然从9:40开始。 那么,如果我需要昨天最后n分钟,例如n=30分钟的数据来计算指标(onBar第一分钟从第二天的9:31开始),那该怎么设置?(如果这里设置30,开始日期要提前一天的话,好像也不对啊?)

3)是不是 on_init()里面的load_bar() --指定加载过去n天的数据来执行策略初始化任务。这个只要大于我前面ArrayManager(10)的就可以。比如我只要30分钟的,那么这里1天就足够了?

谢谢

谢谢回答。

看了你给的帖子里最后的回答,好像也是自己去记录保存所有下单信息及回报信息,然后自己计算。

可以在策略层直接调用engineer的对应接口吗?get_all_postions之类的。。新手技能有限,不知道有没有列子可以参考。

感谢!

策略在运行当中,考虑追单,平仓等原因,需要获取当日的历史成交信息,当前的持仓信息(甚至包括昨仓和今仓)以及当日的委托信息等。。

1)看了论坛的一些提问和说法:在策略里,是没有接口获取吗?如果有,请问要怎么获取。main_engine.get_all_trades这种是可以直接用吗?
2)如果不能在策略获取,那是不是说要在策略的onTrade/onOrder里边,这些信息全部由策略代码来自己维护这些信息?
3)假设自己维护这些信息,那么怎么确保和ctp柜台端保持一致。可能有各种原因导致自己保存的和柜台的不一致的情况。可以定期从CTP同步还是建议策略怎么做?有具体同步函数接口吗
3)如果在策略运行的过程中,使用vnpy界面进行了开平仓处理,会触发策略的onTrade/onOrder吗(如果有单过来,还可以自己维护起来)? 再者,如果未经过vnpy,而是通过类似快期这种ctp客户端操作,vnpy底层会忽略还是说会触发到策略层,由策略层来自己决定如何处理?
谢谢。

© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】