- Python算法交易實戰(zhàn)
- (法)塞巴斯蒂安·多納迪奧等
- 3391字
- 2022-12-01 19:14:58
1.3 了解算法交易概念
本節(jié)將講解很多新的概念,如交換訂單簿(由市場參與者發(fā)出的不同種類的訂單組成)、交換匹配算法、交換市場數(shù)據(jù)協(xié)議和交換訂單輸入?yún)f(xié)議等。接下來正式對這些概念進行更詳細的討論。
1.3.1 交換訂單簿
交換訂單簿保存了客戶下達的所有買入和賣出訂單,它跟蹤所有傳入訂單的屬性——價格、合同或股票數(shù)量、訂單類型和市場參與者標識。買入訂單(或出價)從最高價(最好的價格)到最低價(最差的價格)排序。就匹配而言,價格較高的出價有較高的優(yōu)先權(quán)。相同價格的出價的優(yōu)先級取決于匹配算法。最簡單的先進先出(First In First Out,F(xiàn)IFO)算法采用的是直觀的規(guī)則,即按照相同價格的訂單進來的順序進行優(yōu)先級排序。這在后面我們討論復(fù)雜的交易算法如何利用速度和智能來獲得更高的訂單優(yōu)先級,以及對贏利的影響時,將非常重要。賣出訂單(或要價)從最低價(最好的價格)到最高價(最差的價格)排序。同樣,對于相同價格的要價,匹配優(yōu)先級的方法取決于交易所對特定產(chǎn)品采用的匹配算法,這部分我們將在后文更詳細地闡述。市場參與者可以下達新的訂單,取消現(xiàn)有訂單,或者修改價格和股票或合約數(shù)量等訂單屬性。針對市場參與者發(fā)出的每一個訂單,交易所都會生成公開的市場數(shù)據(jù)。利用交易所公開的市場數(shù)據(jù),市場參與者可以準確地了解交易所的訂單簿是什么樣的(取決于交易所選擇隱藏哪些信息,但我們暫時忽略這種細微差別)。
1.3.2 交換匹配算法
當收到的出價等于或高于最佳(最低價)的要價訂單時,就會發(fā)生匹配。反之,當收到的要價等于或低于最佳(最高價)的要價訂單時,則發(fā)生匹配。輸入的進取訂單將繼續(xù)與賬本中現(xiàn)有的被動訂單進行匹配,直到滿足這兩個條件之一。要么是新的激進訂單完全匹配,要么是剩余訂單的價格比傳入訂單的價格更差,因此,匹配不能發(fā)生。這是因為一個基本規(guī)則,即訂單的價格不能以低于其入市時的限價進行匹配。現(xiàn)在,就同一價位的訂單而言,匹配的順序是由交易采用什么匹配算法規(guī)則決定的。
1.先進先出匹配
前面簡單介紹了先進先出算法,我們通過表1-1的例子來展開。假設(shè)當交易所競價單A、B、C在該時間順序以10.00美元(1美元合人民幣6.8元左右)的價格輸入時,訂單簿的狀態(tài)如下。那么,在同樣的價格下,訂單A的優(yōu)先級高于訂單B,訂單B的優(yōu)先級高于訂單C,競價訂單D價格低至9.00美元。同樣,在要價方面,訂單X是以11.00美元的價格進入的,先于訂單Y(價格也是11.00美元)。因此,訂單X比訂單Y有更高的優(yōu)先權(quán),然后問詢訂單Z是以更差的價格12.00美元進入的。
表1-1

假設(shè)在先進先出模式下,4股以10.00美元的價格的入場賣單K將與1股的訂單A、2股的訂單B、1股的訂單C依次匹配。匹配結(jié)束后,訂單C仍有剩余的2股,價格為10.00美元,將擁有最高優(yōu)先權(quán)。
2.按比例匹配
按比例匹配有各種不同的方式,通常實現(xiàn)方式也略有不同。在本書的范圍內(nèi),我們提供了這種匹配算法背后的一些知識,并提供了一個假設(shè)的匹配方案。
按比例匹配的基本模式是,在相同的價格下,傾向于大單而不是小單,并且忽略訂單的輸入時間。這使市場的微觀結(jié)構(gòu)發(fā)生了相當大的變化,市場參與者傾向于輸入較大的訂單以獲得優(yōu)先權(quán),而不是盡可能快地輸入訂單。
考慮一個如之前所示的市場狀態(tài)。在表1-2這個例子中,假設(shè)的訂單數(shù)量被提高了100倍。這里,買單A、B和C的價格也相同,均為10.00美元。然而,當一個數(shù)量為100的賣出訂單以10.00美元的價格進入時,訂單C得到了70份合約的成交量,訂單B得到了20份合約的成交量,訂單A得到了10份合約的成交量,這與它們在該級別的大小成正比。這是個過于簡化的例子,不包括與部分匹配大小有關(guān)的復(fù)雜情況,也不包括相同大小的訂單之間的打破平局相關(guān)的復(fù)雜性,等等。同樣地,有些交易的所有者會按比例和先進先出的方式進行混合,一部分進場的激進訂單使用按比例匹配,一部分按先進先出的順序匹配。但這應(yīng)該可以作為一個很好的例子來讓我們對按比例匹配與先進先出匹配的不同進行基本理解。對按比例匹配及其影響的詳細研究超出了本書的范圍,這里不再詳述。
表1-2

1.3.3 限價訂單簿
限價訂單簿與交換訂單簿在本質(zhì)上非常相似。不同的是,限價訂單簿是由市場參與者根據(jù)交易所公開的市場數(shù)據(jù)而建立的,以響應(yīng)市場參與者向其發(fā)送訂單。限價訂單簿是所有算法交易中的核心概念之一,也是所有其他交易形式中經(jīng)常出現(xiàn)的概念。其目的是以一種有意義的方式收集和安排出價和報價,以深入了解在任何特定時間在場的市場參與者,并深入了解均衡價格是多少。我們將在第2章深入研究技術(shù)分析時重新討論這些問題。根據(jù)交易所決定通過公開市場數(shù)據(jù)向所有市場參與者提供的信息,市場參與者建立的限價訂單簿可能與交易所匹配引擎的訂單簿略有不同。
1.3.4 交換市場數(shù)據(jù)協(xié)議
由于交換市場數(shù)據(jù)協(xié)議不是本書的重點,因此對這一主題的嚴格處理超出了本書的范圍。市場數(shù)據(jù)協(xié)議是從交易所到所有市場參與者的外發(fā)通信流,這些通信流都有完善的文檔,可供新的市場參與者建立他們的應(yīng)用程序來訂閱、接收、解碼、檢查錯誤和網(wǎng)絡(luò)損失。這些協(xié)議的設(shè)計考慮到了延遲、吞吐量、容錯、冗余和許多其他要求。
1.3.5 市場數(shù)據(jù)提供處理程序
市場數(shù)據(jù)提供處理程序是市場參與者為與具體的交易所市場數(shù)據(jù)協(xié)議接口建立的軟件。這些軟件能夠訂閱、接收、解碼、檢查錯誤和網(wǎng)絡(luò)損失,并在設(shè)計時考慮到了延遲、吞吐量、容錯、冗余和許多其他要求。
1.3.6 訂單類型
大多數(shù)交易所支持從市場參與者那里接受各種訂單,我們將在本小節(jié)討論幾種常見的類型。
1.IOC訂單(立即或取消)
這些訂單永遠不會被添加到賬本中。它們要么與現(xiàn)有的恢復(fù)訂單進行匹配,以IOC訂單量為上限,要么取消其余的輸入訂單。如果在IOC訂單的價格上沒有可以與之匹配的剩余訂單,那么IOC訂單將被全部取消。IOC訂單的好處是不會停留在賬本的匹配中,也不會在交易算法中造成訂單管理的額外復(fù)雜性。
2.GTD訂單(Good Till Day)
這些訂單會被添加到賬本中。如果它們與賬本中現(xiàn)有的休眠訂單完全匹配,那么它們就不會被添加,否則訂單上的剩余數(shù)量(如果沒有部分匹配,可以是整個原始數(shù)量)就會被添加到賬本中,并作為休眠訂單,讓進場的訂單可以與之匹配。GTD訂單的好處是可以利用FIFO匹配算法,比剛出現(xiàn)在賬本上的訂單有更好的優(yōu)先級,但在交易算法中需要更復(fù)雜的訂單管理。
3.止損單
止損單是指在市場上以某一特定價格(稱為止損價)成交之前不出現(xiàn)在賬面上的訂單,在成交后,它們將變成預(yù)先指定價格的常規(guī)GTD訂單。這些訂單作為退出單是很好的選擇(無論是清算虧損的頭寸還是實現(xiàn)贏利的頭寸的利潤)。在后文解釋了什么是有虧損或贏利的頭寸以及什么是退出頭寸之后,將重新審視這些訂單。
1.3.7 交換訂單輸入?yún)f(xié)議
交換訂單輸入?yún)f(xié)議是指市場參與者的應(yīng)用程序如何發(fā)送訂單請求(新建、取消、修改)以及交易所如何回復(fù)這些請求。
1.3.8 訂單輸入網(wǎng)關(guān)
訂單輸入網(wǎng)關(guān)是市場參與者的客戶端應(yīng)用程序,通過訂單輸入?yún)f(xié)議與交易所匹配引擎進行通信。這些應(yīng)用程序必須以可靠的方式處理訂單流,向交易所發(fā)送訂單,修改和取消這些訂單,并在這些訂單被接受、取消、執(zhí)行等情況下獲得通知。通常情況下,市場參與者會運行訂單輸入網(wǎng)關(guān)的變體,這些變體只接收訂單執(zhí)行的通知,以檢查與主要訂單輸入網(wǎng)關(guān)訂單流的一致性,被稱為drop-copy網(wǎng)關(guān)。
1.3.9 頭寸和損益管理
被執(zhí)行的訂單會使市場參與者以執(zhí)行的金額和執(zhí)行的價格在被執(zhí)行的工具上擁有頭寸(限價訂單可以比輸入的價格更好,但不會更差)。買方執(zhí)行的稱為“有多頭頭寸”,而賣方執(zhí)行的稱為“有空頭頭寸”。當完全沒有頭寸時,稱為“平倉”。當市場價格高于頭寸價格時,持有多頭頭寸買方就會賺錢;當市場價格低于頭寸價格時,買方就會虧損。反之,空頭則是當市場價格低于頭寸價格時,持有空頭頭寸的賣方就會賺錢;當市場價格高于頭寸價格時,賣方就會虧損。因此,也就有了眾所周知的低買高賣、高買更高賣等觀點。
多次買入執(zhí)行,或多次賣出執(zhí)行不同的金額和價格,導(dǎo)致總的頭寸價格是執(zhí)行價格和數(shù)量的成交量的加權(quán)平均值。這被稱為倉位的成交量加權(quán)平均價格(Volume Weighted Average Price,VWAP)。未平倉的頭寸要標明市場價格,以了解該頭寸的未實現(xiàn)損益(Profit and Loss,PnL)是多少。這意味著將當前的市場價格與頭寸的價格進行比較,市場價格上漲的多頭頭寸被認為是未實現(xiàn)利潤,反之則被認為是未實現(xiàn)虧損。類似的術(shù)語也適用于空頭頭寸。當未平倉的頭寸被平倉時,就實現(xiàn)了損益,也就是說你賣出平倉多頭頭寸,買入平倉空頭頭寸。在這一點上,PnL被賦予了術(shù)語實現(xiàn)PnL。任何時候的總PnL是迄今為止已實現(xiàn)的PnL和未平倉頭寸的未實現(xiàn)PnL的總和(按市場價格)。
- Python量化投資指南:基礎(chǔ)、數(shù)據(jù)與實戰(zhàn)
- iOS 9 Game Development Essentials
- Oracle Database 12c Security Cookbook
- Web程序設(shè)計(第二版)
- Oracle Exadata專家手冊
- Mastering React
- OpenResty完全開發(fā)指南:構(gòu)建百萬級別并發(fā)的Web應(yīng)用
- Programming Microsoft Dynamics? NAV 2015
- 深入解析Java編譯器:源碼剖析與實例詳解
- Instant Apache Camel Messaging System
- Getting Started with Electronic Projects
- 前端程序員面試算法寶典
- Perl 6 Deep Dive
- R統(tǒng)計應(yīng)用開發(fā)實戰(zhàn)
- Learning Scrapy