概述
詳細
本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行情和交易接入
