VeighNa量化社区
你的开源社区量化交易平台
ahren's Avatar
Member
离线
101 帖子
声望: 5

不需要啊,只需要获取开盘价就可以判断高开了;感觉只能是在tick里面获取第一个tickopen,然后在on——tick里面成交

单一策略对应不同标的,在功能——CTA策略——添加策略,分别添加不同标的;假设策略TestStrategy,意味着我通过这个策略类创建了多个策略实例;想了下,是不是不同标的开盘时间不一样,导致创建实例时候start_time属性混乱
1.创建了一个tradinghour.py (class TRADINGHOUR,有get_trading_time(symblo)方法、trading_period(bar)方法)可以获取不同标的开盘、收盘时间,和不同标的一天的交易时间段;
2.在策略里面import TRADINGHOUR ,在创建策略实例 (def --init--)同时创建TRADINGHOUR的实例self.tradingtime;
3.在on_init里面调用self.tradingtime.get_trading_time()获取开盘时间self.start_time;
这里面有个问题,start_time应该是time对象,属于可变对象,是不是应该在def--init--里面同时初始化一下,作为全局变量可以在后面实例方法里面用;我是把start_time作为类的全局变量,start_time = “”,在on_init 里面用self.tradingtime.get_trading_time()方法获取具体实例的开盘价,然后在on_bar里要用到self.start_time

1.同一策略,不同标的同时开盘前开启,开盘前总会出现没有数据更新情况,有时候延迟几分钟,今天延迟了差不多15min才更新(主逻辑在on_bar里面)
2.同一策略,夜盘标的在上述更新完成后,可以随时更新日内高低点,只有白盘的标的,日内高低点只能等到有仓位时候才能更新
注:区分白盘夜盘,自己建了一个json文件,存放标的开盘时间,比对json文件与 self.symol抓取开盘时间;单个标的测试打印开盘时间没问题
3.同一策略,不同标的,当某几个标的入场后手动平仓了,停止这几个标的对应的策略,依然在发出止损单,开仓单,这意味着没有停止该标的对应的策略啊

1.set_singal_pos(),跑回测时候,都是开仓,实盘里面,如果仓位为1,set_singal_pos(0),应该是平仓吧?

  1. 如果条件是开盘高开开仓,写在on_bar 里面,用set_singal_pos()开仓1手,实盘成交应该是第一分钟内成交,还是等第1根k走完成交?模拟盘都是第一k走完成交;如果想开盘立即成交,应该怎么写呢?

意思是CTA申请的那个只能用于期货程序化,ETF期权,股指期权,商品期权需要另外的申请?

看了下tick数据订阅:ctatemplate 有on_tick
1.想着tick数据到底从哪儿获取的? main_engine.get_contract ----main_engine.subscribe-----geteway_subscribe----subscribe(pass),subscribe没有内容,那么tick数据怎么获得的推送?

  1. 实盘获得tick数据后,在bargenerator 合成分钟,小时等k线,然后arraymanager管理k线生成指标,是这个流程吧?那么实盘过程是不是没用rqdata的数据呢?
  2. 回测模式,直接用rqdata的分钟数据;想搞清楚回测模式、实盘过程中数据的订阅过程需要看什么文档?

均价线AVL指标,看了下arraymanager 、talib里面没有这个指标,如何自己实现?

xiaohe wrote:

是[-14:-6]吧
[-14:-6]对了,但没搞清楚这个切分,是不是+位置不算呢

xiaohe wrote:

可参考https://www.vnpy.com/forum/topic/3458-si-xing-dai-ma-he-cheng-ri-kxian-shu-ju-chao-jian-dan-fu-dai-ma?page=1#pid12325试试看

这样没用啊,on_day_bar 打印完全没有内容,把时间if self.last_bar and str(bar.datetime)[-8:]=='14:59:00': 修改为if self.last_bar and str(bar.datetime)[-14:-7]=='14:59:00': 也打印不出内容

xiaohe wrote:

如果想给夜盘计算开盘点位,可以自行合成从夜盘开始的日线来计算吧
自己合成了rb2101 ,方法 bargenerator(self.on_bar,7,self.on_day_bar,Interval.HOUR),打印出来日线开盘价为9:01分开盘价格,收盘价为次日21:00收盘价,也就是说这种方法合成日线延迟了1min

xiaohe wrote:

tick应用可参考https://www.vnpy.com/forum/topic/86-shi-yong-targetpostemplatemo-ban-hui-ce-hui-ce-ji-lu-li-zhi-you-kai-cang-mei-you-ping-cang

print看着在tick里面有不断更新数据,但仓位不更新;然后把策略写入 on_bar 测试setTargetPos 依然改变不了仓位,在settargetpos里面打印,是有接受新仓位的,但仓位最终没变;然后新建class newtargetPosTemplate,重新定义settargetpos 的sendneworder,全部改成stop单依然没有改变仓位;网格搞定了,最后就差这个仓位变动实现不了

xiaohe wrote:

TargetPosTemplate 就是根据设定的target_pos和策略持仓的差值进行下单来使仓位达到target_pos的。可以自己试试看

建了一个类 TestGrid(TargetPosTemplate),然后在on_tick 里面写网格策略,只成交了首次减仓;分别在on_tick 里面super(TestGrid,self).on_tick(tick),on_bar里面 super(TestGrid,self).on_bar(bar),这样能实现tick数据更新吗,还是需要在TestGrid里面在价格Bargenerater更新tick,bar数据?如果不能实现,怎么写才能获取推送的数据呢?

世纪坚果 wrote:

app\spread_trading\ui\widget.py
类 SpreadAlgoWidget 下方法 update_class_combo,先初始化下
self.class_combo.clear(),就不会出现重复了

我也遇到过,每次关闭,打开价差策略列表中都多复制一份策略名,按照上述方法解决了,棒棒哒

用Python的交易员 wrote:

  1. 因为DT策略的信号是以开盘点位来计算生成的,每天只生成一次

如果有夜盘,又应该如何判断新的一天?

目前的代码是修改好了self.day_low = bar.low_price了吧?

用Python的交易员 wrote:

这里主要用到了一个策略信号(Signal)和交易执行(Execution)隔离的模式,TargetPosTemplate就是通过找个目标仓位的差分值来执行交易。

是不是意味着TargetPosTemplate 可以用来调整仓位到需要的水平?这样的话,如果实现网格策略,第n个网格,跳转到第n+2个网格,直接调用TargetPosTemplate的set_target_pos就可以实现仓位变动?

意思是可以同时开多个vnstation,然后每个vnstation开一个vntrader,不同vntrader可以对应不同CTP账户,这样可以就实现了多账户登录?使用相同策略会出现混乱不?

1.看了下价差交易模块,和算法交易模块里面有网格算法,思考如何在价差交易模块里开发自己的网格策略,和用bisic_srpead_stategy.py一样,填入网格参数既可进行价差的网格交易;
2.如果自己写价差网格策略,应该放在价差策略 on_spread_tick ,还是on_spread_bar里面,on_spread_tick是组合价差的tickdata嘛?如果是的话可发开发价差的tick级别高频策略

测试了下,在仓位为0时候,满足入场条件,发出买单限价单,入场是滞后一根的;如果止损单设置在仓位大于0条件里面,那么入场那根k线是没有带止损单的,只能等到k线走完,新k线出来才挂出止损单

如下图,k1满足空头入场条件,要等到k2开盘入场,问题:
1.那么到k2这根k线,intra_trade_high 是k1的高点,还是k1前面一根的高点?

  1. k2只有走完了,才能挂出止损单,在k2时间内,是没有挂出止损的?
    description
    移动止损思路如下:入场后止损挂在上根k线最高点,高点不断下移,移动止损不断下移
    if pos = 0:
    intra_trade_high = bar.high_price
    if singal_short:
    short(bar.close_price)
    if pos <0:
    cover(intra_trade_high,pos)
    intra_trade_high = min(intra_trade_high,bar.high_price)
    这么写法,实盘环境中,有时候止损在前一根k线高点,有时候止损又在前两根k线高点
    description
    图2中,k0符合空头入场条件,k1开盘入场,按照上述移动止损,k2高点超过上根k高点,理论上应该止损了,却没有;
    k5的止损应该是k4高点,实际又变成在k3高点止损了
© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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