期货行情交易软件

阅读目录

  • 开始
  • 整体结构
  • 服务端实现
  • 后台管理
  • 客户端交易


整套期货行情交易软件均由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

转载于:https://www.cnblogs.com/flightiness/p/8521836.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值