4 Star 4 Fork 3

scicapital / Enterprise

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MulanPSL-2.0

Enterprise3

项目背景

目前市面上存在着较多程序化交易平台,但少有平台能符合以下需求

  1. 能用python, c++, c#, java, matlab等编程语言写策略。
    • 以便用自己熟悉的语言写策略
    • 以便调用第三方编写的库,如scikit-learnTensorFlow等统计模型以及深度学习库
  2. 能长期稳定运行
  3. 能离线运行
    • 不与外部服务器通讯,防止策略泄露
    • 以便部署在期货公司内网中,使交易尽可能的快
  4. 能定制算法交易
    • 以便减少大额交易对市场的冲击
    • 以便实现高级的套利算法
  5. 能落地TICK数据
    • 以便盘后生成历史数据
    • 通过自己录数据,降低整体业务成本
  6. 能自定义BAR
    • 以便避开拥挤交易
    • 用N个时间点把时间线切成N-1段,可切出任意时间长度的BAR,不局限于等周期BAR

我们自己CTA交易业务有以上需求,但又无法找到合适的商用平台。为了开展量化交易业务,我们自己开发了全套程序。

整体架构

量化交易系统分为 预测执行 两个部分。

执行部分由交易管理终端 Trading Terminal-代号Enterprise 组成。

预测部分由策略管理终端 Strategy Terminal-代号Discovery 和 策略框架 Strategy Framework-代号pyDiscovery 组成。

系统架构如下:

交易执行终端 - Trading Terminal - Enterprise

Trading Terminal 首要目标是为程序化交易员/数据科学家/量化投资研究员提供一个通用的、不限制策略语言的交易执行终端,策略可以用通用计算机语言(策略支持python, c++, c#, java, matlab ...)编写;第二目标是为一般投资者提供一个算法交易和套利交易的终端,以便降低交易难度。

Trading Terminal 当前版本代号为Enterprise(以下简称Enterprise),全部功能免费使用,对增值服务进行收费。增值服务包括:定制算法交易和定制软件功能。

安全、稳定优先,兼顾速度

基于安全的理念下,程序做了如下处理

  • 出现全局级别异常
    • 停止程序
    • 交易前置机断线事件会被视为异常,程序会停止工作,由于不能确保交易数据的完整性,不会尝试自动连接;行情前置机断线事件,程序会尝试自动连接
  • 出现算法级别异常
    • 停止算法
    • 如果算法发现自己无法处理的情况,算法会停止工作,并发出消息通知用户
    • 未知状态的订单会被视为异常,该订单的算法会停止工作
  • 出现订单级别的异常
    • 将订单标记为全部成交,避免反复下单和反复撤单
    • 下单失败的订单会被视为全部成交
    • 撤单失败的订单会被视为全部成交

基于稳定的理念下,程序做了如下处理

  • 核心程序和图形界面分离
    • 核心程序将核心数据存到数据库
    • 图形界面程序读取数据库数据进行分析、监控和操作
  • 执行与策略分离
    • 策略终端迭代快,执行终端迭代慢,尽量减少策略迭代对整个系统的影响
    • 一个执行终端可以对接多个策略终端,防止一个策略终端异常影响其他策略执行
  • 不同期货账户分离
    • 一个执行器对应一个期货账户
    • 多账户可以通过开多个执行器实现,防止一个执行器异常影响到其他执行器

核心功能

  • 交易指令支持程序和手工输入
    • 通过网络发送消息
    • 手工在终端输入交易指令
  • 算法交易
    • 通过算法将大单拆成小单,减少对市场的冲击
  • 套利交易
    • 针对不同流动性场景设计了多种执行方法
  • 自动开平仓
    • 优先平仓
    • 支持反向开仓代替平今
  • 风险控制
    • 品种黑名单管理
    • 指令风控
      • 合约名字校验
      • 黑名单校验
      • 手数校验
      • 金额校验
      • 价格校验
    • 事前风控
      • 撤单次数校验
  • 标准化合约
    • 统一为品种+4位数字交割年月形式,无需记忆郑商所3位数字交割年月
    • 无须区分大小写

概念

模块

  1. 风险管理系统 - risk management system
  2. 负责对指令进行风险控制校验
  3. 执行管理系统 - execution management system
    1. 负责管理算法交易
  4. 订单管理系统 - order management system
    1. 负责对持仓进行管理

订单

  1. 用户单 - User Order

用户下达的交易指令

  1. 逻辑单 - Logical Order

根据算法交易拆成N张逻辑单

  1. 实体单 - Physical Order

每张逻辑单根据交易所 开仓/平仓/平今仓 拆成N张最终实体单

释义

  1. 对手价

安装

编译环境

项目 推荐
操作系统 Windows Server 2016
开发工具 Microsoft Visual Studio 2017
数据库 mysql-5.7
消息中间件 zeromq-4.2.2
日志库 glog-0.4.0

运行环境

项目 推荐
操作系统 Windows Server 2016
运行时 Microsoft Visual C++ 2017 Redistributable (x64)
数据库 mysql 5.7

安装步骤

  1. 安装 Microsoft Visual C++ 2017 Redistributable (x64)
  2. 安装 Mysql 5.7
  3. 创建 数据库表结构
  4. 创建 数据库用户

建议

建议严格按照运行环境表格中的环境来配置系统,确保不出现兼容性问题

指令

撤单

语法及用例

DEL order_id

DEL 1

限价指令

语法及用例

BUY/SELL INSTRUMENT_ID LOTS AT PRICE
BUY/SELL INSTRUMENT_ID LOTS BY LIMIT AT PRICE

BUY IF1501 1 AT 3608.2
BUY IF1501 1 BY LIMIT AT 3608.2

参数说明

参数类型 参数名称 数值类型 说明
指令参数 AT double 限价指令中的价格

应用场景

适用于不是必须要执行的交易,只有价格满足条件了才执行

算法行为

  • 以用户指定的价格下单到市场,不做任何其他操作,直到单子成交或用户停止算法

注意事项

  • 当指令价格超出涨跌停范围时,会被风控系统拒绝
  • 当下单失败时,下单失败的单子会被视为全部成交处理,避免反复下单
  • 停止算法时会撤销所有在交易所队列中的订单,但撤销所有订单时的那一刻有订单已发送但未在交易所队列中,那这个订单会被忽略,请手动撤单

市价指令

语法及用例

BUY/SELL INSTRUMENT_ID LOTS
BUY/SELL INSTRUMENT_ID LOTS BY MARKET

BUY IF1501 1
BUY IF1501 1 BY MARKET

参数说明

参数类型 参数名称 数值类型 说明
配置参数 chunk_size int 当指令数量大于此数量时,大于的部分会被递延交易
配置参数 delay_time int 递延时间

应用场景

适用于交易标的流动性较好且对交易执行时间较为急迫的场景,希望立刻执行掉交易

算法行为

  • 买单用涨停价下单,卖单用跌停价下单
  • 当指令数量大于chunk_size时,大于chunk_size的部分会被递延交易
    • 先下chunk_size手
    • 等待delay_time秒时间
    • 再下chunk_size手,如此反复直至下单完成

注意事项

最优价指令

语法及用例

BUY/SELL INSTRUMENT_ID LOTS BY BEST

BUY IF1501 1 BY BEST

参数说明

参数类型 参数名称 数值类型 说明
配置参数 chunk_size int 当指令数量大于此数量时,大于的部分会被递延交易
配置参数 delay_time int 递延时间
配置参数 wait_time int 用最优价下单的时间
配置参数 cancel_time int 撤单的间隔

应用场景

适用于对交易执行不是非常急迫,希望通过挂单拿到更好价格的场景,当一定时间拿不到订单后,尝试去主动吃单

算法行为

  • 先尝试以最优价去拿单子,当超过一定时间拿不到单子后,尝试以对手价去拿
  • 在时间计数器(wait_time_count)没有超过wait_time以前,会以最优价挂单
  • 每隔cancel_time的时间判断一次当前挂单是否为最优价
    • 如果是,不做任何事情
    • 如果不是,撤单重新挂最优价
  • 当wait_time_count超过wait_time以后,会以对手价下单
  • 每隔cancel_time的时间判断一次当前挂单是否为对手价
    • 如果是,不做任何事情
    • 如果不是,撤单重新挂对手价
  • 当指令数量大于chunk_size时,大于chunk_size的部分会被递延交易
    • 先下chunk_size手
    • 等待delay_time秒时间
    • 再下chunk_size手,如此反复直至下单完成

注意事项

  • 每当收到指令时会重置当前wait_time_count为0

市价套利指令

语法及用例

BUY/SELL INSTRUMENT_ID1-INSTRUMENT_ID2 LOTS
BUY/SELL INSTRUMENT_ID1-INSTRUMENT_ID2:MULTIPLE1/MULTIPLE2 LOTS
BUY/SELL INSTRUMENT_ID1-INSTRUMENT_ID2 LOTS BY MARKET
BUY/SELL INSTRUMENT_ID1-INSTRUMENT_ID2:MULTIPLE1/MULTIPLE2 LOTS BY MARKET

BUY/SELL INSTRUMENT_ID1/INSTRUMENT_ID2 LOTS
BUY/SELL INSTRUMENT_ID1/INSTRUMENT_ID2:MULTIPLE1/MULTIPLE2 LOTS
BUY/SELL INSTRUMENT_ID1/INSTRUMENT_ID2 LOTS BY MARKET
BUY/SELL INSTRUMENT_ID1/INSTRUMENT_ID2:MULTIPLE1/MULTIPLE2 LOTS BY MARKET

BUY IF1501-IF1502 2 会买入2手IF1501,卖出2手IF1502

BUY J1905-JM1905:1-2 5 会买入5手J1905,卖出10手JM1905

参数说明

应用场景

当标的行情非常大时,希望不计代价立即执行套利交易

算法行为

  • 以涨跌停价同时对两个合约同时进行下单
  • 只有当一个指令完成后才会执行下一个指令
    • 如果当前指令没有完成时收到新指令,会将新指令存储到队列等待执行

注意事项

限价套利指令

语法及用例

BUY/SELL INSTRUMENT_ID1-INSTRUMENT_ID2:MULTIPLE1/MULTIPLE2 LOTS AT PRICE
BUY/SELL INSTRUMENT_ID1-INSTRUMENT_ID2:MULTIPLE1/MULTIPLE2 LOTS BY LIMIT AT PRICE

BUY/SELL INSTRUMENT_ID1/INSTRUMENT_ID2:MULTIPLE1/MULTIPLE2 LOTS AT PRICE
BUY/SELL INSTRUMENT_ID1/INSTRUMENT_ID2:MULTIPLE1/MULTIPLE2 LOTS BY LIMIT AT PRICE

BUY IF1501-IF1502 2 AT 15.0
当以IF1501-IF1502价差<=15.0时,以同步的方式用涨跌停价下单 IF1501和IF1502

BUY J1905-JM1905:1-2 2 AT 15.0
以同步的方式下单J1905和JM1905,合约比例为1比2

参数说明

参数类型 参数名称 数值类型 说明
指令参数 AT double 限价指令中的价格

应用场景

适用于标的流动性较好的场景

算法行为

注意事项

最优价套利指令 (规划中)

语法及用例

BUY/SELL INSTRUMENT_ID1-INSTRUMENT_ID2 LOTS BY BEST PRIOR INSTRUMENT_ID
BUY/SELL INSTRUMENT_ID1-INSTRUMENT_ID2:MULTIPLE1-MULTIPLE2 LOTS BY BEST PRIOR INSTRUMENT_ID

异步限价套利指令 (beta)

语法及用例

BUY/SELL INSTRUMENT_ID1-INSTRUMENT_ID2 LOTS BY ASYNC AT PRICE PRIOR INSTRUMENT_ID
BUY/SELL INSTRUMENT_ID1-INSTRUMENT_ID2:MULTIPLE1-MULTIPLE2 LOTS BY ASYNC AT PRICE PRIOR INSTRUMENT_ID

BUY IF1501-IF1502 2 BY ASYNC AT 15.0 PRIOR IF1502
以异步的方式套利,当IF1502盘口的对手价满足价差时,以对手价去下单,不成交就撤单,根据成交情况动态以IF1501进行对冲

参数说明

参数类型 参数名称 数值类型 说明
指令参数 AT double 限价指令中的价格
指令参数 PRIOR string 优先成交的合约

应用场景

适用于标的流动性较差的场景

当流动性较差时,当以市价或涨停价下单时,成交价格存在着很大的不确定性。异步限价套利指令提供了一个尝试以对手价下单的算法。如果对手价拿到了,则用另一个合约去对冲。如果没拿到,且价差不符合要求时,会撤单。

算法行为

注意事项

  • 动态对冲过程中遵循四舍五入的原则,例如处理M1909-A1909:3-2 时,当A1909成交了1手时,M1909应该对冲1.5手,对冲时会按2手去下单。

做市套利指令 (beta)

语法及用例

BUY/SELL INSTRUMENT_ID1-INSTRUMENT_ID2 LOTS BY MM AT PRICE PRIOR INSTRUMENT_ID
BUY/SELL INSTRUMENT_ID1-INSTRUMENT_ID2:MULTIPLE1/MULTIPLE2 LOTS BY MM AT PRICE PRIOR INSTRUMENT_ID

BUY/SELL INSTRUMENT_ID1/INSTRUMENT_ID2 LOTS BY MM AT PRICE PRIOR INSTRUMENT_ID
BUY/SELL INSTRUMENT_ID1/INSTRUMENT_ID2:MULTIPLE1/MULTIPLE2 LOTS BY MM AT PRICE PRIOR INSTRUMENT_ID

MM : Make Market

BUY IF1501-IF1502 2 BY MM AT 15.0 PRIOR IF1502
以做市的方式进行套利,假设IF1502流动性较差(甚至没有报价),根据价差测算挂单位置,先挂单IF1502,根据挂单成交情况动态以IF1501进行对冲

参数说明

参数类型 参数名称 数值类型 说明
指令参数 AT double 限价指令中的价格
指令参数 PRIOR string 优先成交的合约

应用场景

适用于标的流动性极差的场景

流动性较差的品种挂单较少甚至没有报价,套利者根据流动性较好的合约加上价差计算出他能接受的价格,套利者按照这个价格挂单到市场,然后拿到多少手就用另一个流动性较好的合约去对冲

算法行为

注意事项

  • 动态对冲过程中遵循四舍五入的原则,例如处理M1909-A1909:3-2 时,当A1909成交了1手时,M1909应该对冲1.5手,对冲时会按2手去下单。
木兰宽松许可证, 第2版 木兰宽松许可证, 第2版 2020年1月 http://license.coscl.org.cn/MulanPSL2 您对“软件”的复制、使用、修改及分发受木兰宽松许可证,第2版(“本许可证”)的如下条款的约束: 0. 定义 “软件”是指由“贡献”构成的许可在“本许可证”下的程序和相关文档的集合。 “贡献”是指由任一“贡献者”许可在“本许可证”下的受版权法保护的作品。 “贡献者”是指将受版权法保护的作品许可在“本许可证”下的自然人或“法人实体”。 “法人实体”是指提交贡献的机构及其“关联实体”。 “关联实体”是指,对“本许可证”下的行为方而言,控制、受控制或与其共同受控制的机构,此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权、资金或其他有价证券。 1. 授予版权许可 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其“贡献”,不论修改与否。 2. 授予专利许可 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的(根据本条规定撤销除外)专利许可,供您制造、委托制造、使用、许诺销售、销售、进口其“贡献”或以其他方式转移其“贡献”。前述专利许可仅限于“贡献者”现在或将来拥有或控制的其“贡献”本身或其“贡献”与许可“贡献”时的“软件”结合而将必然会侵犯的专利权利要求,不包括对“贡献”的修改或包含“贡献”的其他结合。如果您或您的“关联实体”直接或间接地,就“软件”或其中的“贡献”对任何人发起专利侵权诉讼(包括反诉或交叉诉讼)或其他专利维权行动,指控其侵犯专利权,则“本许可证”授予您对“软件”的专利许可自您提起诉讼或发起维权行动之日终止。 3. 无商标许可 “本许可证”不提供对“贡献者”的商品名称、商标、服务标志或产品名称的商标许可,但您为满足第4条规定的声明义务而必须使用除外。 4. 分发限制 您可以在任何媒介中将“软件”以源程序形式或可执行形式重新分发,不论修改与否,但您必须向接收者提供“本许可证”的副本,并保留“软件”中的版权、商标、专利及免责声明。 5. 免责声明与责任限制 “软件”及其中的“贡献”在提供时不带任何明示或默示的担保。在任何情况下,“贡献者”或版权所有者不对任何人因使用“软件”或其中的“贡献”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。 6. 语言 “本许可证”以中英文双语表述,中英文版本具有同等法律效力。如果中英文版本存在任何冲突不一致,以中文版为准。 条款结束 如何将木兰宽松许可证,第2版,应用到您的软件 如果您希望将木兰宽松许可证,第2版,应用到您的新软件,为了方便接收者查阅,建议您完成如下三步: 1, 请您补充如下声明中的空白,包括软件名、软件的首次发表年份以及您作为版权人的名字; 2, 请您在软件包的一级目录下创建以“LICENSE”为名的文件,将整个许可证文本放入该文件中; 3, 请将如下声明文本放入每个源文件的头部注释中。 Copyright (c) [Year] [name of copyright holder] [Software Name] is licensed under Mulan PSL v2. You can use this software according to the terms and conditions of the Mulan PSL v2. You may obtain a copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2 THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for more details. Mulan Permissive Software License,Version 2 Mulan Permissive Software License,Version 2 (Mulan PSL v2) January 2020 http://license.coscl.org.cn/MulanPSL2 Your reproduction, use, modification and distribution of the Software shall be subject to Mulan PSL v2 (this License) with the following terms and conditions: 0. Definition Software means the program and related documents which are licensed under this License and comprise all Contribution(s). Contribution means the copyrightable work licensed by a particular Contributor under this License. Contributor means the Individual or Legal Entity who licenses its copyrightable work under this License. Legal Entity means the entity making a Contribution and all its Affiliates. Affiliates means entities that control, are controlled by, or are under common control with the acting entity under this License, ‘control’ means direct or indirect ownership of at least fifty percent (50%) of the voting power, capital or other securities of controlled or commonly controlled entity. 1. Grant of Copyright License Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable copyright license to reproduce, use, modify, or distribute its Contribution, with modification or not. 2. Grant of Patent License Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable (except for revocation under this Section) patent license to make, have made, use, offer for sale, sell, import or otherwise transfer its Contribution, where such patent license is only limited to the patent claims owned or controlled by such Contributor now or in future which will be necessarily infringed by its Contribution alone, or by combination of the Contribution with the Software to which the Contribution was contributed. The patent license shall not apply to any modification of the Contribution, and any other combination which includes the Contribution. If you or your Affiliates directly or indirectly institute patent litigation (including a cross claim or counterclaim in a litigation) or other patent enforcement activities against any individual or entity by alleging that the Software or any Contribution in it infringes patents, then any patent license granted to you under this License for the Software shall terminate as of the date such litigation or activity is filed or taken. 3. No Trademark License No trademark license is granted to use the trade names, trademarks, service marks, or product names of Contributor, except as required to fulfill notice requirements in Section 4. 4. Distribution Restriction You may distribute the Software in any medium with or without modification, whether in source or executable forms, provided that you provide recipients with a copy of this License and retain copyright, patent, trademark and disclaimer statements in the Software. 5. Disclaimer of Warranty and Limitation of Liability THE SOFTWARE AND CONTRIBUTION IN IT ARE PROVIDED WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL ANY CONTRIBUTOR OR COPYRIGHT HOLDER BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO ANY DIRECT, OR INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM YOUR USE OR INABILITY TO USE THE SOFTWARE OR THE CONTRIBUTION IN IT, NO MATTER HOW IT’S CAUSED OR BASED ON WHICH LEGAL THEORY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 6. Language THIS LICENSE IS WRITTEN IN BOTH CHINESE AND ENGLISH, AND THE CHINESE VERSION AND ENGLISH VERSION SHALL HAVE THE SAME LEGAL EFFECT. IN THE CASE OF DIVERGENCE BETWEEN THE CHINESE AND ENGLISH VERSIONS, THE CHINESE VERSION SHALL PREVAIL. END OF THE TERMS AND CONDITIONS How to Apply the Mulan Permissive Software License,Version 2 (Mulan PSL v2) to Your Software To apply the Mulan PSL v2 to your work, for easy identification by recipients, you are suggested to complete following three steps: i Fill in the blanks in following statement, including insert your software name, the year of the first publication of your software, and your name identified as the copyright owner; ii Create a file named “LICENSE” which contains the whole context of this License in the first directory of your software package; iii Attach the statement to the appropriate annotated syntax at the beginning of each source file. Copyright (c) [Year] [name of copyright holder] [Software Name] is licensed under Mulan PSL v2. You can use this software according to the terms and conditions of the Mulan PSL v2. You may obtain a copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2 THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for more details.

简介

期货算法交易终端 展开 收起
C++
MulanPSL-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C++
1
https://gitee.com/scicapital/Enterprise.git
git@gitee.com:scicapital/Enterprise.git
scicapital
Enterprise
Enterprise
master

搜索帮助