PandoraTrader
A Trade Platform
起名由来:
据百度百科介绍,Pandora 是希腊神话中赫菲斯托斯用粘土做成的第一个女人。
众神赠予使她拥有更诱人的魅力的礼物:火神赫菲斯托斯给她做了华丽的金长袍;爱神维纳斯赋予她妩媚与诱惑男人的力量;众神使者赫耳墨斯教会了她言语的技能。神灵们每人给她一件礼物,但唯独智慧女神雅典娜拒绝给她智慧。
古希腊语中,潘是所有的意思,多拉则是礼物。“潘多拉”即为“拥有一切天赋的女人”,在此,则寓意为“拥有一切技能的交易平台”。
我们设计这样一个交易平台拥有设计者赋予各种技能,唯独不携带智慧;这个智慧是属于策略设计者的,期待策略设计者设计优秀的策略给予交易软件足够的智慧,能够在飘荡的市场上乘风破浪,挂云帆济沧海。
平台特色:
基于c++开发,支持多种交易API,跨平台的高频量化交易平台
高效
- c++
- 低延时, 直连柜台,无需其他服务器支持
灵活
- 行情交易接口,作为系统组件,可任意组合
- 行情或交易接口切换,策略无需调整
- 支持多种交易接口,如CTP,QDP,Femas等
易用
- 跨平台支持Linux和Windows
- 友好策略接口,只需关注策略逻辑
- 仓位挂单等信息本地维护,策略可同步获取,简化逻辑
- 支持自动开平模式
- Tick级别回测
安全稳定
- 2017年初稳定运行至今
- 内嵌风控,撤单次数和自成交不再成烦恼
组件架构:
PandoraTrader平台架构如下图所示,用户策略是程序的核心,各个组件相互配合,都是为用户策略服务。
用户策略(User Strategy)可以通过Pandora策略平台订阅行情,获取持仓,挂单,合约信息等;可以下单,撤单;策略平台会通过回调通知的方式,通知用户策略。
Pandora策略平台,通过实盘交易接口 Trade API 和MarketData API的组件可以连接到期货公司的柜台,通过这两个组件,实现行情订阅,下单和撤单等操作。
Pandora策略平台,通过回测交易接口,SimTrade API和SimMdAPI,可以连接到回测平台(PandoraSimulator)。
模块连接示意图
用户策略
┌────────────────────────────┐
│ │
│ User Strategy │
│ │
└────────────────────────────┘
| | |
Get Info Orders Call Back
获取信息 报撤单 回调通知
| | |
策略平台(内嵌风控) 回测模拟系统
┌────────────────────────────────┐ ┌───────────────────────┐
| | | |
| |-----Sim Trade API-----| |
| Pandora Basic Strategy | | PandoraSimulator |
| |-----Sim Md API--------| |
| | | |
└────────────────────────────────┘ └───────────────────────┘
| |
Trade API MD API
交易接口 行情接口
| |
期货公司 柜台(CTP, QDP etc.)
┌────────────────────────────────┐
| |
| broker |
| CTP QDP Femas etc. |
| |
└────────────────────────────────┘
| | | |
CFFEX SHFE DCE ZCE
中金所 上期所 大商所 郑商所
该平台对交易策略进行抽象,提供统一的中间层接口给策略,策略需要的信息都通过平台提供的中间层进行访问,不关注交易接口的细节,从而实现策略开发和交易接口开发的分离。同一个策略通过调整交易接口组件,改变交易柜台,甚至是进行回测模拟。可以有效验证策略逻辑的正确性。 上图中的Trade API可以替换成飞马,QDP等柜台的api,交易api替换,策略可以不用调整。MD API同样可以替换成别的api,甚至是组播,广播数据。 平台支持 Linux 版本,develop分支支持Ubuntu,如遇到不兼容,需要支持其他Linux版本或者别的API组件,可与作者联系(邮件地址:[email protected])!
程序展示
仓库路径
- Github: https://github.com/pegasusTrader/PandoraTrader
- Gitee:https://gitee.com/wuchangsheng/PandoraTrader
分支说明
- Master: 目前实盘程序交易的版本
- develop_6_5_1: 新功能添加和测试的版本,会持续更新,可能部分功能处于开发中间状态。
目录结构:
PANDORATRADER
│ PandoraTrader.sln
│ README.md
│
├─Interface
│ ├─lib-----------------------------------------------------平台支持库文件
│ │ ├─Debug
│ │ │
│ │ ├─Release
│ │ │
│ │ └─X64
│ │ ├─Debug
│ │ │
│ │ └─Release
│ │
│ ├─include-------------------------------------------------平台公共头文件
│ │
│ ├─CTPTradeApi64-------------------------------------------X64 CTP API 6.3.15
│ │
│ └─CTPTradeApi32-------------------------------------------Win32 CTP API 6.3.15
│
├─PandoraTrade-----------------------------------------------实盘交易程序
│ ReadMe.txt
│ PandoraTrader.vcxproj
│ stdafx.cpp
│ stdafx.h
│ targetver.h
│ PandoraTrader.vcxproj.user
│ PandoraTraderConfig.xml-------------------------------策略交易配置文件,负责配置行情(前置地址,用户,密码等),交易(前置地址,用户,密码,授权等),策略配置文件等
│ PandoraDemoStrategyTrader.cpp-------------------------策略交易平台主程序,负责实例化策略,行情和交易,并初始化他们
│
├─PandoraSimulator-------------------------------------------回测验证程序
│ PandoraSimulator.vcxproj
│ PandoraSimulator.vcxproj.user
│ PandoraSimulator.vcxproj.filters
│ PandoraSimulator.cpp----------------------------------回测平台主程序,负责实例化回测系统,包括策略,模拟交易模块和模拟撮合等
│ HisMarketDataIndex.xml--------------------------------回测历史数据文件表
│ PandoraSimulatorConfig.xml----------------------------回测使用配置文件
│
├─PandoraStrategy--------------------------------------------用户策略库
│ PandoraStrategy.vcxproj
│ PandoraStrategy.vcxproj.user
│ PandoraStrategy.vcxproj.filters
│ cwEmptyStrategy.cpp---------------------------------------空策略cpp
│ cwEmptyStrategy.h-----------------------------------------空策略(啥操作都不执行,用于检验连接登录等)的头文件
│ cwStrategyDemo.h------------------------------------------演示策略头文件
│ cwStrategyDemo.cpp----------------------------------------演示策略cpp
│
└─cwStrategys------------------------------------------------系统策略库,提供编写好的策略以及必要的支撑
│
├─include
│ cwMarketDataBinaryReceiver.h-----------------------二进制形式数据接收存储策略
│ cwMarketDataReceiver.h-----------------------------csv形式数据接收存储策略
│
└─lib-----------------------------------------------------回测模拟器和策略的库文件
├─X64
│ ├─Debug
│ │
│ └─Release
│
├─Debug
│
└─Release
快速入门:
这是为了您能够快速使用该平台的介绍说明。
如果您在Linux下使用,请您从develop分支上获取最新内容, 使用CMAKE,G++来编译工程
git clone -b develop_6_5_1 https://github.com/pegasusTrader/PandoraTrader.git
进入工程目录后:
编译debug:
mkdir builddebug
cd builddebug
cmake -DCMAKE_BUILD_TYPE=DEBUG ..
make
编译Release:
mkdir buildrelease
cd buildrelease
cmake -DCMAKE_BUILD_TYPE=RELEASE ..
make
如果您在Windows下使用,建议您用visual studio来做工程管理和编译,按配置好的工程快速开始Pandora量化之旅。
-
本平台要求 VS2015 及以上版本的 IDE,可通过以下链接进行下载并安装:
https://visualstudio.microsoft.com/zh-hans/vs/
-
通过 PandoraTrader.sln 打开项目组,其中包含了交易平台 PandoraTrader, 策略库工程PandoraStrategy 和回测平台 PandoraSimulator,详细如目录结构所示。 您可直接利用交易平台对策略进行实盘交易或者模拟环境交易,也可利用我们的回测平台进行测试。
-
交易平台中,PandoraTrader 工程中有PandoraDemoStrategyTrader.cpp 是 main 函数的入口,作为一个如何实例化该平台代码的 demo。
该实例化过程可以作为通用代码,只要替换其中包含的策略,就可以编译出一个新的交易程序。
策略库工程PandoraStrateg中自带一个demo策略,即cwStrategyDemo,直接编译就可以获得一个自动交易策略,可以边运行边了解其中功能。
这个demo提供了如何通过cwBasicStrategy访问平台中维护的持仓信息,挂单信息,根据行情下单,以及进行报单撤单等操作。有这些基础操作知识后,您就可以组合搭建属于您自己的策略。
只需在PandoraStrateg工程中添加一个新的策略,以 cwBasicStrategy 为基类派生一个您的策略类,实现 PriceUpdate,OnRtnTrade,OnRtnOrder,OnOrderCanceled 这几个函数即可在相应的回调中做相应的处理。
可以在回调函数中根据行情,持仓和挂单信息,进行报单,撤单等操作。如果有复杂耗时的数学计算,请起一个线程进行计算。秉持原则是让回调函数尽快返回处理后续的操作。PriceUpdate:行情更新,当有最新行情更新时,该函数会被调用,可以在该函数内完成行情处理; OnRtnTrade:成交回报,当有成交时,该函数会被调用,如果需要在成交后相应处理,可以在该函数内完成; OnRtnOrder:报单回报,每次报单有更新时,该函数会被调用,可以在该函数内做相应的处理; OnOrderCanceled:当撤单成功后随即进入该函数并作出反应。
完成策略开发后,记得将 PandoraDemoStrategyTrader 中的策略demo替换为您的新策略。 在开发新策略的时候,强烈建议新建一个策略类。因为平台维护升级,可能会为了丰富这个Demo策略内容进行更新修改,以免您获取最新更新时,遇到不必要的麻烦。
-
Interface 文件夹下提供一些工具,可以更方便进行开发,排查问题。例如:
cwStrategyLog.h:可自由实现log日志,观察报单、撤单及成交等情况; cwBasicCout.h:输出类,可将所需变量输出显示,基础用法与printf类似。
-
利用Simnow模拟盘测试您的策略时,您需要对 PandoraTraderConfig.xml 进行以下配置:
将模拟盘交易的账号信息(后置、BrokerID、UserID及密码)填写至 <MarketDataServer Front="tcp://180.168.146.187:10110" BrokerID="9999" UserID="" PassWord=""/> //行情配置信息 和 <TradeServer Front="tcp://180.168.146.187:10100" BrokerID="9999" UserID="" PassWord="" ProductInfo="Pandora" AppID="Pandora" AuthCode="Pandora"/> //交易配置信息 并在<Instrument ID="j1909"/>中输入所需测试的期货合约(可以配置多个)即可,也可以在策略中调用。
若您暂不知晓该信息,可联系模拟盘平台客服获取。 如果您要直接接入实盘交易,只要在配置文件中填入相应的实盘信息
-
利用回测平台测试您的策略时,您需要对PegasusSimulatorConfig.xml文件进行配置:
type="2" 用于配置回测时历史数据源和形式, 0表示单个csv文件,1表示二进制(bin)文件,2表示csv 序列文件,3表示二进制(bin)序列文件 HisMarketDataIndex.xml:用于读取历史交易数据。将交易数据文件的全路径放置于<MDFile DateIndexId="201905160" FilePath="\\Mac\Home\Desktop\PandoraTrader-master\MarketData_20190529_084005.csv" />,DateIndexId为9位数字,最后一位0表示白盘,1则表示夜盘。如需同时回测多天数据,按照此格式在后面继续补充即可; PegasusSimulatorConfig.xml:将HisMarketDataIndex.xml和Instrument.xml的全路径填写至<SimulatorServer Front="F:\HisData\HisMarketDataIndex.xml" Interval="0" Instrument="F:\HisData\Instrument.xml"/>,并在<Instrument ID="j1909"/>中输入所需测试的期货名称。
如果需要历史数据,可以用cwMarketDataReceiver或cwMarketDataBinaryReceiver提供的类,作为策略类编译一个行情存储程序。用计划任务的方式定时启动,来收取历史数据。 cwMarketDataReceiver存下csv文件,cwMarketDataBinaryReceiver存下的是bin的二进制文件。 这两个策略要正确配置行情和交易配置信息,因为需要从交易柜台获取当前有交易合约,从而实现自动订阅合约。 也可以自行编写行情存储程序来自动收行情,程序启动之后,从交易spi中获取合约信息,订阅行情,然后将行情存储下来。Simulator定义的行情csv文件列如下
Localtime,MD,InstrumentID,TradingDay,UpdateTime,UpdateMillisec,LastPrice,Volume,LastVolume,Turnover,LastTurnover,AskPrice5,AskPrice4,AskPrice3,AskPrice2,AskPrice1,BidPrice1,BidPrice2,BidPrice3,BidPrice4,BidPrice5,AskVolume5,AskVolume4,AskVolume3,AskVolume2,AskVolume1,BidVolume1,BidVolume2,BidVolume3,BidVolume4,BidVolume5,OpenInterest,UpperLimitPrice,LowerLimitPrice
策略开发
用户策略可以是一个空白策略,什么都不做处理;可以是一个工具性策略,比如自动止盈止损程序;可以是一个配对交易策略(Pairs Trading);甚至可以是一个做市商策略。可以套利套保,可以做波段,甚至是高频做市商。
致谢
- tinyxml2 -- https://github.com/leethomason/tinyxml2
建议反馈:
如果有什么疑问和建议,您可以发送有邮件给[email protected]于作者取得联系。 欢迎加入QQ群(615093081)参与讨论。
捐赠
如果您喜欢这个项目,您可以在您经济允许情况下对该项目进行捐赠,以帮助和激励作者们更好地维护这项目。
使用授权:
请在法律和监管允许下使用该平台。
软件开放到公共域,您可以免费使用,但不可用于出售。
作者勤勉,尽可能提供可靠软件,但因系统复杂,无法保证没有疏忽遗漏,由此造成的损失,与作者无关。
如果上期技术暂停对CTP支持或者使用许可,请务必暂停使用该平台。
License:
Please use the platform with legal and regulatory permission.
This software is released into the public domain. You are free to use it in any way you like, except that you may not sell this source code.
This software is provided "as is" with no expressed or implied warranty. I accept no liability for any damage or loss of business that this software may cause.
If SFIT suspends CTP support or license, be sure to suspend the platform.