简单交易所模拟器
项目描述
简介
这是一个简单的金融交易所模拟器。它旨在用于测试交易应用、协议网关等。
它以两种基本模式运行:独立模式或管理模式
在独立模式下,匹配引擎模块独立运行,根据其实施处理订单。此模式适用于临时测试、演示等。
在管理模式下,模拟器由另一个进程控制,通常是集成测试模块,它可以与匹配引擎交互,以确保它正好实现了配置的场景。
插件
基本框架可以通过插件扩展,使用新的匹配引擎行为和协议映射:提供特殊化默认行为的派生类的Python模块。
一旦导入,这些模块可以注册到框架中(使用“注册”函数),然后可以通过标准工厂函数使用。
用法
在Python unittest模块中,您应该导入exsim模块,并创建API类的实例。
然后您可以在配置和创建服务器实例之前加载任何额外的(第三方)插件。服务器实例是通过克隆调用进程创建的,因此任何现有的Python设置或环境变量等都会由服务继承。所有后续与服务的交互都使用IPC。
设计
运行基本事件循环。
监听一个或多个TCP套接字,并接受连接。
根据为该会话配置的协议模块解码消息。
通过中央调度器转发消息。
支持自动测试请求/心跳。
在管理模式下,消息可以被排队以便显式处理。
可以加载策略模块以实现自动消息处理。
基本匹配引擎将管理书籍、发布数据并匹配订单。
类
- 端点
一个监听套接字,附加到匹配引擎上,并配置了协议以编码和解码接收到的消息。
- 会话
由客户端应用程序发起的套接字连接。会话由端点创建,并继承其端点的协议和引擎。
- 协议
一个编码器和解码器,将交易协议(如FIX或OUCH)中的消息转换为Python字典,然后传递给匹配引擎进行处理。
协议可以可选地处理通信的某些“机制”:序列号、心跳等。但实际交易消息只是简单翻译并传递给引擎。
管理协议
- create_engine name class
创建指定类的匹配引擎。
- delete_engine name
删除匹配引擎。
- set_engine_property engine_name property_name value
配置引擎。
- create_endpoint name engine protocol
使用指定协议创建一个监听协议端点,并将其附加到指定引擎。
- delete_endpoint name
删除监听端点。
- set_protocol_property endpoint_name property_name value
配置协议模块。
- create_book name engine symbol
在匹配引擎中创建一个用于指定工具交易的书。
- delete_book name engine
从引擎中删除一本书。
- create_quote quote_id engine book_name
创建(做市商)报价。
- set_quote_property quote_id name value
配置报价。
- submit_quote quote_id
发布报价。
- delete_quote quote_id
移除报价。
- create_order order_id book_name
创建订单。
- set_order_property order_id name value
配置订单。
- submit_order order_id
发布订单。
- delete_order order_id
管理订单。
- match_orders book_name order_a order_b
匹配两个订单。
服务从监听指定端口的管理协议的控制端口开始。客户端API可以连接到此控制端口,并向服务器发送RPC。
服务器没有异步事件:客户端可以轮询排队的事件。这简化了客户端API与测试框架的集成。
在管理模式下,除了通过客户端API之外,不配置服务器。这确保测试用例代码代表了所需环境的完整描述。
路线图
M1
- 基本的FIX 4.x协议模块
仅单笔订单
丢弃副本
市场数据
- 基本的模拟匹配引擎
价格-时间匹配
仅订单(无报价等)
- 工具类型
标准
自动填充
自动部分填充
自动拒绝
自动取消
部分取消然后取消
- 活动水平
无(仅客户端应用程序交易)
慢
快
- 从文件读取配置
基本上是(未来)管理协议中可能执行的相同操作的脚本
M2
- 管理协议
REST? WSS?
登录认证
读取和排队数据进行收集
超时
心跳
- Python客户端API
- 使用requests模块?
完全同步的RPC样式。
可选地,在后台生成模拟进程
使用unittest & pytest的示例
待办事项
- 支持从外部源获取工具和定价数据。
流式FIX (?)市场数据
找出最佳方式允许对这些报价/订单进行交易。
添加ITCH/OUCH(使用SOUP TCP)支持,以确保抽象不是过于FIX特定的
添加对RFQ工作流程/匹配引擎的支持。
许可证
exsim 在 GNU 公共许可证下授权。
虽然这不是法律建议,简而言之,这意味着您可以免费使用此代码。您还可以修改它并运行修改后的版本,或将其与其他代码集成,但如果您这样做,则必须不得分发修改后的代码或集成此软件的系统,除非它也在 GPL 许可证下提供。
贡献
评论、建议、错误报告、错误修复——所有对该项目的贡献都受到欢迎。请参阅项目的 GitHub 页面以获取最新源代码,并请为评论、建议和错误打开一个 问题。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。
源代码分发
构建分发
python-exsim-0.0.2.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 95169528ccaed7d93d3b582648190a0de87b986efd1140540aeb557fe2105e6c |
|
MD5 | 74aa47d50f7a671bd71bb2c9e7f83f3e |
|
BLAKE2b-256 | 27cc0c6f401bf618cc9bf3e5fa9a0ae7d3a4e0b1b093830ad52400b5fc71771e |
python_exsim-0.0.2-py2.py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8c252046e4bf8c812360304047224d1aab863cfb74fb4b210b01dbd5a51deb6e |
|
MD5 | 74d0dd4adf1bc79c3e8088b4bd87c721 |
|
BLAKE2b-256 | c0a483059272fa40775118e0322bf3a033d5923d13442de346e805dde4f5b756 |