高仿MT4行情终端(K线图+操控+简单架构)
概述
详细
本Demo讲述的范畴:
K线的展示(小键盘方向操作,鼠标操作),QT的使用,客户端大致的框架展示。
开发环境:
win10 64 位+VS2015 Update3 + QT 5.11.2 + BOOST 1.68 + QT VS Tools + C++11
概述
涉及业务:
模仿MT4界面,包括MDI窗口,K线图,鼠标操控的放大,缩小,十字线移动。
涉及技术:
一个高性能行情客户终端架构,大致技术包括如下(本DEMO覆盖了部分):
1.定义业务层
2.网络数据接入与路由层
3.数据序列化与反序列化
4.Reactor事件驱动
5.订阅与取消订阅工具
6.广播器与消息系统
代码目录结构:

VS2015里面的目录:

框架代码在MainFrame目录里面
K线业务在Kline里面
详细说明
一。K线图业务
k线主图一般用蜡烛图,原理图如下:

蜡烛图显示的信息包括开盘,高点,低点和收盘价。
蜡烛图包括两部分 — 真实和阴影图(也称为影线。)
阴影是高位和低位线,高位的顶点是当时的最高价。低位的下方代表当时的最低价格。
红色代表收盘价低于开盘价。上方是开盘价,下方是收盘价。
绿色是收盘价高于开盘价,上方是收盘价,下方是开盘价。(国外的标准,国内正好相反)
MT4就是如下这个效果:

这里的图标demo只为展示,没有什么复杂架构,直接从github下了份代码,进行了修改,添加了消息事件。
二.框架
1.这里用的是典型的三层架构:
界面层是界面框架,菜单,图表等要素,在代码里面主要以main_frame里面实现;
逻辑层以数据管理层为主,在代码trade_manager里面实现, 单例模式被上级使用;
IO层以网络IO为主,在代码net_manager里面实现,单例模式被上级使用;
2.流程
2.1业务流程至上而下:
main_frame到trade_manager: 代码 g_TraderCpMgr.Subscribe(E_REFRESHFUND, this);
trade_manager到net_manager: 代码net_manager::Instance()->Subscribe(this);
2.2业务流程从下至上:
2.2.1 net_manager到trade_manager:net_manager::OnFrontConnected()等网络事件回报里面往上层回调,注意下定义(class trade_manager:public packet_receiver)
2.2.2 trade_manager到main_frame:(见广播器定义)
typedef QMap<int, CBroadcaster> QMapBDR;
QMapBDR m_mapBdr;
CBroadcaster::Broadcast通过QT的消息发送到UI层,main_frame通过QT的cuatomEvent来处理。
3.K线

auto_grid是基类
kline_grid是绘制K线类
data_file是数据类
4.运行目录
运行程序: x64\Release\BLClient.exe
模拟序列数据: dataKLine.txt
三 。总结
以上着重描述了数据在框架的传递,代码很清晰的列在一个目录,没有网络数据回报,但是在架构上是个很精简的工程,定义了分类消息的广播器,可以自定义路由,进行分类处理网络数据。
程序在release模式下运行,可调试。
基本可以结合前面CTP的例子,自己处理解包,可以做一个行情系统出来。
参考:
上海期货交易所CTP行情和交易接入
注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权
高仿MT4行情终端(K线图+操控+简单架构)的更多相关文章
- android 股票K线图
现在在手上的是一个证券资讯类型的app,其中有涉及到股票行情界面,行情中有K线图等,看到网上很多人在求这方面的资料,所以我特地写了一个demo在此处给大家分享一下. 下面是做出来的效果图: 这个 界面 ...
- canvas绘图,html5 k线图,股票行情图
canvas绘图,html5 k线图,股票行情图 canvas跟其他标签一样,也可以通过css来定义样式.但这里需要注意的是:canvas的默认宽高为300px * 150px,在css中为canva ...
- K线图学习
本博文(适合入门的股民朋友)内容来自网络,股市有风险,入市需谨慎 一.起源 K线图(Candlestick Charts)又称蜡烛图.日本线.阴阳线.棒线等,常用说法是“K线”,起源于日本十八世纪德川 ...
- 如何看K线图基础知识
在日K线图中一般白线.黄线.紫线.绿线依次分别表示:5.10.20.60日移动平均线,但这并不是固定的,会根据设置的不同而不同,比如你也可以在系统里把它们设为5.15.30.60均线. 你看K线图的上 ...
- 怎样看K线图(实图详解)
K线图由开盘价.收盘价.最高价和最低价组成. 上面两种图叫作实体红K线和实体黑K线,实体红K线意味买力强劲,市场有强烈的做多欲望,此时可持股待涨.实体黑K线则代表市场完全进入恐惧状态,如果 ...
- Highcharts candlestick(K线图)案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- C#下如何用NPlot绘制期货股票K线图(2):读取数据文件让K线图自动更新
[内容介绍]上一篇介绍了K线图的基本绘制方法,但很不完善,本篇增加了它直接读取数据的功能,这对于金融市场的数据量大且又需要动态刷新功能的实现很重要. [实现方法] 1.需要一个数据文件,这里用的是直接 ...
- 利用JFreeChart绘制股票K线图完整解决方案
http://blog.sina.com.cn/s/blog_4ad042e50100q7d9.html 利用JFreeChart绘制股票K线图完整解决方案 (2011-04-30 13:27:17) ...
- 如何从零绘制k线图 -- 原生js canvas图表绘制
样式如下图 源码地址: https://github.com/sutianbinde/charts 编写这个需要具备canvas基础,如果没有canvas基础可以学习我前面的cnavas基础博客. 具 ...
随机推荐
- Java常用API——String字符串运算
一.字符串运算 String类 1.概述 String是特殊的引用数据类型,它是final类. 2.构造方法 String str = "abc"; 相当于: char date ...
- solr6.5.0(windows)教程
第一步:安装Tomcat8重命名结尾加上solr6(自定义) 第二步: 解压solr,把solr-6.5.0\solr-6.5.0\server\solr-webapp下的webapp文件夹拷贝到to ...
- sublime text3 中 python3编译出现中文乱码解决方法
转 https://blog.csdn.net/Bin_bin_bingo/article/details/80531582 一.乱码现象 利用sublime自带编译快捷方式ctrl+B会出现中文乱码 ...
- Gym 102091K The Stream of Corning 2【线段树】
<题目链接> 题目大意: 进行两种操作:1.给定一个数的出现时间.价值.消失时间: 2.进行一次询问,问你当前时间,第K大的数的价值. 解题分析: 采用离线集中处理,将每个数的出现时间和它 ...
- Qt创建任务栏进度条
一.正文 任务栏进度条是Windows7就引入的一种UI形式,通常用于显示软件当前正在执行的任务的进度(如编译程序的进度.下载任务的进度).如下: 在Qt中使用任务栏进度条也是非常容易的一件事情.Qt ...
- git 将主分支的提交合并到分支上(主分支同步到分支)
通常都会遇到将分支修改的内容合并到主分支中,但是在主分支中修改了内容怎么同步到分支上呢,这个时候需要将主分支上的提交操作在分支上再做一次: 1.首先在主分支上执行: git log 2.找到你想要同步 ...
- 把存储过程结果集SELECT INTO到临时表
把存储过程结果集SELECT INTO到临时表 在开发过程中,很多时候要把结果集存放到临时表中,常用的方法有两种. 一. SELECT INTO . 使用select into会自动生成临时表,不需要 ...
- Codeforces.1082E.Increasing Frequency(思路)
题目链接 \(Description\) 给定\(n\)个数.你可以选择一段区间将它们都加上或减去任意一个数.求最终序列中最多能有多少个数等于给定的\(C\). \(n\leq5\times10^5\ ...
- Java并发编程(四)-- Java内存模型
Java内存模型 前面讲到了Java线程之间的通信采用的是共享内存模型,这里提到的共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入何时对另一个线程可见.从抽象的角 ...
- python基础一 ------利用生成器生成一个可迭代对象
#利用生成器生成一个可迭代对象#需求:生成可迭代对象,输出指定范围内的素数,利用生成器产生一个可迭代对象#生成器:本身是可迭代的,只是 yield 好比return返回,yield返回后函数冻结状态, ...