一個(gè)高頻交易系統(tǒng)的實(shí)現(xiàn) 1.緒論

在介紹高頻交易系統(tǒng)之前披泪,首先科普一下量化交易,或者叫程序化交易的基本概念部服。

量化交易在英文中的稱呼是Quantitative transaction哟忍,即“(精確)定量的交易”。其內(nèi)在含義便是根據(jù)市場(chǎng)當(dāng)下的量?jī)r(jià)情況瑟押,基于嚴(yán)謹(jǐn)?shù)慕灰撞呗圆蠼荩?jì)算出合適的出入場(chǎng)價(jià)格和量。

但是人的大腦并不能做出如此實(shí)時(shí)復(fù)雜的計(jì)算,所以量化交易具體事通過(guò)程序化交易的技術(shù)手段來(lái)實(shí)現(xiàn)的嫩舟。

接下來(lái)我們來(lái)聊一下:

量化交易系統(tǒng)現(xiàn)狀

我們?yōu)槭裁匆燧喿?/i>

讀完本文氢烘,讀者可了解目前業(yè)內(nèi)一些交易系統(tǒng)的情況,明白我們?yōu)槭裁匆罱ㄗ约旱慕灰紫到y(tǒng)家厌。

量化交易系統(tǒng)現(xiàn)狀

根據(jù)筆者了解到的情況播玖,目前業(yè)內(nèi)量化公募或者私募實(shí)現(xiàn)自己的交易策略有兩種方法:

軟件廠商售賣的產(chǎn)品化交易系統(tǒng)

投資機(jī)構(gòu)的自研系統(tǒng)

軟件廠商提供的交易系統(tǒng)產(chǎn)品

筆者用過(guò)一些類似的產(chǎn)品,比如?文華財(cái)經(jīng)饭于、?MultiCharts蜀踏、?Tradeblazer等,這些系統(tǒng)筆者都用過(guò)掰吕,基本上來(lái)說(shuō)可以滿足大部分量化投資者的需求果覆。

這些產(chǎn)品為了考慮到所有的專業(yè)和非專業(yè)人士的需求,往往會(huì)有較為傻瓜化的操作方式殖熟。 使用者不需要了解很多計(jì)算機(jī)的知識(shí)局待,只需要學(xué)會(huì)使用簡(jiǎn)單的編程語(yǔ)言(多為Python)再加上一些點(diǎn)按和選擇操作,就可以實(shí)現(xiàn)大部分自己的策略菱属。有些產(chǎn)品甚至不需要編寫(xiě)策略代碼钳榨,可以直接使用一種特定格式的計(jì)算公式進(jìn)行組合,就能構(gòu)造出自己的策略纽门。

但是重绷,為什么比較專業(yè)的團(tuán)隊(duì)還是不喜歡用這些產(chǎn)品呢?因?yàn)檫@些產(chǎn)品功能雖然豐富膜毁,但是對(duì)于一些資深團(tuán)隊(duì)來(lái)說(shuō)不夠?qū)I(yè):

系統(tǒng)效率低下

因?yàn)檫@些產(chǎn)品大都是定制一門現(xiàn)有語(yǔ)言作為自己的策略實(shí)現(xiàn)語(yǔ)言昭卓,例如我的上家所開(kāi)發(fā)的產(chǎn)品,是對(duì)Python進(jìn)行了定制后作為策略開(kāi)發(fā)的語(yǔ)言瘟滨。 python語(yǔ)言由于其本身的特點(diǎn)候醒,并不支持多線程技術(shù),所以整個(gè)策略幾乎以一種同步(Synchronous)的方式在執(zhí)行杂瘸,無(wú)法高效利用異步(Asynchronous)的方式達(dá)到對(duì)網(wǎng)絡(luò)倒淫、磁盤IO等信息的最快速處理。學(xué)過(guò)計(jì)算機(jī)的同學(xué)知道败玉,Synchronous的執(zhí)行模式會(huì)導(dǎo)致程序阻塞并且在阻塞期間無(wú)法進(jìn)行其他的運(yùn)算敌土。可以想象运翼,當(dāng)一個(gè)最佳報(bào)價(jià)Tick來(lái)了的時(shí)候你的程序還阻塞在向磁盤寫(xiě)日志的過(guò)程中不能自拔返干,從而錯(cuò)過(guò)了一個(gè)最佳入場(chǎng)機(jī)會(huì),是不是會(huì)很郁悶血淌。

系統(tǒng)可開(kāi)發(fā)性弱

這樣的系統(tǒng)無(wú)法提供較高的性能矩欠,適合做CTA這類型不需要頻繁下單财剖,不需要進(jìn)行準(zhǔn)確入場(chǎng)的策略。

系統(tǒng)穩(wěn)定性弱

另外這些系統(tǒng)為了實(shí)現(xiàn)用戶友好癌淮,往往選擇了支持圖形界面的windows系統(tǒng)躺坟。而windows系統(tǒng)本身的穩(wěn)定性就較低,這也會(huì)給交易帶來(lái)一部分額外的風(fēng)險(xiǎn)乳蓄。

此外咪橙,這些系統(tǒng)往往將實(shí)驗(yàn)、交易兩部分功能集成為一個(gè)統(tǒng)一的軟件虚倒,導(dǎo)致很多時(shí)候策略就運(yùn)行在客戶機(jī)系統(tǒng)上美侦,這樣則增加了交易的風(fēng)險(xiǎn)。

投資機(jī)構(gòu)的自研系統(tǒng)

具有一定軟件開(kāi)發(fā)實(shí)力的機(jī)構(gòu)裹刮,擁有自己的策略實(shí)現(xiàn)方式音榜。由于不受交易系統(tǒng)設(shè)計(jì)的限制庞瘸,這樣幾乎可以100%的實(shí)現(xiàn)策略邏輯捧弃,實(shí)現(xiàn)對(duì)下單撤單更精確的控制。

筆者見(jiàn)過(guò)最多的就是一個(gè)程序就是一個(gè)策略擦囊,如果運(yùn)行多個(gè)策略违霞,需要啟動(dòng)多個(gè)程序。

但是瞬场,這就會(huì)引發(fā)一些問(wèn)題:

策略與系統(tǒng)耦合度很高

如果一個(gè)策略想在另外一個(gè)交易商接口上運(yùn)行就很麻煩买鸽。例如之前的策略是針對(duì)CTP的,如果新賬戶使用的是Femas飛馬接口贯被,就需要重新實(shí)現(xiàn)一次眼五,這樣同一策略在不同平臺(tái)上的一致性就很難保證。

沒(méi)有足夠的策略抽象

策略開(kāi)發(fā)者在開(kāi)發(fā)策略的時(shí)候除了要考慮策略本身的邏輯彤灶,還要關(guān)注交易底層的細(xì)節(jié)看幼。這樣就無(wú)法全身心投入策略邏輯設(shè)計(jì)。 此外幌陕,一個(gè)程序一個(gè)策略的方式诵姜,也不方便進(jìn)行統(tǒng)一策略管理。有些賬號(hào)的登陸時(shí)有限制的搏熄,例如CTP賬號(hào)同時(shí)只能登陸N次棚唆,那也就限制了在這個(gè)賬戶上面最多能運(yùn)行N個(gè)策略。

我們?yōu)槭裁匆燧喿?/h1>

專業(yè)的策略開(kāi)發(fā)框架

使用C++作為策略開(kāi)發(fā)語(yǔ)言心例,內(nèi)存占用低宵凌,運(yùn)行速度快。另外止后,可使用大量第三方庫(kù)摆寄,如有名的QuantLIb。

“天下武功,唯快不破”

靈活配置交易目標(biāo)微饥。

“我的這個(gè)策略需要同時(shí)輸入期貨的3個(gè)合約逗扒、期權(quán)的兩個(gè)合約以及一只股票的tick數(shù)據(jù),而且要同時(shí)對(duì)一個(gè)股票賬戶與一個(gè)期權(quán)賬戶下單欠橘,能做到嗎矩肩?能!”

對(duì)交易邏輯進(jìn)行高層次抽象肃续,將策略開(kāi)發(fā)者從交易接口的底層細(xì)節(jié)中解脫出來(lái)黍檩。

“CTP接口的CThostFtdcDepthMarketDataField是啥?飛馬接口的OnRspUserLogin又是啥始锚?我其實(shí)一點(diǎn)都不需要關(guān)心刽酱。”

可自定義C++變量的“探針”瞧捌,通過(guò)“探針”可以在盤中實(shí)時(shí)可視化任何變量的走勢(shì)棵里。

“bidprice/askprice 這兩個(gè)指標(biāo)放在一個(gè)圖里,分別用紅色和藍(lán)色姐呐。volume放在另外一個(gè)圖里殿怜,用黃色柱狀圖表示,在交易的時(shí)候我需要實(shí)時(shí)的看到這兩個(gè)圖的數(shù)據(jù)變化曙砂!”

策略可以將當(dāng)前運(yùn)行狀態(tài)保存到磁盤头谜,方便進(jìn)行系統(tǒng)遷移。

“系統(tǒng)需要重啟你下鸠澈,我先把當(dāng)前線上的運(yùn)行的所有策略保存一下柱告。重啟完畢后我再恢復(fù)~”

策略可以自定義“人工干預(yù)動(dòng)作”,在線上策略運(yùn)行過(guò)程中,可人工向策略發(fā)送一些預(yù)定義的信號(hào)笑陈。

“突然發(fā)布的新聞對(duì)螺紋鋼走勢(shì)產(chǎn)生了嚴(yán)重影響际度,人工發(fā)一個(gè)信號(hào)讓策略強(qiáng)行平倉(cāng)吧⌒滦猓”

同一交易服務(wù)器上的不同策略之間可以互相通信甲脏。

“這10個(gè)策略組成的策略組最多持倉(cāng)30手,組內(nèi)每個(gè)策略在開(kāi)倉(cāng)前先判斷一下其他策略的持倉(cāng)情況妹笆】榍耄”

優(yōu)雅的框架,定義了大量的宏拳缠,是的策略的代碼簡(jiǎn)潔易懂墩新。

“在寫(xiě)代碼方面,我有潔癖窟坐『Tǎ”

下面就是一個(gè)最簡(jiǎn)單的策略绵疲,這個(gè)策略什么都不做,但是展示了系統(tǒng)的大部分功能:

看到上面的策略模版臣疑,讀者們可能要問(wèn):STRATEGY_TEMPLATE_DECLARE盔憨、

BEGIN_SERIALIZATION、PARAMETER_DOUBLE讯沈、BEGIN_GRAPH類似的這些是什么東東郁岩,為什么我學(xué)C++的時(shí)候從來(lái)沒(méi)有看到過(guò)?

別著急缺狠,這些其實(shí)都是為了策略的代碼更加簡(jiǎn)潔而預(yù)先設(shè)定好的一些宏定義问慎。在后面的文章中我會(huì)展開(kāi)詳細(xì)講一些這些宏的設(shè)計(jì)。

其中OnTick是當(dāng)行情數(shù)據(jù)來(lái)了的時(shí)候策略需要做的事情挤茄,OnTrade是報(bào)單成交的時(shí)候需要做的事情如叼,而OnOrder會(huì)通知一些撤單相關(guān)的信息。策略開(kāi)發(fā)者并不需要關(guān)心 策略到底是跑在CTP平臺(tái)還是飛馬或者盈透平臺(tái)穷劈,是不是so easy~~

專業(yè)的交易系統(tǒng)

研發(fā)環(huán)境笼恰、交易環(huán)境、監(jiān)控環(huán)境分離囚衔。

“剛才我不小心踢掉電源了挖腰!不要著急雕沿,策略都在遠(yuǎn)程的服務(wù)器上安全地運(yùn)行练湿。”

資源占用小审轮,運(yùn)行穩(wěn)定肥哎。

“我這個(gè)策略要連續(xù)不間斷跑一年,而且要無(wú)人值守疾渣!”

擴(kuò)展性強(qiáng)篡诽,可對(duì)接大部分的交易&&行情接口。目前已經(jīng)支持CTP榴捡、

飛馬杈女、盈透、大連飛創(chuàng)等接口吊圾。

“咱們這個(gè)新產(chǎn)品需要用xxx接口去交易达椰。沒(méi)問(wèn)題,寫(xiě)個(gè)插件就行项乒ⅲ”

友好的策略監(jiān)控。

“把這10個(gè)策略的監(jiān)控圖調(diào)出來(lái)檀何,平鋪顯示蝇裤!”

實(shí)時(shí)日志顯示廷支。

“每一筆交易的日志我都要立馬看到!”

下面運(yùn)行在本地的監(jiān)控系統(tǒng)一些截圖:

這些是熱軋卷板和螺紋鋼的套利栓辜,同一個(gè)策略恋拍,不同的運(yùn)行參數(shù)進(jìn)行不同周期的套利∨核Γ可以看到一共有幾十個(gè)策略在運(yùn)行芝囤。



專業(yè)的策略研發(fā)系統(tǒng)

數(shù)據(jù)可視化。

多種盈虧自動(dòng)計(jì)算辛萍。

下圖是對(duì)一個(gè)策略的歷史數(shù)據(jù)測(cè)試結(jié)果:

在接下來(lái)的一系列文章中悯姊,我將帶領(lǐng)大家一步一步實(shí)現(xiàn)這個(gè)交易系統(tǒng)。

文章內(nèi)容請(qǐng)移步到我的博客?http://www.huyifeng.net/? 歡迎一起交流討論贩毕。

這里先附上Github地址

https://github.com/solopointer/thunder-trader

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末悯许,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子辉阶,更是在濱河造成了極大的恐慌先壕,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谆甜,死亡現(xiàn)場(chǎng)離奇詭異垃僚,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)规辱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門谆棺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人罕袋,你說(shuō)我怎么就攤上這事改淑。” “怎么了浴讯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵朵夏,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我榆纽,道長(zhǎng)仰猖,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任奈籽,我火速辦了婚禮饥侵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘唠摹。我一直安慰自己爆捞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布勾拉。 她就那樣靜靜地躺著煮甥,像睡著了一般盗温。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上成肘,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天卖局,我揣著相機(jī)與錄音,去河邊找鬼双霍。 笑死砚偶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的洒闸。 我是一名探鬼主播染坯,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼丘逸!你這毒婦竟也來(lái)了单鹿?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤深纲,失蹤者是張志新(化名)和其女友劉穎仲锄,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體湃鹊,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡儒喊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了币呵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怀愧。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖富雅,靈堂內(nèi)的尸體忽然破棺而出掸驱,到底是詐尸還是另有隱情肛搬,我是刑警寧澤没佑,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站温赔,受9級(jí)特大地震影響蛤奢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜陶贼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一啤贩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拜秧,春花似錦痹屹、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)暖庄。三九已至,卻和暖如春楼肪,著一層夾襖步出監(jiān)牢的瞬間培廓,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工春叫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肩钠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓暂殖,卻偏偏與公主長(zhǎng)得像价匠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子呛每,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容