原则与规范
TqSdk设计原则
不预设用户策略模型
我们深刻认识到, 量化交易是一个充满竞争与创新的领域,成功的用户总是在不断构思和尝试全新的理念与模型. 在这方面, 用户比我们知道得更多, 走得也更快. 因此, 我们在设计TqSdk时, 总是尽力避免对用户的模型结构做限定, 而是专注于为用户提供通用性的资源和能力.
我们的以下设计决策遵循了此原则:
不提供策略类模板, 只以示例程序方式展示各类策略应用
一个策略程序中可以任意获取数据和发出指令
允许用户在一个程序中使用任意多个TqApi实例
保持用户代码简单
我们对TqSdk的一个设计目标是尽量让用户的代码与需求方案保持一致(顺序相同, 篇幅相当).
我们的以下设计决策遵循了此原则:
不使用多线程, 避免用户处理线程同步问题
不使用回调模型, 避免用户维护状态机状态变量
提供专门的调仓工具
实盘/模拟/回测/复盘 几种不同运行模式切换, 只需要在代码中做单点修改
行为可验证
作为TqSdk库质量管控的关键措施, 我们要求 TqSdk 在运行时可以记录完整的输入信息, 以确保发生问题时可以稳定重现问题和定位原因. 我们做了这些决定:
以数据流衔接库中的各组件
TqSdk 的日志文件完整记录收到的全部数据包
专门构建了一个单元测试框架, 可以直接用日志作为测试用例输入
相关知识与技能
TqSdk 的开发涉及以下知识点,您可能需要先学习它们,才能更好的理解和改进TqSdk的代码
金融相关业务知识
TqSdk是用于金融交易领域的专用软件包。我们假定用户和开发者都已经具备相应的基础知识,在TqSdk的文档中不再详加解释。
python asyncio
TqSdk 的代码大量依赖 python asyncio 机制. asyncio 的编程模型与传统 python 程序差异很大. 我们对于TqSdk的使用者尽量隐藏了 asyncio 相关概念, 允许用户在不了解 asyncio 的情况下实现绝大多数业务需求. 但是对于开发者, 若不了解 asyncio, 在理解 TqSdk 内部代码实现时会非常困难。
Diff协议
TqSdk 并不是一个 all-in-one 的包, 它的能力有赖于一系列后台服务的支持. DIFF协议是 TqSdk 与后台服务间通讯的主要协议, 开发者需对 DIFF 有所理解, 才能掌握 TqSdk 的内部实现
Pandas/Numpy
Pandas/Numpy 是非常优秀的 python 数值计算库. TqSdk 利用这些库完成K线序列数据的存储和操作.
代码风格
TqSdk的代码风格遵循 PEP8 规范.
日志规范
@todo: 待写