證券交易系統設計與開發

證券交易系統是金融市場上可以提供的最有流動性,效率最高的交易場所。模塊化

和傳統的商品交易不一樣的是,證券交易系統提供的買賣標的物是標準的數字化資產,如USD、股票、BTC等,它們的特色是數字計價,可分割買賣。函數

證券交易系統經過買賣雙方各自的報價,按照價格優先、時間優先的順序,對買賣雙方進行撮合,實現每秒成千上萬的交易量,能夠爲市場提供高度的流動性和價格發現機制。spa

本文討論如何設計並實現一個證券交易系統。設計

咱們以一個美圓計價的數字貨幣交易所爲例,實現一個比特幣的BTC/USD交易系統。3d

一個完整的證券交易系統是由用戶系統、帳戶系統、訂單系統、撮合系統以及清算系統等子系統構成的。各個子系統相互配合,完成證券報價交易。code

當一個請求進入交易系統後,首先由用戶系統(User)識別用戶身份,而後由帳戶系統(Account)對用戶資產進行凍結,買入凍結USD,賣出凍結BTC,凍結若是成功,訂單就進入定序系統(Sequence)。blog

爲何須要設計一個定序系統?由於交易系統的全部訂單是一個有序隊列。不一樣的用戶在同一時刻下單,也必須由定序系統肯定前後順序。隊列

通過定序的訂單被送入撮合引擎(Match)。io

撮合引擎是交易系統的核心。撮合引擎本質上就是維護一個買賣盤列表,而後按價格優先原則對訂單進行撮合,可以成交的就輸出成交結果,不能成交的放入買賣盤。這裏注意沒有時間優先原則,由於通過定序的訂單隊列已是一個時間優先的隊列了。class

當撮合引擎輸出了成交結果後,該成交記錄由清算系統(Clearing)進行清算。清算的工做就是把買單凍結的USD扣掉,並加上買入所得的BTC,同時,把賣單凍結的BTC扣掉,並加上賣出所得的USD。根據taker/maker的費率,向買賣雙方收取手續費。

清算系統完成清算後,更新訂單狀態,再通知用戶,用戶就能夠查詢到買賣的成交狀況。

在撮合引擎輸出成交記錄給清算系統的同時,它還把去除用戶和訂單相關信息的成交記錄輸出給行情繫統(Quotation),由行情繫統保存市場的成交價、成交量等信息,並輸出實時價格、K線圖等技術數據,以便公開市場查詢。

通過這樣的模塊化設計,一個證券交易系統就具有了雛型。

下一步,咱們就須要把這個交易系統用代碼實現出來。

先定義入口函數:

/**
 * A crypto exchange.
 * 
 * @author liaoxuefeng
 */
public class CryptoExchangeApplication {
    public static void main(String[] args) {
        // TODO:
    }
}

 

轉自:https://www.liaoxuefeng.com/article/001511866762041974a7c8929d04943a4cf7550e523da99000

參考:

1:交易系統的消息服務如何保證100%可靠: https://zhuanlan.zhihu.com/p/53260927

2:交易系統如何確保帳簿100%準確:https://zhuanlan.zhihu.com/p/53261561

3:撮合系統設計:https://yq.aliyun.com/articles/60653

相關文章
相關標籤/搜索