更新Quick Start和2016年项目计划,并修复部分bug

This commit is contained in:
chenxy123 2016-02-21 17:10:42 +08:00
parent 8d74af2c62
commit 604f033b58
7 changed files with 57 additions and 74 deletions

101
README.md
View File

@ -1,83 +1,64 @@
# vn.py
基于python的开源交易平台开发框架
## vn.py框架交流群
QQ群号262656087
## Quick Start
1. 准备一台Windows 7 64位系统的电脑
2. 安装[Anaconda](http://www.continuum.io/downloads)下载Python 2.7 32位版本注意必须是32位
3. 安装[MongoDB](https://www.mongodb.org/downloads#production)下载Windows 64-bit 2008 R2+版本
4. 安装pymongo在cmd中运行
pip install pymongo
相关问题在这个里面问的答复最快。
## 2016年vn.py项目计划
## 2015/12/23项目状态
完成了飞马和金仕达黄金T+D浦发银行的接口封装。
首先要感谢所有vn.py用户是你们的热情让vn.py项目在2015年从最初单纯的交易API接口Python封装一步步成长为现在较为全面的交易程序开发框架。
其中vn.ksgold使用时必须把ksgoldapi下的SLEdll复制到python.exe所在的文件夹下
截止2016年2月15日vn.py项目在Github上收获了583个Star和362个Fork且已有6位贡献者提交了代码。项目的用户包括私募基金证券自营、资管期货公司高校的金融研究院系个人投资者等机构用户加起来至少20多家和作者交流过的
###总结一下项目当前取得的进展
1. 较为丰富的Python交易和数据API接口基本覆盖了国内所有常规交易品种股票、期货、期权具体包括
* CTPvn.ctp
* 飞马vn.femas
* LTSvn.lts
* 金仕达黄金vn.ksgold
* 金仕达期权vn.ksotp
* 通联数据vn.datayes
## 2015/12/9项目状态##
中间缺失了相当一段内容的更新,说明文档计划重新做一下了。
2. 简洁易用的事件驱动引擎vn.event作为事件驱动型交易程序的核心
本次更新的主要内容是vn.ksotp金仕达期权API的封装接口已经加入了vn.trader
3. 针对如何使用API和事件驱动引擎开发交易程序的示例vn.demo
本套接口同时支持:
1. 现货期权ETF、个股
2. 股指期权
3. 商品期权
4. 开箱即用的实盘交易平台vn.trader相比之下vn.demo仅建议学习用整合了多种交易接口并针对具体策略算法和功能开发提供了简洁易用的API功能应用举例
* 同时登录多个交易接口,在一套界面上监控多种市场的行情和多种资产账户的资金、持仓、委托、成交情况
* 支持跨市场套利CTP期货和LTS证券、境内外套利CTP期货和IB外盘、多市场数据整合实时预测走势CTP的股指期货数据、IB的外盘A50数据、Wind的行业指数数据等策略应用
* CTA策略引擎模块在保持易用性的同时允许用户针对CTA类策略运行过程中委托的报撤行为进行细粒度控制降低交易滑点、实现高频策略
使用前必须把ksotpapi下的KSInterB2C.lkc接口授权文件放到python.exe所在的文件夹下。
5. [官网](http://vnpy.org)和[知乎专栏](http://zhuanlan.zhihu.com/vn-py)内容目前主要是《Python量化交易平台开发教程系列》以及vn.py项目进展的更新
例如把Anaconda安装在了D:\Anaconda下的话就需要把KSInterB2C.lkc复制粘贴到D:\Anaconda文件夹否则运行时Python虚拟机会捕获未知C++错误的异常。
6. 官方交流QQ群262656087管理较严格定期清除长期潜水的成员
另外需要测试账户的请联系南华期货高贝贝申请15021816078说vn.py群介绍对方会提供。
### 展望一下项目2016年的计划
## 2015/4/24项目状态##
发布了基于vn.ctp的Demo在vn.demo/ctpdemo文件夹下可用于CTP柜台期货公司的手动交易。
代码方面:
1. 完善飞创、易盛等相对小众接口的添加,这块将由社区驱动,作者主要负责代码检查和管理
2. 整理vn.py项目中API的具体版本号保证封装接口的对应这点已经有多位用户提起过项目初期没有做详细记录所以很多API的版本号一时都较难对上
3. Linux上API的编译以及vn.trader支持
4. 基于VirtualBox的vn.py开发环境镜像解决部分用户反映项目初期不知该如何搭建开发环境的问题这个镜像会由官方长期维护下去
## 2015/4/20项目状态##
发布了用于展示如何使用vn.py框架开发的vn.demo使用了vn.event和vn.lts模块可以用于华宝证券LTS柜台的手动交易。
文章方面:
1. 作者自己作为交易员的成长经历这一年来收到好多人关于如何成为Quant、建议看什么书、怎么选学校等类似的问题与其零散的回答不如介绍下自己的一些经历给大家参考可能更有帮助
2. vn.trader的使用教程目前基本除了代码里的注释什么都没有...
3. 将ta-lib技术分析和quantlib金融工程和量化整合到vn.trader中应用的教程解决目前策略开发过程中技术指标和量化函数缺乏的问题
4. 一套关于开发基于股指交易ETF期权的CTA策略的教程股指期货短时间内还看不到恢复的希望咱得另谋出路
demo的简单说明
社区方面:
1. 重新建设官方网站目前使用的是托管在Github Pages上的Hexo静态博客一来功能比较有限二来有些用户反映Github时不时会被墙考虑基于Flask重建一个托管在国内的官网
2. 有用户提出建设互动性更强的网站作为交流平台如论坛或者知乎Q&A类似的模式这点在考虑中主要制约因素是作者参与的时间可能考虑和更多的资深用户合作是个好主意
- demoApi.py主要包含了程序的底层接口对vn.lts中的API进行了简化封装
- demoEngine.py主要包含了程序的中间层负责调用底层接口
- demoUi.py主要包含了用于数据监控和主动函数调用相关的GUI组件
- demoMain.py包含了程序的主函数入口双击运行
- demoMain.pyw功能和demoMain.py一样双击时会自动调用pythonw.exe运行无cmd界面
###最后2016年Happy Trading!!!
接下来将会发布几篇和vn.demo相关的教程在vnpy.org网站上。
## 2015/3/26项目状态##
因为有不少人问CTP的接口正好我最近的项目也要用到就把开发CTP封装的工作提前了。
CTP的python封装发布在vn.ctp文件夹下
1. 封装使用的API是最新支持期货交易所期权的6.3.0版本
2. md部分已经完全经过了测试
3. td部分只进行了少量测试接下来几天会继续测试仅会覆盖和交易相关的函数银期转账等等测试大家有需要自己做吧
## 2015/3/3项目状态 ##
目前完成:
1. 华宝证券的LTS API的python封装发布在vn.lts文件夹下
2. 事件驱动引擎发布在vn.event文件夹下
### vn.lts ###
ltsapi华宝证券官方的LTS C++ API
pyscript用于自动生成重复度较高的封装代码的python脚本
vnltsmd行情API的封装源代码和测试脚本
vnltstd交易API的封装源代码和测试脚本
### vn.event ###
eventType定义事件类型常量
eventEngine包含事件驱动引擎实现
## 下一步计划 ##
1. API封装、编译、使用方面的教程
2. 事件驱动引擎原理、使用方面的教程
3. 基于API和引擎开发的LTS交易客户平台因为华宝没有提供官方的LTS交易软件目前的两个实现分别是基于C++的尔易终端和基于.COM封装的盈佳终端
4. 策略引擎接口
## 联系作者 ##
作者知乎名用python的trader想要联系作者可以通过知乎私信
作者知乎名用python的trader想要联系作者可以通过知乎私信
## License ##
MIT

View File

@ -14,7 +14,7 @@
#include <boost/python.hpp> //python封装
#include <boost/thread.hpp> //任务队列的线程功能
#include <boost/bind.hpp> //任务队列的线程功能
#include <boost/any.hpp> //任务队列的任务实现
#include <boost/any.hpp> //任务队列的任务实现
//API
#include "SecurityFtdcMdApi.h"

BIN
vn.trader/ContractData.vt Normal file

Binary file not shown.

View File

@ -326,8 +326,12 @@ class CtaEngine(object):
"""初始化策略"""
if name in self.strategyDict:
strategy = self.strategyDict[name]
strategy.inited = True
strategy.onInit()
if not strategy.inited:
strategy.inited = True
strategy.onInit()
else:
self.writeCtaLog(u'请勿重复初始化策略实例:%s' %name)
else:
self.writeCtaLog(u'策略实例不存在:%s' %name)

View File

@ -113,20 +113,20 @@ class CtaTemplate(object):
if self.trading:
# 如果stop为True则意味着发本地停止单
if stop:
orderID = self.ctaEngine.sendStopOrder(self.vtSymbol, orderType, price, volume, self)
vtOrderID = self.ctaEngine.sendStopOrder(self.vtSymbol, orderType, price, volume, self)
else:
orderID = self.ctaEngine.sendOrder(self.vtSymbol, orderType, price, volume, self)
return orderID
vtOrderID = self.ctaEngine.sendOrder(self.vtSymbol, orderType, price, volume, self)
return vtOrderID
else:
return None
#----------------------------------------------------------------------
def cancelOrder(self, orderID):
def cancelOrder(self, vtOrderID):
"""撤单"""
if STOPORDERPREFIX in orderID:
self.ctaEngine.cancelStopOrder(orderID)
if STOPORDERPREFIX in vtOrderID:
self.ctaEngine.cancelStopOrder(vtOrderID)
else:
self.ctaEngine.cancelOrder(orderID)
self.ctaEngine.cancelOrder(vtOrderID)
#----------------------------------------------------------------------
def insertTick(self, tick):

View File

@ -109,8 +109,6 @@ class KsgoldGateway(VtGateway):
#----------------------------------------------------------------------
def close(self):
"""关闭"""
if self.mdConnected:
self.mdApi.close()
if self.tdConnected:
self.tdApi.close()

View File

@ -910,10 +910,10 @@ class TradingWidget(QtGui.QFrame):
# 查询合约
if exchange:
vtSymbol = '.'.join([symbol, exchange])
contract = self.dataEngine.getContract(vtSymbol)
contract = self.mainEngine.getContract(vtSymbol)
else:
vtSymbol = symbol
contract = self.dataEngine.getContract(symbol)
contract = self.mainEngine.getContract(symbol)
if contract:
gatewayName = contract.gatewayName