本Demo講述的範疇:html
K線的展現(小鍵盤方向操做,鼠標操做),QT的使用,客戶端大體的框架展現。git
開發環境:github
win10 64 位+VS2015 Update3 + QT 5.11.2 + BOOST 1.68 + QT VS Tools + C++11網絡
概述架構
涉及業務:框架
模仿MT4界面,包括MDI窗口,K線圖,鼠標操控的放大,縮小,十字線移動。工具
涉及技術:性能
一個高性能行情客戶終端架構,大體技術包括以下(本DEMO覆蓋了部分):this
1.定義業務層atom
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的例子,本身處理解包,能夠作一個行情繫統出來。
參考: