.. _dev_general: 原则与规范 ==================================================== 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: 待写