阅读目录
- 开始
- 整体结构
- 服务端实现
- 后台管理
- 客户端交易
整套期货行情交易软件均由C#.NET平台实现,其中包括行情转发服务端、行情服务端、交易服务端、行情管理后台、交易管理后台以及转发管理后台。行情转发服务端负责实时行情数据的转发,交易服务端负责按规则进行交易逻辑处理,行情转发后台负责合约管理,交易后台负责交易管理,支持无限级子集、权限、手续费等等管理。客户端包括pc和安卓端,ios端正在开发,pc端包括wpf和winform两个版本。
整体结构
整个系统架构是由若干个消息服务器端组成,基于TCP长链接连接,确保数据的可靠性,消息协议基于自定义二进制协议。行情转发服务端以拉模式定时从行情源(易盛、赢透等等)获取及时行情数据,实时转发给下级行情服务器和交易服务器,下级行情服务器实时转发行情数据到各行情交易客户端。各服务端均支持水平扩展。
服务端
服务端的实现是基于IOCP完成端口队列实现,微软推荐的SEA方式,即SocketAsyncEventArgs。此方式重点在于池化(pooling),池化的目的就是为了减少和重用运行时分配和垃圾回收。
Accept Loop实现的代码片段
while (IsListening) { var sea = _acceptSeaPool.Take(); var socketError = await _listener.AcceptAsync(sea); if (socketError == SocketError.Success) { var acceptedSocket = sea.AcceptSocket; TSocket result2 = null; try { result2 = new TSocket(sea); if (useBufferedSockets) { TBuffered result3 = new TBuffered(result2); return result3; } else { return result2; } } catch (System.Exception) { if (result2 != null) result2.Dispose(); else ((IDisposable)sea).Dispose(); throw; } } else { } _acceptSeaPool.Return(sea); }
Session 实现的代码片段,参照SupperSocket的实现方式
private void ProcessAcceptSocket(Socket acceptedSocket) { var session = _sessionPool.Get(); session.Create(acceptedSocket); if (_sessions.TryAdd(session.SessionKey, session)) { try { session.Start(); } finally { _sessionPool.Return(session); } } }
Buffer池的管理:做过Socket服务端程序开发的朋友都知道,buffer管理的好坏是影响服务端程序性能的一个重要因素。该服务端默认情况下不使用buffer管理,需要配置开启。主要是因为NETGC大对象堆压缩的问题,目前GC针对大对象堆只回收不压缩,不同于托管堆栈段上的小型对象堆。所以针对buffer管理我使用了抽屉式的管理方式,预先在托管堆栈段上开辟多个连续的大对象(》85000byte)片段,实现整开整收防止内存碎片的问题。由于代码比较多,此处就不贴代码了。
消息协议:消息协议是基于自定义二进制(包头)+Protocolbuffer(包体)实现,Protocolbuffer是谷歌开源的消息编码格式,基于二进制格式存储,独立于语言和平台,并且大部分主流语言都有实现,最大的优势小、快、面向对象处理消息包体。行情源的数据包格式视行情源而定,每个行情源的数据包都不同。
后台管理平台
行情接入服务端管理,wpf/winform实现,主要针对合约的订阅、取消、CRUD等操作。行情服务端管理平台,wpf/winform实现,主要针对合约、市场的相关管理。交易管理后台包括账户管理支持无限级、代理商管理、交易管理、合约管理、资金管理等等功能,支持对手价、市价、指定价进行交易等等功能。后台的实现逻辑比较简单,主要是消息协议的定制、规则定制以及交易业务逻辑的实现。
客户端
行情交易客户端目前包括pc版和android版本,ios版本正在开发中。客户端的模块包括交易模块、查询模块、资金模块、系统设置模块。出入金调用的是国付宝的接口,具体细节可以参考国付宝接口文档。
- 集成了常用十多种技术分析指标包括(MACD ,DMI,DMA,FSL,TRIX,BRAR,CR,OBV,ASI,EMV,RSI,WR,MA,KDJ,CCI,ROC, BOLL,MTM,BIAS,MIKE,WVAD,VR,EXPMA,PBX(瀑布线),FS(分时图),VOL,DB6,BDT,TWR,BTX);
- 支持自定义指标,动态加载;
- 支持多达十个技术分析窗口;
- 支持保存指标生成的数据供分析;
- 支持放大缩小、自划线;
- 报表生成等;
有问题欢迎大家随时沟通,qq1719299191