不需要啊,只需要获取开盘价就可以判断高开了;感觉只能是在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),应该是平仓吧?
意思是CTA申请的那个只能用于期货程序化,ETF期权,股指期权,商品期权需要另外的申请?
看了下tick数据订阅:ctatemplate 有on_tick
1.想着tick数据到底从哪儿获取的? main_engine.get_contract ----main_engine.subscribe-----geteway_subscribe----subscribe(pass),subscribe没有内容,那么tick数据怎么获得的推送?
均价线AVL指标,看了下arraymanager 、talib里面没有这个指标,如何自己实现?
xiaohe wrote:
是[-14:-6]吧
[-14:-6]对了,但没搞清楚这个切分,是不是+位置不算呢
xiaohe wrote:
这样没用啊,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:
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(),就不会出现重复了
我也遇到过,每次关闭,打开价差策略列表中都多复制一份策略名,按照上述方法解决了,棒棒哒
目前的代码是修改好了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前面一根的高点?