重新设计量化交易软件的思考

任何工程,可能都需要从需求出发,所以我在这里先把自己对量化交易软件的想法先理清晰。
其实,我觉得TB是挺好用的,就是有些思想受限制,不能自由发挥,而且行情数据比较慢(其实做中低频的策略也够用了),再一个就是策略的安全性(这个不好说),最后,就是收费的问题(加收25%,相对MC和文华来说,算是便宜的了。)
第一、希望软件做出来之后,支持多品种、多柜台的,例如期货(CTP/恒生),期权,股票(好像现在开放的接口不多),外汇,数字货币等。这就要求接口要统一起来。
第二、希望软件上面能给K线形式显示出来。这里有个开放的源代码,使用的是MFC平台下的,那么,K线数据结构就要参考源码中的Bar数据的结构,或者自己再把源代码修改修改来迎合自己的数据结构了。
第三、既然是要做量化的,肯定需要做的就是要支持量化策略自动运行。但是现在有可能是单一策略加载到多品种中,后续也有可能是每个品种需要加载的策略也是不一样的,所以现在就要决定清楚。
第四、之前做的程序都是结构式的,现在用于做服务的软件都要求多并发,所以我也想让自己的程序是多并发的,目前暂时参考VNPY的事件驱动机制。

由于上述的需求,现在目前在学习C++的设计模式,当前学到策略模式,觉得第一点有点头绪,于是写了个测试代码(附后),基本架构如图
在这里插入图片描述
代码:

#include <stdio.h>
#include <stdlib.h>


//业务逻辑中最顶层的抽象行情类
class MD
{
public:
	virtual void StartMd() = 0;     //纯虚函数,具体实现在子类中
};


class CCTPMd
{
public: 
	virtual void pri() {
		printf("This is CCTPMd");
	}
};

//业务逻辑中,针对CTP接口的行情实现
class CTPMd:public MD
{
public:
	void StartMd();     //具体实现,使用成员对象来实现具体算法流程
private:
	CCTPMd* m_CTPmd;    //此类对象继承于CTP的行情接口
};

void CTPMd::StartMd()
{
	m_CTPmd = new CCTPMd();
	m_CTPmd->pri();
}



void main()
{
	MD* md = new CTPMd();
	md->StartMd();
}

运行结果如下:
在这里插入图片描述
因为还是不断学习中,今天就写到这里。

猜你喜欢

转载自blog.csdn.net/griffin041702/article/details/110287866