文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Jupyter Notebook怎么实现从IB接口历史数据获取及写入数据库、策略回测和实盘交易

2023-06-02 03:09

关注

本篇文章给大家分享的是有关Jupyter Notebook怎么实现从IB接口历史数据获取及写入数据库、策略回测和实盘交易,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

刚好有个同学问怎么实现IB盈透历史数据获取,和策略回测和实盘交易。想着熟悉vnpy2.0操作,就用Jupyter Notebook都是跑了一边。VNPY2.0的整体架构设计很有扩展性,而且调用也比起v1.0先进清晰很多,引擎加载调用非常方便。

讲讲注意点:

  1. IB盈透接口历史数据大多是要收费订阅的,如果收费会有报错信息提示,这里找个免费的作为使用。另外vnpy是按照最大6个月历史数据设计的。

  2. 数据库定义有个小坑,我是用mongodb的,在第一次填写 trader/setting.py中密码写错了,后面在trader/setting.py改发现怎么也改不好;原来当第一次维护后,配置会写入.vntrader/vt_setting,之后系统只会去.vntrader/vt_setting读取。去改vt_setting,而不是trader/setting.py。

  3. 使用CtaStrategyApp支持加入新策略,系统会自动输出json保持策略信息;所以第二次运行代码时候,会提示已经有了,不是问题。

  4. 我在代码里面把回测和实盘放在一次,如果直接跑下来可能会报错,建议跑实盘时候先注释的回测。

  5. 使用script_engine订阅历史数据是是默认从rqdata获取,vnpy v2.07 IB接口已经提供历史数据获取,这里创建HistoryRequest用main_engine来获取,

为了方便贴出来,改成.py代码格式,直接跑也没有问题。

from vnpy.app.script_trader import init_cli_tradingfrom vnpy.app.script_trader.cli import process_log_eventfrom vnpy.gateway.ib import IbGatewayfrom time import sleepfrom datetime import datetimeimport pandas as pd# 连接到服务器setting = {    "TWS地址": "127.0.0.1",    "TWS端口": 7497,    "客户号":8 #每个链接用一个独立的链接号,一个IBAPI支持32个来同时链接}engine = init_cli_trading([IbGateway]) #返回Script_engine 示例,并且给main_engine注册了gatewayengine.connect_gateway(setting, "IB") #链接# 查询资金 - 自动sleep(10)print("***查询资金和持仓***")print(engine.get_all_accounts(use_df = True))# 查询持仓print(engine.get_all_positions(use_df = True))# 订阅行情from vnpy.trader.constant import Exchangefrom vnpy.trader.object import SubscribeRequest# 从我测试直接用Script_engine有问题,IB的品种太多,get_all_contracts命令不行,需要指定具体后才可以,这里使用main_engine订阅req1 = SubscribeRequest("12087792",Exchange.IDEALPRO) #创建行情订阅engine.main_engine.subscribe(req1,"IB")# 使用script_engine订阅历史数据是从rqdata获取,vnpy v2.07已经提供历史数据获取,这里创建HistoryRequest来获取,# 查询如果没有endtime,默认当前。返回历史数据输出到数据库和csv文件# 关于api更多信息可以参见 https://interactivebrokers.github.io/tws-api/historical_bars.htmlprint("***从IB读取历史数据, 返回历史数据输出到数据库和csv文件***")from vnpy.trader.object import HistoryRequestfrom vnpy.trader.object import Intervalstart = datetime.strptime('20190901', "%Y%m%d")historyreq = HistoryRequest(   symbol="12087792",   exchange=Exchange.IDEALPRO,   start=start,   interval=Interval.MINUTE)# # 读取历史数据,并把历史数据BarData放入数据库bardatalist = engine.main_engine.query_history(historyreq,"IB")from vnpy.trader.database import database_managerdatabase_manager.save_bar_data(bardatalist)# 把历史数据BarData输出到csvpd.DataFrame(bardatalist).to_csv("C:\Project\\"+ str(historyreq.symbol) + ".csv" , index=True, header=True)print("History data export to CSV")# # 参考backtesting.ipynb, 使用自带的双均线策略回测,10日上穿60日做多,否则反之print("***从数据库读取历史数据, 进行回测***")from vnpy.app.cta_strategy.backtesting import BacktestingEnginefrom vnpy.app.cta_strategy.strategies.double_ma_strategy import (   DoubleMaStrategy,)btengine = BacktestingEngine() #新建回测引擎btengine.set_parameters(    vt_symbol="12087792.IDEALPRO",    interval="1m",    start=datetime(2019, 9, 1),    end=datetime(2019, 10, 5),    rate = 0,    slippage=0.00005,    size=1000,    pricetick=0.00005,    capital=1_000_000,)btengine.add_strategy(DoubleMaStrategy, {"fast_window":10, "slow_window": 60})btengine.load_data()btengine.run_backtesting()df = btengine.calculate_result()btengine.calculate_statistics()btengine.show_chart()# 给script_engine载入双均线策略,实盘运行print("***从数据库读取准备数据, 实盘运行***")# 使用cta交易引擎from vnpy.app.cta_strategy import CtaStrategyAppfrom vnpy.app.cta_strategy.base import EVENT_CTA_LOGengine.event_engine.register(EVENT_CTA_LOG, process_log_event)cta_engine = engine.main_engine.add_app(CtaStrategyApp) #加入appcta_engine.init_engine()cta_engine.add_strategy("DoubleMaStrategy","DoubleMaStrategy_IB_12087792_v1", "12087792.IDEALPRO",{"fast_window":10, "slow_window": 50})sleep(10)cta_engine.init_strategy("DoubleMaStrategy_IB_12087792_v1")sleep(10)cta_engine.start_strategy("DoubleMaStrategy_IB_12087792_v1")

以上就是Jupyter Notebook怎么实现从IB接口历史数据获取及写入数据库、策略回测和实盘交易,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯