在搞好IB盈透接口后,使用试了下客户端交易,进交易及使但是行I询和最终目的还是使用程序化交易。发现vnpy已经提供的用算易示Script_engine来支持Jupyter NoteBook 交易的,而且非常方便调用。法交 这里就用写了基于VNPY包,使用用代码实现IB盈透下的进交易及使查询和交易,和一个TWVP算法交易。行I询和
Script_engine的用算易示大多操作都是针对main_engine的封装,类似的法交逻辑,其他交易相关App,使用也可以用类似方法调用,香港云服务器进交易及使真的行I询和很方便,比起之前调试来说。用算易示其实算法交易调用也很直接,法交直接传入algo setting 的dict就可以。

应为Jupyter NoteBook代码不好贴,我这里又改写会直接python code。在启动tws登录后,可以直接运行。

另外IB接口的返回信息采用一个中wrapper机制,有点类似Spring的反转调用,可以理解为本地返回方法是被IBapi调用的写入。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 from vnpy.app.script_trader import init_cli_trading from vnpy.gateway.ib import IbGateway from time import sleep # 连接到服务器 setting = { "TWS地址": "127.0.0.1", "TWS端口": 7497, "客户号":5 #每个链接用一个独立的链接号,一个IBAPI支持32个来同时链接 } engine = init_cli_trading([IbGateway]) #返回Script_engine 示例,并且给main_engine注册了gateway engine.connect_gateway(setting, "IB") #链接 # 查询资金 - 自动 sleep(10) print(engine.get_all_accounts(use_df = True)) # 查询持仓 print(engine.get_all_positions(use_df = True)) # 订阅行情 from vnpy.trader.constant import Exchange from vnpy.trader.object import SubscribeRequest # 从我测试直接用Script_engine有问题,
云南idc服务商IB的品种太多,get_all_contracts命令不行,需要指定具体后才可以,这里使用main_engine订阅 req1 = SubscribeRequest("152791428",Exchange.SEHK) #创建行情订阅,腾讯 req2 = SubscribeRequest("332623976",Exchange.SEHK) #创建行情订阅,美团 req3 = SubscribeRequest("12087792",Exchange.IDEALPRO) #创建行情订阅,美团 engine.main_engine.subscribe(req1,"IB") engine.main_engine.subscribe(req2,"IB") engine.main_engine.subscribe(req3,"IB") # 返回行情 sleep(10) print(engine.get_all_contracts(use_df = True)) #返回所有已经订阅的contact print(engine.get_contract("152791428.SEHK",use_df = True)) #返回单个订阅的contact print(engine.get_ticks(["152791428.SEHK","332623976.SEHK"],use_df = True)) #返回订阅的tick # 委托下单,返回订单号 from vnpy.trader.constant import OrderType vt_orderid = engine.buy(vt_symbol = "12087792.IDEALPRO",price = 1.20, volume = 50000, order_type = OrderType.LIMIT) print(vt_orderid) # 按照订单号查询委托状态,这里也可以用get_orders, 查询订单号队列 sleep(10) print(engine.get_order(vt_orderid)) # print(engine.get_trades(vt_orderid, use_df= True)) # 再次查询持仓 print(engine.get_all_positions(use_df = True)) # 使用算法交易引擎 from vnpy.app.algo_trading import AlgoTradingApp engine.main_engine.add_app(AlgoTradingApp) #加入app AlgoInstance = engine.main_engine.get_engine("AlgoTrading") #为了方便,这里直接用返回的AlgoInstance # 创建算法交易的要执行交易内容, 这个可以复制 algo_trading_setting.json的内容,这里这里策略是,100秒内每隔10秒下单一次,每次购买10000 AlgotradingDict1 = { "template_name": "TwapAlgo", "vt_symbol": "12087792.IDEALPRO", "direction": "多", "price": 1.0985, "volume": 10000.0, "time": 100, "interval": 10, "offset": "" } AlgoInstance.start_algo(setting = AlgotradingDict1) # 再次查询持仓 print(engine.get_all_positions(use_df = True))
