Giter VIP home page Giter VIP logo

vnpy's Introduction

VeighNa - By Traders, For Traders.

💬 Want to read this in english ? Go here

VeighNa是一套基于Python的开源量化交易系统开发框架,在开源社区持续不断的贡献下一步步成长为多功能量化交易平台,自发布以来已经积累了众多来自金融机构或相关领域的用户,包括私募基金、证券公司、期货公司等。

🚀 🚀 🚀 面向专业交易员的【VeighNa Elite量化终端】已经正式发布,针对专业交易员群体在海量策略并发、智能移仓换月、算法拆单执行、多账户交易支持等方面的需求提供了完善支持。了解更详细的信息请扫描下方二维码关注后,点击菜单栏的【社区交流 -> Elite会员服务】即可

在使用VeighNa进行二次开发(策略、模块等)的过程中有任何疑问,请查看VeighNa项目文档,如果无法解决请前往官方社区论坛的【提问求助】板块寻求帮助,也欢迎在【经验分享】板块分享你的使用心得!

想要获取更多关于VeighNa的资讯信息? 请扫描下方二维码添加小助手加入【VeighNa社区交流微信群】:

功能特点

  1. 多功能量化交易平台(trader),整合了多种交易接口,并针对具体策略算法和功能开发提供了简洁易用的API,用于快速构建交易员所需的量化交易应用。

  2. 覆盖国内外所拥有的下述交易品种的交易接口(gateway):

    • 国内市场

      • CTP(ctp):国内期货、期权

      • CTP Mini(mini):国内期货、期权

      • CTP证券(sopt):ETF期权

      • 飞马(femas):国内期货

      • 恒生UFT(uft):国内期货、ETF期权

      • 易盛(esunny):国内期货、黄金TD

      • 顶点飞创(sec):ETF期权

      • 顶点HTS(hts):ETF期权

      • 中泰XTP(xtp):国内证券(A股)、ETF期权

      • 华鑫奇点(tora):国内证券(A股)、ETF期权

      • 国泰君安(hft):国内证券(A股、两融)

      • 东证OST(ost):国内证券(A股)

      • 东方财富EMT(emt):国内证券(A股)

      • 飞鼠(sgit):黄金TD、国内期货

      • 金仕达黄金(ksgold):黄金TD

      • 融航(rohon):期货资管

      • 杰宜斯(jees):期货资管

      • 中汇亿达(comstar):银行间市场

      • 掘金(gm):国内证券(仿真)

      • 恒生云UF(uf):国内证券(仿真)

      • TTS(tts):国内期货(仿真)

    • 海外市场

      • Interactive Brokers(ib):海外证券、期货、期权、贵金属等

      • 易盛9.0外盘(tap):海外期货

      • 直达期货(da):海外期货

    • 特殊应用

      • RQData行情(rqdata):跨市场(股票、指数、ETF、期货)实时行情

      • RPC服务(rpc):跨进程通讯接口,用于分布式架构

  3. 覆盖下述各类量化策略的交易应用(app):

    • cta_strategy:CTA策略引擎模块,在保持易用性的同时,允许用户针对CTA类策略运行过程中委托的报撤行为进行细粒度控制(降低交易滑点、实现高频策略)

    • cta_backtester:CTA策略回测模块,无需使用Jupyter Notebook,直接使用图形界面进行策略回测分析、参数优化等相关工作

    • spread_trading:价差交易模块,支持自定义价差,实时计算价差行情和持仓,支持价差算法交易以及自动价差策略两种模式

    • option_master:期权交易模块,针对国内期权市场设计,支持多种期权定价模型、隐含波动率曲面计算、希腊值风险跟踪等功能

    • portfolio_strategy:组合策略模块,面向同时交易多合约的量化策略(Alpha、期权套利等),提供历史数据回测和实盘自动交易功能

    • algo_trading:算法交易模块,提供多种常用的智能交易算法:TWAP、Sniper、Iceberg、BestLimit等

    • script_trader:脚本策略模块,面向多标的类量化策略和计算任务设计,同时也可以在命令行中实现REPL指令形式的交易,不支持回测功能

    • paper_account:本地仿真模块,纯本地化实现的仿真模拟交易功能,基于交易接口获取的实时行情进行委托撮合,提供委托成交推送以及持仓记录

    • chart_wizard:K线图表模块,基于RQData数据服务(期货)或者交易接口获取历史数据,并结合Tick推送显示实时行情变化

    • portfolio_manager:交易组合管理模块,以独立的策略交易组合(子账户)为基础,提供委托成交记录管理、交易仓位自动跟踪以及每日盈亏实时统计功能

    • rpc_service:RPC服务模块,允许将某一进程启动为服务端,作为统一的行情和交易路由通道,允许多客户端同时连接,实现多进程分布式系统

    • data_manager:历史数据管理模块,通过树形目录查看数据库中已有的数据概况,选择任意时间段数据查看字段细节,支持CSV文件的数据导入和导出

    • data_recorder:行情记录模块,基于图形界面进行配置,根据需求实时录制Tick或者K线行情到数据库中,用于策略回测或者实盘初始化

    • excel_rtd:Excel RTD(Real Time Data)实时数据服务,基于pyxll模块实现在Excel中获取各类数据(行情、合约、持仓等)的实时推送更新

    • risk_manager:风险管理模块,提供包括交易流控、下单数量、活动委托、撤单总数等规则的统计和限制,有效实现前端风控功能

    • web_trader:Web服务模块,针对B-S架构需求设计,实现了提供主动函数调用(REST)和被动数据推送(Websocket)的Web服务器

  4. Python交易API接口封装(api),提供上述交易接口的底层对接实现。

    • REST Client(rest):基于协程异步IO的高性能REST API客户端,采用事件消息循环的编程模型,支持高并发实时交易请求发送

    • Websocket Client(websocket):基于协程异步IO的高性能Websocket API客户端,支持和REST Client共用事件循环并发运行

  5. 简洁易用的事件驱动引擎(event),作为事件驱动型交易程序的核心。

  6. 对接各类数据库的适配器接口(database):

    • SQL类

      • SQLite(sqlite):轻量级单文件数据库,无需安装和配置数据服务程序,VeighNa的默认选项,适合入门新手用户

      • MySQL(mysql):主流的开源关系型数据库,文档资料极为丰富,且可替换其他NewSQL兼容实现(如TiDB)

      • PostgreSQL(postgresql):特性更为丰富的开源关系型数据库,支持通过扩展插件来新增功能,只推荐熟手使用

    • NoSQL类

      • DolphinDB(dolphindb):一款高性能分布式时序数据库,适用于对速度要求极高的低延时或实时性任务

      • Arctic(arctic):高性能金融时序数据库,采用了分块化储存、LZ4压缩等性能优化方案,以实现时序数据的高效读写

      • TDengine(taos):分布式、高性能、支持SQL的时序数据库,带有内建的缓存、流式计算、数据订阅等系统功能,能大幅减少研发和运维的复杂度

      • TimescaleDB(timescaledb):基于PostgreSQL开发的一款时序数据库,以插件化扩展的形式安装,支持自动按空间和时间对数据进行分区

      • MongoDB(mongodb):基于分布式文件储存(bson格式)的文档式数据库,内置的热数据内存缓存提供更快读写速度

      • InfluxDB(influxdb):针对TimeSeries Data专门设计的时序数据库,列式数据储存提供极高的读写效率和外围分析应用

      • LevelDB(leveldb):由Google推出的高性能Key/Value数据库,基于LSM算法实现进程内存储引擎,支持数十亿级别的海量数据

  7. 对接下述各类数据服务的适配器接口(datafeed):

    • 迅投研(xt):股票、期货、期权、基金、债券

    • 米筐RQData(rqdata):股票、期货、期权、基金、债券、黄金TD

    • 恒生UData(udata):股票、期货、期权

    • TuShare(tushare):股票、期货、期权、基金

    • 万得Wind(wind):股票、期货、基金、债券

    • 天软Tinysoft(tinysoft):股票、期货、基金、债券

    • 同花顺iFinD(ifind):股票、期货、基金、债券

    • 天勤TQSDK(tqsdk):期货

  8. 跨进程通讯标准组件(rpc),用于实现分布式部署的复杂交易系统。

  9. Python高性能K线图表(chart),支持大数据量图表显示以及实时数据更新功能。

  10. 社区论坛知乎专栏,内容包括VeighNa项目的开发教程和Python在量化交易领域的应用研究等内容。

  11. 官方交流群262656087(QQ),管理严格(定期清除长期潜水的成员),入群费将捐赠给VeighNa社区基金。

注:以上关于功能特点的说明为根据说明文档发布时情况罗列,后续可能存在更新或调整。若功能描述同实际存在出入,欢迎通过Issue联系进行调整。

环境准备

  • 推荐使用VeighNa团队为量化交易专门打造的Python发行版VeighNa Studio-3.9.1,集成内置了VeighNa框架以及VeighNa Station量化管理平台,无需手动安装
  • 支持的系统版本:Windows 10以上 / Windows Server 2016以上 / Ubuntu 20.04 LTS以上
  • 支持的Python版本:Python 3.7/ 3.8 / 3.9 / 3.10 64位(推荐使用Python 3.10

安装步骤

这里下载Release发布版本,解压后运行以下命令安装:

Windows

install.bat

Ubuntu

bash install.sh

Macos

bash install_osx.sh

注意:setup.cfg中列举了VeighNa框架安装所需的依赖库,requirements.txt中给出了这些依赖库的推荐安装版本。

使用指南

  1. SimNow注册CTP仿真账号,并在该页面获取经纪商代码以及交易行情服务器地址。

  2. VeighNa社区论坛注册获得VeighNa Station账号密码(论坛账号密码即是)

  3. 启动VeighNa Station(安装VeighNa Studio后会在桌面自动创建快捷方式),输入上一步的账号密码登录

  4. 点击底部的VeighNa Trader按钮,开始你的交易!!!

注意:

  • 在VeighNa Trader的运行过程中请勿关闭VeighNa Station(会自动退出)

脚本运行

除了基于VeighNa Station的图形化启动方式外,也可以在任意目录下创建run.py,写入以下示例代码:

from vnpy.event import EventEngine
from vnpy.trader.engine import MainEngine
from vnpy.trader.ui import MainWindow, create_qapp

from vnpy_ctp import CtpGateway
from vnpy_ctastrategy import CtaStrategyApp
from vnpy_ctabacktester import CtaBacktesterApp


def main():
    """Start VeighNa Trader"""
    qapp = create_qapp()

    event_engine = EventEngine()
    main_engine = MainEngine(event_engine)
    
    main_engine.add_gateway(CtpGateway)
    main_engine.add_app(CtaStrategyApp)
    main_engine.add_app(CtaBacktesterApp)

    main_window = MainWindow(main_engine, event_engine)
    main_window.showMaximized()

    qapp.exec()


if __name__ == "__main__":
    main()

在该目录下打开CMD(按住Shift->点击鼠标右键->在此处打开命令窗口/PowerShell)后运行下列命令启动VeighNa Trader:

python run.py

贡献代码

VeighNa使用Github托管其源代码,如果希望贡献代码请使用github的PR(Pull Request)的流程:

  1. 创建 Issue - 对于较大的改动(如新功能,大型重构等)建议先开issue讨论一下,较小的improvement(如文档改进,bugfix等)直接发PR即可

  2. Fork VeighNa - 点击右上角Fork按钮

  3. Clone你自己的fork: git clone https://github.com/$userid/vnpy.git

    • 如果你的fork已经过时,需要手动sync:同步方法
  4. dev创建你自己的feature branch: git checkout -b $my_feature_branch dev

  5. 在$my_feature_branch上修改并将修改push到你的fork上

  6. 创建从你的fork的$my_feature_branch分支到主项目的dev分支的[Pull Request] - 在此点击compare across forks,选择需要的fork和branch创建PR

  7. 等待review, 需要继续改进,或者被Merge!

在提交代码的时候,请遵守以下规则,以提高代码质量:

  • 使用flake8检查你的代码,确保没有error和warning。在项目根目录下运行flake8即可。

其他内容

版权说明

MIT

vnpy's People

Contributors

1122455801 avatar archerdudu avatar bigtan avatar border avatar chenxy123 avatar crystalphi avatar edanflame avatar gwill avatar joans321 avatar lamter avatar lhzw avatar limingfang avatar lyic avatar nanoric avatar noranhe avatar playfund avatar qqqlyx avatar rian-dev avatar shinny-yangyang avatar ssantoshp avatar tangyouze avatar triptips-top avatar vigarbuaa avatar vnpy avatar vnpy-dev-01 avatar winni18 avatar wisfern avatar xldistance avatar youyuanrsq avatar zhu4ling3 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vnpy's Issues

关于组合回测,

昨天弄回测,突然想到,可以写个组合回测啊。
列出各种参数组合传给策略,不是挺好的吗?
可惜水平差,写不出来。
这个功能挺实用的。

如这样
# dict的个数无限,名称未知
d = OrderedDict()
d['a'] = [1,2,3]
d['b'] = [0.1,0.2,0,3,0.4]
d['c'] = [10,20]
d['xxxxx'] = [1,2,3,4,5,6] 等等,参数以及值。

最后得到各种排列。

# 如 d['a'] = 1     d['b'] = 0.1    d['c'] = 10
#     d['a'] = 1     d['b'] = 0.1    d['c'] = 20
#     d['a'] = 1     d['b'] = 0.2    d['c'] = 10
#     d['a'] = 1     d['b'] = 0.2    d['c'] = 20
#     d['a'] = 1     d['b'] = 0.3    d['c'] = 10    等

等等。

有时启动vnMain.py后行情数据记录没写进mongodb

有时启动vnMain.py后行情数据记录没写进mongodb。已经设置了DR_setting.json中的working为true, 启动vnMain.py有5次,中间1次没记录任何行情数据到mongodb,其它4次启动都能正常记录tick和bar数据到mongodb。运行期间行情数据记录窗口是一直有数据在滚动的,表示接收是正常的,写库逻辑可能有问题。

导入 tick时,数量多时比较快

ctaHistoryData里面,reader是读一条,存一条。这样比较慢。
通过1亿多条件记录的测试表明,如果一次性读1万条,再来存入,比较快。

运行mdtest.py 提示非法用户

按照教程3成功编译了md接口的pyd,也已在mdtest.py内输入账号、密码、BrokerID,但是运行mdtest.py 提示“非法用户”。

修改mdtest.py「真实输入为数字,此处用X指代」:

loginReq['UserID'] = 'XXXXXXX'                 # 参数作为字典键值的方式传入
loginReq['Password'] = 'XXXXXX'               # 键名和C++中的结构体成员名对应
loginReq['BrokerID'] = 'XXXX'    

在cmd内运行得到如下结果:

T:\Downloads\finance_win\vnpy\vn.lts\vnltsmd\test>python mdtest.py
Connect to 211.144.195.163:34513
Stock API(ON Session Connected[-59244543]
Session -59244543 Connected

onFrontConnected
CSecurityFtdcUserApiImplBase::RequestDirectly SessionID=-59244543
MaxOrderRef:
UserID:
TradingDay:
SessionID:0
SystemName:
BrokerID:
FrontID:0
LoginTime:
ErrorMsg:非法用户
ErrorID:-3
Send Heartbeat 1429077127
Send Heartbeat 1429077142
Heartbeat Receive Warning, CurrentTime=1429077153 LastTime=1429077132

onHeartBeatWarning
21
Send Heartbeat 1429077157
Send Heartbeat 1429077172
Send Heartbeat 1429077187
Heartbeat Receive Warning, CurrentTime=1429077196 LastTime=1429077175

vntrader的表头排序问题

pyqt4中使用setSortingEnabled(True)开启表头排序功能,是按照字符串的编码进行排序,如3 > 123, 导致在vntrader的Monitor中对 价格、成交量等数字类型的字段进行排序时排序结果都是错误的,有没有什么办法对数字格式进行排序么?
插入Monitor中的单元格都是转化成SafeUnicode的,试过不转化直接插入,结果也错误。

回测时间问题

不好意思,关闭吧,刚刚看到,已经有这个功能了。

tick回测bug

陈总:

ctaBacktesting.py 中 newTick函数,第176行,
缺少 语句 self.dt = bar.datetime, 导致字典缺少key,回测时覆盖上一笔交易,最后结果只有1笔交易。

vtMain中oandaGateway的问题

  1. vtMain中没有验证OANDA_connect.json中的token是否正确,不管正确与否,都可以初始化成功
    image
  2. 在填写正确的token的情况下,连接之后不知道应该做什么,界面也没有反应,报错这里的错误信息也不太明白
    image

关于securitytraderapi.so

完整路径:vnpy/vn.lts/ltsapi/securitytraderapi.so

请问是针对哪种platform编译的呢,mac还是linux?

持仓风险

有时候策略持仓,如果策略出现问题或出现系统性风险时不能及时平仓,是否考虑下在界面加上一键平仓,持仓列表加上右键平仓选项控制单个品种的及时平仓

IB增加 localsymbol 的问题

因为IB期货和国内有些不同, 在IB里面期货合约名字不变, 根据不同的过期时间来判断不同的合约.
比如: CL, 合约名称一直是CL, 根据过期时间 201606, 它的 localsymbol 为 CLM6.

还有IB的localsymbol貌似只能通过合约详情查询到.

        fut = Contract()
        fut.m_symbol = 'CL'
        fut.m_currency = 'USD'
        fut.m_secType = 'FUT'
        fut.m_exchange = 'NYMEX'
        fut.m_expiry = '201606'

编译问题

按照教程3的方法编译了一下,vs2013在编译的时候提示
错误 4 error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突
请教这个问题该如何解决

oanda Api 配置文件

vnoanda.py中的以下几行,有点小错误
API_SETTING['practice'] = {'rest': 'https://api-fxpractice.oanda.com',
'stream': 'https://stream-fxpractice.oanda.com'}
API_SETTING['trade'] = {'rest': 'https://api-fxpractice.oanda.com',
'stream': 'https://stream-fxtrade.oanda.com/'}

应为
API_SETTING['practice'] = {'rest': 'https://api-fxpractice.oanda.com',
'stream': 'https://stream-fxpractice.oanda.com/'}
API_SETTING['trade'] = {'rest': 'https://api-fxtrade.oanda.com',
'stream': 'https://stream-fxtrade.oanda.com/'}

策略历史持仓问题

现在的策略 self.pos 只是它当时开仓的情况。而没办法获取历史持仓。
如果之前开的仓位,今天运行策略,它认为是0。
建议每次都会交易所获取,最少init时要从交易所获取持仓情况。

希望推出快速入门教程

我是刚接触的,现在下载了,还不会使用。
教程可以有个示例就行。如pyalgotrade那样,新手可以照着教程做下去就可以让程序跑起来。

希望vnpy发扬光大。

回测引擎,不支持需要读取MongoDB的策略

有部分策略需要需要调用loadBar、loadTick等函数,这些函数需要self.vtSymbol,
但是BacktestingEngine引擎中初始化策略时并没有获取vtSymbol,
看到ctaEngine是通过loadSetting函数实现的,
是不是BacktestingEngine中也需要loadSetting函数?
我个人是用简单的 engine.strategy.vtSymbol = 'pp_hot' 实现。

debian 8 LANG为zh_CN.UTF-8,safeUnicode报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 2: ordinal not in range(128)

当我使用zh_CN.UTF-8作为默认语言时。那个safeUnicode方法会报错:
n: 0, header: logTime
Traceback (most recent call last):
File "/home/szc/github/vnpy/vn.trader/uiBasicWidget.py", line 243, in updateEvent
self.updateData(data)
File "/home/szc/github/vnpy/vn.trader/uiBasicWidget.py", line 288, in updateData
content = safeUnicode(data.getattribute(header))
File "/home/szc/github/vnpy/vn.trader/vtFunction.py", line 26, in safeUnicode
return unicode(value)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 2: ordinal not in range(128)

我就把它注释掉了,然后qt界面日志处时间就是乱码了。使用英语作为默认语言,就可以正确显示数字日期,形如:23:12:20。请指点一二,谢谢!

TdApi onRspUserLogin后不停的报错 TypeError: 'NoneType' object is not callable

触发条件,tdapi第一次登录一个账号时。删除所有*.con文件登录可以触发,代码

class TestTdApi(TdApi):
    def onFrontConnected(self):
        """服务器连接"""
        logger.info("td connected")

        loginReq = {}                           # 创建一个空字典
        loginReq['UserID'] = FLAGS.username                 # 参数作为字典键值的方式传入
        loginReq['Password'] = FLAGS.passwd               # 键名和C++中的结构体成员名对应
        loginReq['BrokerID'] = FLAGS.brokerid
        self.reqUserLogin(loginReq, 1)

    def onRspUserLogin(self, data, error, n, last):
        logger.error("td user login")

def main():
    apitd = TestTdApi()
    apitd.createFtdcTraderApi('')
    apitd.subscribePrivateTopic(1)
    apitd.subscribePublicTopic(1)
    apitd.registerFront("tcp://180.166.103.38:41205")
    apitd.init()

错误输出:

INFO:test_cli:td connected
eth1: Resource temporarily unavailable
INFO:test_cli:td user logined {'CZCETime': '11:18:56', 'SHFETime': '11:18:56', 'MaxOrderRef': '1', 'BrokerID': '3040', 'INETime': '--:--:--',
'UserID': '...', 'TradingDay': '20160426', 'SessionID': -568300646, 'SystemName': 'TradingHosting', 'FFEXTime': '11:18:56', 'FrontID':
4, 'DCETime': '11:18:57', 'LoginTime': '11:18:56'}
TypeError: 'NoneType' object is not callable
TypeError: 'NoneType' object is not callable
TypeError: 'NoneType' object is not callable
TypeError: 'NoneType' object is not callable
TypeError: 'NoneType' object is not callable
TypeError: 'NoneType' object is not callable
TypeError: 'NoneType' object is not callable
TypeError: 'NoneType' object is not callable
TypeError: 'NoneType' object is not callable
TypeError: 'NoneType' object is not callable
TypeError: 'NoneType' object is not callable
....

vtMain.py运行不成功

按照指导设置好后,运行vtMain.py,之前已经运行成功,不过现在会出现如下提示:
Traceback (most recent call last):

File "", line 44, in
main()

File "", line 36, in main
mainWindow = MainWindow(mainEngine, mainEngine.eventEngine)

File "uiMainWindow.py", line 25, in init
self.loadWindowSettings()

File "uiMainWindow.py", line 306, in loadWindowSettings
self.restoreState(settings.value('state').toByteArray())

AttributeError: 'NoneType' object has no attribute 'toByteArray'
请问如何解决?

策略参数initDays是自然日,修改为交易日的实现方式

demo策略中策略初始化时,需要读取前initDays日的数据进行计算,
做策略回测时,使用initDays=5,回测到2月15日时报错,因为春节假期的原因,没有读到数据。
一年总有这两次长假期,考虑将initDays改为交易日,关于实现方式的问题请教下群主:

  1. initDays赋值一个足够多的天数,然后在策略的onInit中再用实际需要的交易日数目过滤获取到的initData
  2. ctaEngine中loadBar函数直接计算出实际的交易日,然后获取数据后返回initData
    不知道哪种方式更好一些,谢谢

问题以及建议

PyQT是一个图形界面库,感觉很重。
如果只是要用到定时器,是不是可以考虑
threading.Timer
或者
sched https://docs.python.org/2/library/sched.html

lts 能不能给一个hello word的example?
比如, 如何买入,卖出
现在不太明白如何用
1.

是不是支持linux?能不能写一个安装的setup.py方便安装
1.

是不是可以搞一个微信群或者qq群方便交流
或者 https://bearychat.com/ ,这个支持保存历史聊天记录

现有的基于QT的事件搞得太复杂
不太好理解
是否可以考虑改用
http://pythonhosted.org//blinker/
基于信号驱动
使用函数式编程,而不是类编程。
这样,一个信号可以挂载多个函数。
代码更加轻量级,而且更加灵活。

ctaEngine一个小建议

1,有行情就直接推送到策略中去。建议初始化完成之后再推送。
2,策略初始化后,假如没有行情,建议自动订阅。感觉没必要手工先在主界面订阅。

thread not start when join

Traceback (most recent call last):
File "D:\py\vnpy-master\vn.trader\uiMainWindow.py", line 260, in closeEvent
self.mainEngine.exit()
File "D:\py\vnpy-master\vn.trader\vtEngine.py", line 162, in exit
gateway.close()
File "D:\py\vnpy-master\vn.trader\oandaGateway\oandaGateway.py", line 128, in
close
self.api.exit()
File "D:\py\vnpy-master\vn.trader\oandaGateway\vnoanda.py", line 182, in exit
self.reqThread.join()
File "C:\Anaconda2\lib\threading.py", line 929, in join
raise RuntimeError("cannot join thread before it is started")
RuntimeError: cannot join thread before it is started

Resolution:
vn.trader\oandaGateway\vnoanda.py
Add code at line 180 to check if API is active.
#----------------------------------------------------------------------
def exit(self):
"""退出接口"""
* if self.active:*
self.active = False
self.reqThread.join()

教程3中封装的疑问

请问下,教程3中将c++接口封装为python的时候你给的pyltsmd下的文件时怎么生成的?还是说自己写的?谢谢

连接CTP更新委托条目时随机出现异常(历史委托条目多时易出现)

界面点击“连接CTP”后,界面开始更新历史委托条目并刷新窗口。
当历史委托条目较多(比如1000条)时,随着不断的更多的委托条目被刷新进来,有概率出现以下错误:

File "C:\Users\Jerry\Desktop\vnpy_trader\vn.trader\uiBasicWidget.py", line 263, in updateEvent self.updateData(data) File "C:\Users\Jerry\Desktop\vnpy_trader\vn.trader\uiBasicWidget.py", line 299, in updateData cell.setContent(content) File "C:\Users\Jerry\Desktop\vnpy_trader\vn.trader\uiBasicWidget.py", line 48, in setContent self.setText(text) RuntimeError: wrapped C/C++ object of type BasicCell has been deleted

此错误也可能连续出现多次。
似乎未影响后续功能的正常使用。

不成交即撤单后再追单是否可以这样写?是否有改进的可能?求指导

` def onOrder(self, order):
"""收到委托变化推送(必须由用户继承实现)"""
# 对于无需做细粒度委托控制的策略,可以忽略onOrder

    # CTA委托类型映射
    if order.direction == u'多' and order.offset == u'开仓':
        orderType = u'买开'
    elif order.direction == u'多' and order.offset == u'平仓':
        orderType = u'买平'
    elif order.direction == u'空' and order.offset == u'开仓':
        orderType = u'卖开'
    elif order.direction == u'空' and order.offset == u'平仓':
        orderType = u'卖平'

    if order.status == u'未成交':
        self.cancelOrder(order.vtOrderID)


    elif order.status == u'已撤销':
        self.sendOrder(orderType, self.bar.close, 1)`

实盘中怎么使用历史数据?实时数据跟历史数据怎么对接?

20160410 晚上我把PP1605的 tick,分,日,三个历史数据存入数据库

今天 20160411下午打开vnpy实盘。(如果下午开机不行,就改为上午。跟昨天历史数据接上)
我的策略运行周期是分BAR,但是需要计算60日均线,10小时线。
该怎么操作?

随着时间的推移,内存中的BARLIST离数据库中历史数据的时间越来越远。是不是说,要把接受到的数据同步存入数据库?保持数据库跟当前时间一致?(拖慢速度?)

关于实盘中使用历史数据的例子,万分感谢。

获取单个CHAR的时候问题

HedgeFlag 单个char的不要用str的模块去读取,会strcpy_s,但是会在回调的时候出错,所以
建议:
改了一下获取单个char的代码
void getSingleChar(dict d,string key, char _value)
{
if (d.has_key(key))
{
object o = d[key];
extract x(o);
if (x.check())
{
string s = x();
std::cerr<<"now extract string is "<<s<<std::endl;
const char *buffer = s.c_str();
*value = buffer[0];
std::cerr<<_value<<endl;
}
}
}

另外的一些单char的也可以更改一下

RuntimeError:can not open CFlow file in line 256 of file ../../source/userapi/ThostFtdcUserApiImplBase.cpp

RuntimeError:can not open CFlow file in line 256 of file ../../source/userapi/ThostFtdcUserApiImplBase.cpp

Linux下运行vn.trader/vtMain.py,点击“连接ctp”,发生如上段错误,感觉很奇怪,后来偶然发现是connect()方法中的路径分隔符造成的,修改成这样即可正常完成连接:
path = os.getcwd() + '/temp/' + self.gatewayName + '/'

库中目前是这样:
path = os.getcwd() + '\temp\' + self.gatewayName + '\'

json配置文件处的容易发现,惭愧的是没有再搜索下其他地方,汗。

经测试,使用'/'在wins下也可正常工作。将来会把代码中的 \ 替换成 / ,以达到更好的跨平台性。

字符编码问题

在windows server 2012 上回测的时候 ,出现如下问题:
windows server 2012
image

该如何解决,好像之前Debian 上有类似的问题~~

Tick行情数据记录 逻辑错误

1.在开启 行情数据记录后,非交易时段登陆CTP,订阅成功返回的数据为0的Tick,会被记录到数据库中。

看行情处理代码发现函数 drEngine.procecssTickEvent,没有对Tick进行过滤,现在不知道是在函数 drEngine.procecssTickEvent中对H L O C全0的数据进行过滤还是在其它位置修改会好一点。

2.每次 集合竞价 会多记录一条一分钟的数据(20:59~21:00)。我的本机时间好像慢一秒,请忽略.
20:58:59 记录Tick数据rb1701,时间:20:59:11.0, last:2050.0, bid:2050.0, ask:2054.0
20:58:59 记录分钟线数据rb1701,时间:19:37:29.0, O:2061.0, H:2061.0, L:2061.0, C:2061.0
20:59:59 记录Tick数据rb1701,时间:21:00:11.0, last:2055.0, bid:2055.0, ask:2057.0
20:59:59 记录分钟线数据rb1701,时间:20:59:11.0, O:2050.0, H:2050.0, L:2050.0, C:2050.0
21:00:00 记录Tick数据rb1701,时间:21:00:11.5, last:2057.0, bid:2055.0, ask:2058.0
21:00:00 记录Tick数据rb1701,时间:21:00:12.0, last:2054.0, bid:2054.0, ask:2056.0
21:00:00 记录Tick数据rb1701,时间:21:00:12.5, last:2057.0, bid:2055.0, ask:2060.0

Language and Broker

First off, congratulations for the robust code very nicely written.

I am wondering if you are considering to include an **English language version and support for other brokers, as i.e. Oanda. Either have a nice API which integrates seamlessly with Python.

As i did not have how to contact you by any other way, i have opened this issue.

Looking for your feedback

Thanks

回测载入数据的问题

现在是一次性全部载入的。
建议10天或20天分段载入。
碰到TICK回测,一次性载入就没办法了。
象现在这样,一年的tick,根本没办法回测。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.