跳转到主要内容

简单交易所模拟器

项目描述

Build status Docs Coverage PyPI Python
PyPI Downloads PyPI Monthly Downloads

简介

这是一个简单的金融交易所模拟器。它旨在用于测试交易应用、协议网关等。

它以两种基本模式运行:独立模式或管理模式

在独立模式下,匹配引擎模块独立运行,根据其实施处理订单。此模式适用于临时测试、演示等。

在管理模式下,模拟器由另一个进程控制,通常是集成测试模块,它可以与匹配引擎交互,以确保它正好实现了配置的场景。

插件

基本框架可以通过插件扩展,使用新的匹配引擎行为和协议映射:提供特殊化默认行为的派生类的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 (31.8 kB 查看哈希)

上传时间 源代码

构建分发

python_exsim-0.0.2-py2.py3-none-any.whl (39.8 kB 查看哈希)

上传时间 Python 2 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面