自动化交易设计

自动化交易的过程就是交易程序与交易所系统交互的过程:接收交易所发布的实时行情,并向交易所发出报撤单请求,同时接收订单实时状态。
组织证券交易
《证券交易所管理办法》第七条明确规定了交易所的职能,其中包括“组织和监督证券交易”。
组织证券交易是由交易系统完成。我们使用交易程序报出的买入卖出订单进入交易系统后,遵循价格优先、时间优先的原则排队成交。
把交易系统比作一台运行的计算机,把我们使用的交易程序比作外部设备,例如优盘,交易程序可能随时接入,也可能随时退出,就像优盘的热拔插。
交易程序接入交易系统后,就可以与交易系统进行交互。交互是双向的,既可以向交易系统发出报撤单请求,也可以接收到交易系统的通知。
我们的交易程序使用交易接口(TraderApi)接入交易系统。
实时公布即时行情
《证券交易所管理办法》第三十八条规定“交易所应当实时公布即时行情”。
虽说行情的源头是交易系统中的最新成交情况,但是行情发布系统与交易系统是独立的。在大部分的交易软件上,无需登录交易账户就可以查看实时行情。
相较于交易系统,行情系统的业务比较单一,只负责发布实时行情。
我们的交易程序使用行情接口(MdApi)接入行情系统。
异步与同步
本地端与服务端进行交互时,一个请求从本地发出,需要经过网络传输,服务端处理,服务端回复,网络传输,最后本地才能接收到结果信息。
同步模式下,程序发出请求后,需要等待服务端回复,期间不能继续运行。异步模式下,程序在发出请求后继续运行,通过回调函数获得结果信息。
不管交易接口(TraderApi)还是行情接口(MdApi)都是采用异步模式工作的。
如果这个概念不容易理解,我们可以做一个类比:
同步模式就像打电话,我问你一句,会等待你的回答,等待期间不能做其他事情。
异步模式就像寄信,我把信件从邮局寄出,接着就可以去做其他事情了,你回信之后,邮递员会通知到我,然后我再考虑如何处理收到的信息。
如果寄信采用同步模式会发生什么?我把信件从邮局寄出,然后就必须等待在那里,不能做其他任何事情,直到收到回信。
异步模式涉及到一个概念:回调。其实也很简单,回调就是邮递员的角色,当收到回复时,回调函数会自动执行,附带结果信息,我们只需要在回调函数中定义相关的处理逻辑就可以了。
量化交易基础架构
所以,一个量化交易程序至少由行情模块、策略模块和交易模块构成。
行情模块接收实时行情,输入到策略模块中,经过数据处理、逻辑判断,输出交易信号,然后调用交易模块发出报撤单的请求,交易模块通过异步模式通知订单实时状态。
我们在接收到订单状态的通知时进行判断:如果未成交是否需要撤单重报,如果成交则更新账户持仓数量、策略持仓数量,等。
行情数据源源不断,以上过程循环往复。

智能化与系统化
然而,量化交易是一项系统化的工程。可能涉及多市场、多品种、多账户、多业务。
一个更完善的设计,就需要考虑多行情源、多账户、风险控制及执行算法等模块。

当然,具体设计要视实际需求而定。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库