1 頁 (共 1 頁)

|夢想多大•成就多高|#第15集

發表於 : 週二 10月 21, 2025 10:53 am
X5Super
2009年11月4日,提早吃晚餐,搭著捷運來到高雄港區,那有一場由寶來曼氏期貨公司舉辦的計量化交易論壇,捷哥想要見見其中一位仰慕已久的講者--藍色投機客。

寶來曼氏計量化交易論壇.png

傑哥從2005年在美國開戶TradeStation,遲遲未能大規模進入美期交易的障礙有2,1個是TradeStation的自動下單處理,另1個是美期商品的規格與換約處理。

在2009年期間,傑哥留意到藍色投機客的部落格,他也使用TradeStation交易美國期貨,思考了一些時日,終於去該部落格留言請教自己所遭遇的問題,前幾天期待回覆的心情有些震盪,後來果真收到藍色投機客的回信,而且相當熱情,原來也是一位熱情不吝分享的交易者,會讓捷哥等這麼多天,原來是寄送的電子信箱不是藍色投機客常用的。

捷哥本來想在今天論壇結束後,跟藍色投機客道謝並作TradeStation的經驗交流,雖然,沒有適當機會而錯過,但後來仍在網路上有持續的實質交流。

捷哥曾寫了一個特定期貨商品的自動換約程式,經過測試並非能夠百分百成功,問題似乎在於TradeStation的連續合約交易商品,不見得會在表訂日期上架,這也讓捷哥沒有動能繼續寫其他商品的換約程式,因為這可要燒掉不少腦力,又不見得可百分百成功,到頭來還是需要手動處理,藍色投機客的建議是依他的經驗多商品的手動換約並不麻煩,這讓捷哥能夠下定決心放棄程式自動換約的計畫。

關於自動下單,藍色投機客也回答了捷哥在設定上的一些問題,接下來,就要靠捷哥自己的實測了。

捷哥在他的部落格曾記錄下這些測試的經過與結論:
----------------------------------------------------
@2010-2-9自動化交易與測試 

累積了三五年的經驗,可能學會了系統交易的策略制定;累積了五到七年,學會了資金管理;累積了將近十年,才接觸到了自動交易的核心。用外行的眼光看自動下單,不就是把訊號送出去而已嗎?
在台指的經驗,似乎是這樣的,但從接觸到穩定,幾乎也用掉了一年,做到的也只是策略成交後,送出市價單而已。當累積的統計發現滑價過高,比如去年,單邊超過5點以上,超過的那部份累積金額就有1百50萬,就會想如果可以改善1成也有15萬,花一年投資15萬,如果能夠有這樣的成效,那每年就可以多賺15萬了(也可能是少賠)。
那要怎樣下手呢?改成停止Stop單,或者限價Limit單?前者,台灣交易所還沒提供,後者,看來簡單,但結合自動下單,卻可以複雜的讓人暈了頭。
TradeStation8就是標榜自動下單的Broker,我多年前就開戶,等著我程式交易成熟後,從她這裡開始自動下單的天地。這一等就是好幾年,不過,想說讓TS8的自動下單更成熟再進入,也少了抓bug的苦痛。但是,最近在Ts8的測試,自動下單問題卻明顯的很,讓我感受到,即便是這樣營以維生,有技術根基的broker,幾年來也只是這樣的成果,自動化交易,要做到精緻是需要資源與時間的。
----------------------------------------------------
@2010-2-17自動交易的代價 

測試TS8自動下單一陣子了,常出現的幾個問題,還沒有得到TS8的回覆,就在農曆除夕出門前,發現了另外一個問題,這回的問題,收盤當沖後,竟還留下多單部位,因為,也是美國期貨週末收盤了,只好先下了限價空單,期望週一開盤後,可以順利把部位平倉。
年初二,從北部回來,部位已經平倉了,怕這個問題再次出現,暫時關閉了自動下單的測試,並把問題寄給了TS。
剛才,收到了回覆,原來,當天市場出現了快市震盪,策略在23:29:59送出了取消單,就在取消單處理的過程中,這些單子被市場價格觸及成交了,接下來,取消單因找不到要取消的單子而被reject,策略的部位就與實際部位不一樣了。
實際自動下單與模擬策略所處的世界原本就不同,只是我們習慣把它們視為相同。想要讓兩者的績效完全一致,是不可能的。我們慣用的方式,是用滑價來修正模擬策略的非真實性。
進入到TS8,本以為把stop單直接放在server,可以減少滑價,沒料到,這也帶來了非同步的問題。這問題,就好似風險與報酬間的拉扯,也像是打地鼠的遊戲,打掉了這個問題,就出現另一個問題。
這樣的問題,看似令人沮喪,但在交易的邏輯中,這卻是一個價值,當沒有絕對的答案,當沒有完全的解決方案,其中就存在著機會。而我的選擇,就是面對可以承受的風險,去擷取可以獲取的報酬。
----------------------------------------------------
@2010-2-24 測試報告 

經過一週,將每日測試異常的現象,寄給TS,問題大致出現在以下的幾類:
1. 雙向突破單,如果市價靠近空單(Sell short)這邊,幾乎都會先送出多單(Buy),又馬上取消,然後hold住空單(Short),直到空單被市價觸及,以market單送出。
我用幾乎來形容,是因為每天都有這樣的情形,只出現過2/19一次例外,23:35 #2-1075-8016成功的先送出空單(Sell short),這讓我費盡心思也想不通,這bug竟然還會偶而醒過來。
2. 當策略上的stop單價格變動,automation並沒有任何動作去改單。發生在2/22 23:25(issue2)。
3. 在K線未結束前,市價從靠近多單(buy stop),移到接近空單(Sell short stop),多單取消,但空單沒有被送出。這與問題1不同,因為這時與前一筆送出的order已經超過15秒的限制了,不該被hold住。這問題出現在2/22 23:38 #2-1091-8914(issue3)。
4. 策略並沒有任何訊號,自動下單卻送出orders。發生在2/4 22:10,23:35,23:50,以及2/19 22:25。
5. 送出的價格錯誤。這有兩類
沒有倉位時,buy order送出又取消,其中價格與策略不同。發生在2/19 22:45,23:15。
空頭倉位時,cover價格正確而buy價格錯誤,發生在2/19 11:55。
6.進場後,出場單與反向進場單設定是都會被送出的。但有時只送出一筆。發生在
2/5 00:30,00:50~01:25與01:30~01:51,只有buy to cover單。
2/23 23:45只有sell出場單。
2/24 1:05取消兩筆單後,只送出buy to cover單。

以上這些問題,TS 工程人員已經收到了,正在建立測試環境來確認問題,他們本來要我寄程式碼,想想後被我拒絕了,沒能夠順利下單,損失了機會成本,還要讓系統有曝光失效的危險,似乎沒有必要。看來,要等下個版本release了,也不知可以解決多少?
其實,自動下單這個夢,我已經了解與實際的距離了,反正,就是得把策略績效打些折扣,不是要花在滑價上,就是異常處理,捨不得這些,就要花更多的時間與金錢投資,現階段對我的效益不大。但如果以合作的角度來看,就可以多贏,就像多市場多系統的組合一樣。每個人的專長都不一樣,若有心在交易上賺錢,結合交易團隊,效益最大。不過,看到市面上的,總是急著把研究當商品拿出來賣,舉凡data model(system),下單機,程式策略等等,只是要知道一點,拿出來賣的,多半是舊品,新品或優品多半留著自己用,我這樣說是因為,個人化交易的solution尚未有成熟的商品,得一直持續研究,要客戶花了錢花了時間,到頭來還要再來一次,會敬而遠之的。我也因此,逼著自己把研究從策略延伸到資訊工具上。
現在TS的自動下單問題,可以大致掌握了解了,這些問題在一個多月實際發生所影響的也有限,其實,可以規劃處理風險來正式上線了。
然後再來研究TS + IB或MC + IB,甚至,AB + IB。
----------------------------------------------------
@2010-02-28 0226確定平倉 

TS8自動下單測試了一個多月了,總是得上線,想了想,自動下單的風險有三類: (1) 資料斷線 (2) 自動下單error (3) Client端問題。
Clinet端問題,與台指系統相同,斷電,網路斷線以及電腦軟硬體故障。這部分不用重複在這裡探討。
(1)與(2)都只能對策,無法自行解決,若要逐一確認與對策,上線的日子就遙遠了。
我打算先設定一個短期目標,就是收盤後能夠確保沒有留倉。不管什麼問題造成的錯單,早上睡覺起來,不能看到有部位留下來。
在這樣的一個前提下,我得假設收盤後,總有交易環境一切正常的時候,才能用程式的方式來解決不該出現的倉位。所以囉,這個對策的風險,就是(1)與(2)一直都沒有同時正常過。
我打算用的方法是,當 收盤後 且 還有交易部位時,下單平倉。
因為我設定的平倉時間早於收盤,所以還有足夠的時間來做這個動作。
TS8有保留字的指令,GetPositionQuantity可以查詢指定帳戶與指定Symbol的實際部位口數,只要在策略最後當沖平倉後,查詢到的口數,都是不正常的,得設法平倉。
當然,查詢的時間,得考慮成交的時間,比如1:55分策略平倉,實際成交平倉可能是1:55:02,所以,這個時間後,出現的部位才需要處理。
為了考慮這個條件,我設計了一個Timer,但是不知道有沒有效
Timer = ( FracPortion( ComputerDateTime )*24*3600 - IntPortion(EndTime/100)*3600 - FracPortion( Endtime/100 ) * 6000);
EndTime代表策略收盤當沖的時間,比如155。
Timer可以設定 > 5{Seconds}來當條件。
不過,這樣的條件是不夠的,萬一在回測的過程,也滿足這樣的條件怎麼辦?TS8有個保留字可以確定是不是real time的tick。
GetAppInfo( aiRealTimeCalc ) = 1;
這個條件,其實,已經放在最後我們要平倉的函數指令之中了
PlaceOrder
這是利用TS8巨集。PlaceOrder寫成的函數。
這樣應該可以先處理,一大部分自動下單的問題。
星期五開盤前的晚上,我抱著疲憊虛弱的身子,在另一台電腦,作了我可以做的測試後,終於可以睡覺了,剛好趕上週末,若收盤留下部位,就可以用這個方法強迫平倉,不用讓部位陪伴我渡過整個週末。
星期六早上,起晚了,這段時間累積的睡眠不足,一口氣補足,糟了,突然清醒了,因為設定8:00會自動關閉TS8,所以,TM上的Message資料會不見,EL print 到debug window的資料也會不見。
一切都太晚了,到了電腦開啟了TS8,發現巧合總是會聚在一起,看到了部位留了下來,也就是說,Strategy在當沖的時間送出的market order沒有實際成交,昨晚寫的PlaceOrder也沒有成功,而且,也沒有Message資料可以找到問題。
無法讓滿心的疑惑,陪我過完週末,找空檔,去拼湊僅有的蛛絲馬跡,自動交易為什麼會留倉,答案真的找不到,只好寫信問TS了,那為什麼我寫的PlaceOrder沒有效了?
就是星期日的下午,我想到了,打開電腦,查詢巨集設定的條件,在order status bar巨集是綠燈,表示是開啟的,再打開Strategy中Properties for all的設定,果然忘了把巨集功能打開,看看這張圖最下面Macros沒有打勾

TS巨集開啟設定.png
TS巨集開啟設定.png (63.42 KiB) 已瀏覽 596 次

不知道什麼時候,才會再出現部位留倉的情形,來測試這個功能,或許,找天熬夜,自己弄個部位來測試。
越來越急著要上線,越急事情卻弄得更亂,同時還有輕原油的日線系統測試中,或許,那一邊可以早點上線,如果資金管理的問題解出來。
----------------------------------------------------
TradeStation自動下單有Stop server與Limit order 事件管理的優勢,卻也有部位同步處理的困擾,這不是台灣使用下單機的主流模式,大部分的人也難以理解箇中點滴,不過,這些測試與後來的經驗,也成了捷哥特殊的優勢,可以在動下單同時擁有事件模式與部位同步模式的雙刀流功力。

後記:捷哥紀錄文章的部落格Xuite已經下架了,所以原文中的文章來源連結就刪掉,不再附上了。