关于策略模式的讲解请参考 策略模式
这是对 RhinoGateway 中交易所的应用。
首先,我会创造一个 Map,使用交易所名字和交易所实例来做对应。
1 | self.gateways[ExchangeSub.BINANCESPOT.value] = BinanceSpotGateway(self.logger, rhino_config, self.loop) |
最后通过参数来选择具体使用哪个,比如
1 | self.gateways.get(ExchangeSub).deal() // ExchangeSub 是传进去的交易所名称 |
另外,这里需要提一下,量化中需要各种各样的策略,那么,执行不同的策略是否完美符合策略模式?
我的经验是不是!
量化中的策略,是非常复杂的,每一个策略有自己的业务、逻辑、风控、账户等,如果仅仅只是靠策略模式去做解耦无疑是灾难的。
我的第一版本的框架是单体,其中各种策略的执行用的就是策略模式。
这就导致,选择执行哪一个策略的时候,需要非常非常负责的逻辑判断、预处理等,当我策略添加 3
个以上的时候,我已经完全不想碰这个代码了。
所以,我后面将策略都写成独立的可执行项目,他们只管接数据、执行自己的逻辑,而不必考虑数据是谁产生、从哪里来。