热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

期货行情交易软件

阅读目录开始整体结构服务端实现后台管理客户端交易整套期货行情交易软件均由C#.NET平台实现,其中包括行情转发服务端、行情服务端、交易服务端、行情管理后台、交易管理后台以及转

阅读目录

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


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


推荐阅读
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 本文介绍了GregorianCalendar类的基本信息,包括它是Calendar的子类,提供了世界上大多数国家使用的标准日历系统。默认情况下,它对应格里高利日历创立时的日期,但可以通过调用setGregorianChange()方法来更改起始日期。同时,文中还提到了GregorianCalendar类为每个日历字段使用的默认值。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
author-avatar
love四叶草health
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有