0%

tomoon | 策略模式

关于策略模式的讲解请参考 策略模式

这是对 RhinoGateway 中交易所的应用。

首先,我会创造一个 Map,使用交易所名字和交易所实例来做对应。

1
2
3
4
self.gateways[ExchangeSub.BINANCESPOT.value] = BinanceSpotGateway(self.logger, rhino_config, self.loop)
self.gateways[ExchangeSub.BINANCEUSWAP.value] = BinanceUSwapGateway(self.logger, rhino_config, self.loop)
self.gateways[ExchangeSub.MEXCSPOT.value] = MexcSpotGateway(self.logger, rhino_config, self.loop)
self.gateways[ExchangeSub.BSCSPOT.value] = BSCSpotGateway(self.logger, rhino_config, self.loop)

最后通过参数来选择具体使用哪个,比如

1
self.gateways.get(ExchangeSub).deal() // ExchangeSub 是传进去的交易所名称

另外,这里需要提一下,量化中需要各种各样的策略,那么,执行不同的策略是否完美符合策略模式?

我的经验是不是!

量化中的策略,是非常复杂的,每一个策略有自己的业务、逻辑、风控、账户等,如果仅仅只是靠策略模式去做解耦无疑是灾难的。

我的第一版本的框架是单体,其中各种策略的执行用的就是策略模式。

这就导致,选择执行哪一个策略的时候,需要非常非常负责的逻辑判断、预处理等,当我策略添加 3 个以上的时候,我已经完全不想碰这个代码了。

所以,我后面将策略都写成独立的可执行项目,他们只管接数据、执行自己的逻辑,而不必考虑数据是谁产生、从哪里来。

请我喝杯咖啡吧~