顯示具有 程式交易 標籤的文章。 顯示所有文章
顯示具有 程式交易 標籤的文章。 顯示所有文章

2010年2月7日 星期日

新聞: 證交所推券商交易主機代管 第4季上線

今天新聞報導台灣證交所將在第四季開始提供主機代管的服務 (新聞詳見 聯合新聞網). 新聞並沒有提到是否限制券商轉售這項服務給客戶, 但初期只有限制一個機櫃顯然對大部份中大型券商是不夠用的, 更不用說要提供服務給客戶了.

幾個星期前曾簡單介紹主機代管的服務 (證券交易的微秒時代 -- 交易所主機代管 colocation). 這項服務最大的優勢是讓交易的時間縮短, 對於程式交易有很大的幫助. 以現行的制度下, 投資人必須要經由券商下單本來就差了一截 (即使是專屬線路下單 Direct Market Access, DMA 也一樣), 到時候券商有了主機代管之後如虎添翼, 對其他投資人反而處於更不利的地位.

如果有在做程式交易的話, 問一下你的券商是否會提供主機代管的服務吧.

2010年1月13日 星期三

證券交易的微秒時代 -- 交易所主機代管 colocation

昨天 (1/12) 孟買證券交易所宣佈將與印度Netmagic Solutions合作提供交易所主機代管服務 (co-location), 提供券商和投資人交易程式與交易所主機最近距離的連線, 降低交易的延遲.

金融交易分秒必爭, 國外主要的交易所都有提供主機代管的服務. 主機代管的概念其實很簡單, 網路連線每經過一次轉接點, 都會有些微的延遲. 不管網路連線有多快, 轉接的點越多, 延遲就越久. 利用主機代管服務, 投資人可以將程式放在與交易所同一個網路上的電腦來執行, 不需要經過層層的轉接, 延遲的時間可以降到最低. 最短的距離當然是與交易主機放在同一個機房, 而且只有一個轉接點. 快速的成交回報對程式交易非常重要, 延遲的時間越短, 就越有機會用原先的市價成交, 越能精確地實現演算法的精神, 也可以提高成交量和周轉率.

上個禮拜 NYSE 宣佈進入微秒時代, NASDAQ 股票交易從交易委託到回報完成只需650微秒(百萬分之一秒), NYSE 和 NYSE Arca 股票只要950微秒. 台灣證交所先前曾經表示2011年板橋新電腦中心啟用之後將提供主機代管的服務, 不但落後歐美日交易所多年, 可能還會輸給印度.

2009年12月10日 星期四

在 Excel 自動記錄即時價格歷史資料 20091210-Tick Hisotry.xls

在交易時經常需要 Tick 的歷史資料, 但在 Excel 裡要將資料留下歷史記錄需要一點小技巧.這個範例從 Yahoo!Finance取得最新的台灣加權指數, 並設定為每分鐘更新一次. 在更新的時候會自動插入到 History 工作表的最上方, 讓資料自動保留下來.

從Yahoo!Finance取得外部資料 

在範例中並沒有使用即時的資訊源, 所以需要多這個步驟. 如果有看盤軟體可以用DDE連線就可以省去這個步驟.
  1. 選擇取得外部資料, 出現選擇網頁的視窗
  2. 輸入 Yahoo!Finance 網址 http://tw.finance.yahoo.com/
  3. 選擇想要匯入的資料, 在此我們選擇台灣加權指數
  4. 將資料匯入到Excel, 並將工作表更名為 Yahoo!Finance
  5. 資料匯入到Excel
  6. 修改查詢屬性, 在資料上按右鍵, 選擇 資料範圍內容. 將更新頻率更改為1分鐘一次. 虛擬的即時資料就算完成了.
  7. 建立 Monitor 和 History 工作表
  8. 將空白工作表更名為Monitor, 輸入要監控的資料, 包含代碼, 時間, 以及即時價格. 時間使用 NOW() 函數, 即時價格連結到 Yahoo!Finance 的價格資料, 如果有即時資訊源的話輸入DDE公式.
  9. Monitor 工作表
  10. 在 History 輸入標題名稱即可.
  11. History 工作表
  12. 打開 Visual Basic 編輯器, 在左方的 VBA 專案選擇 Sheet3(Yahoo!Finance) 按右鍵後 檢視程式碼.
  13. 選擇 Worksheet/Change 事件, 輸入程式碼就完成了
實作問題
  1. 程式碼是由錄製的巨集修改而來的, 你可以自行錄製巨集並找出其中的差異嗎?
  2. 範例中並不會檢查資料數量, 但 Excel 工作表的資料量是有限的. 可以限制資料數量成長嗎? 或是在實務上如何處理?
  3. 當你要儲存超過一個商品的價格時該如何處理?
  4. 如果資料更新速度很快, 用 複製/插入 的方式處理來得及嗎? 有沒有其他更好的方法?
    範例檔案 20091210-Tick History.xlsExcel Examples by Alvin Cho.

    2009年12月7日 星期一

    明年度在證券基金會開課的一些想法

    十一月以來在證基會的三堂課裡, 學員們最多的問題竟然是: 有沒有 Excel 的進階課程?

    其實這個問題經常有學員提出來. 我原本不傾向開 Excel 的進階課, 因為從 IT人員的角度來看, Excel 的功能即使發揮到極致, 仍有一些不足的地方. 並不是說  Excel 不適合財務或交易應用, 對一般使用者而言它仍是最容易上手的工具, 但它功能的限制還是讓我在推薦給我的學員時會有一些顧慮.

    今年在證基會開了八門課, 除了一門 IRS 評價之外, Excel 幾乎都只是輔助工具, 並沒有成為真正的主角. 但是由於學員多是財務背景, 資料庫和程式設計課程的確對某些人而言有難度. 所以很多學員要求開 Excel 進階與 VBA 的課程, 其實在現在的金融業是很需要的.

    這幾天在規劃明年度的課程, 目前的想法大致上分三個部份:
    1. Excel進階操作及設計: 主要目標在工作簿的設計和Excel基本功能的運用, 可能會包含一些簡單的VBA. 範例為投資組合管理.
    2. Excel VBA 設計: 主要目標為 VBA 程式設計. 範例為程式交易策略.
    3. Excel 財工應用: 利用 Excel 和 VBA 解決財務工程上的一些問題.
    我會陸續將課程內容發表在 blog 上. 如果有任何建議歡迎 email 給我. 謝謝.

    2009年12月1日 星期二

    新的亂數產生器 Mersenne Twister for Graphic Processor

    寫程式經常要用到亂數, 尤其是衍生性商品的評價和風險值計算. 其實在程式語言裡所附的亂數產生器並不夠亂, 在我們一般的PC要產生真正的亂數也很困難, 比較講究的程式通常會另外製作亂數產生器, 最常用的是由日本廣島大學兩位教授發明的 Mersenne Twister. 我自己實作的 RiskLib.NET也有將它改寫為C#的版本.

    Mersenne Twister 新出了利用圖形處理器GPU的平行處理版本 MTGP, 可以利用顯示卡上的處理器來做向量資料的計算, 還包含了NVIDIA CUDA的範例. Mersenne Twister 應該是很適合利用GPU來做, 只不過最近比較沒時間. 過一陣子好好來研究一下.

    2009年5月25日 星期一

    6/1 將於中正大學演講 國內外證券市場程式交易

    端午節連假後的第一個上班日 6/1 將應中正大學金融研究社之邀到該校演講. 該社林社長要我定講題時, 考慮了好一陣子, 到底該跟大學生講什麼主題呢? 講風險管理可能太不實用, 要談衍生性商品感興趣的人可能不多. 還是來談談程式交易吧, 有點另類的程式交易.

    我想要跟大學生談的程式交易並不是滿坑滿谷數也數不清的交易策略. 現在做策略的人實在太多了, 每個人都說他的策略有效, 但是什麼才是好的策略? 在執行程式交易時該注意什麼? 賺錢的策略永遠都會賺錢嗎? 這些很基本的問題倒是很少人在談.

    花一個半小時跟大學生談談程式交易的基本原則, 我並不鼓勵很衝動地馬上想一個策略進場投資, 在投資之前一定要先做好功課, 了解程式交易的風險所在, 才是我演講的目的.

    2009年5月20日 星期三

    程式交易選股最重要的考量 -- 流動性 The Most Important Factor in Program Trading -- Liquidity

    原則上在執行交易策略時並沒有什麼好股壞股, 只有適不適合這個時機點的問題. 但有一個重要的通則是, 所選的投資標的應該有非常高的流動性.

    什麼是高流動性呢? 簡單地說, 可以在任何時間點以市價買進或賣出想要的數量. 這聽起來好像是廢話, 舉幾個例子來說明:
    1. 想買進, 但股票漲停
    2. 想賣出, 但股票跌停
    3. 策略告訴我要買進一百張, 但一直到漲停價只有50張賣單
    4. 想賣出, 但該股暫停交易
    5. 想放空, 但該股無法放空
    如果在策略進場時發現流動性不足, 我們可以很簡單地捨棄這次機會不進場. 但做策略交易最悲慘的狀況就是無法出場. 手中持有的部位沒有辦法出場, 不管策略有多好都是失敗的. 所以在進場時就要考慮出場時的流動性.

    出場時的流動性是很難預估的, 所以在選股時應該要保守, 儘可能以流動性高的商品為主. 通常都是以一段時間的平均成交量來評估流動性. 當策略進場的量越大, 需要的流動性就越高.

    有些流動性很低的商品, 像是可轉債, 選擇權, 公司債等等, 在使用這些商品時要特別小心, 即使模型或是策略告訴你有套利機會, 仍有可能因為流動性的因素而導致虧損. 想賣而賣不掉是非常可能會發生的.

    先進的市場都有所謂的 Dark Pool 用來提高流動性. Dark Pool 是由交易所以外的企業經營的交易配對機制, 在收到交易委託之後, 先在內部尋找可供成交的機會, 如果有的話, 會立刻成交而不送到交易所, 也不會對市價有任何推動的作用.

    台灣股市因為有漲跌停的限制, 流動性有很大的問題, 其實是不太適合做程式交易. 對期貨而言, 雖然期貨的漲跌停相對比股票來得少見, 但是當股票有漲跌停時, 其實是對指數的扭曲, 指數無法反應正確的市況, 利用期貨來做程式交易也要留意.

    2009年4月13日 星期一

    將網站從 mojoPortal 改為 DotNetNuke

    這兩天將公司的網站從 mojoPortal 改為 DotNetNuke (DNN). 原本是想 mojoPortal 是 C# 做的, 雖然功能沒那麼多, 但是我比較喜歡用 C# 而不是 VB.NET. 後來用了這一陣子, 感覺還是沒有很好, 最主要的原因是, mojoPortal有以下幾個缺點:
    • 速度太慢
    • 無法多語言
    • Google Analytics 和 SiteMeter 等網站流量統計必須以修改 skin 來完成.
    DNN的功能很強, 比較之後還是將網站改為DNN. 目前也將增加英文網頁的內容, 並且把 RightPairs 和 DerivativePower 的網站整合進來. 歡迎大家光臨新的巨傑資訊網站.

    2009年4月9日 星期四

    使用正交迴歸在統計套利 Orthogonal Regression in Statistical Arbitrage

    一般我們使用的迴歸是以 X 為自變數 Y 為因變數的迴歸 Ordinary Linear Regression, 簡單的說 Y 的變動主要是由 X 所引起的. 在 Excel 裡面有兩個函數: SLOPE 和 INTERCEPT 是用來算這類迴歸線的斜率與截距. 所求得的迴歸線是每一個點與迴歸線在Y軸垂直方向的距離平方和最小. 但是在我們要用來分析配對交易時, 不能使用這條迴歸線, 必須要使用正交迴歸 Orthogonal Regression. 垂直迴歸線與每一個點的垂直距離最小.

    圖中藍色的垂直線就是一般線性迴歸到迴歸線的距離, 紅色的線是與正交迴歸線的垂直距離. 正交迴歸線表示 X Y 兩者都是自變數, 我們期望價格移動的路徑是紅色的線, 以垂直的方向朝著迴歸線移動.

    Excel 並沒有提供正交迴歸的函數, 不過參考一般統計的書可以很容易在Excel計算正交迴歸線和垂直距離. 我將 RightPairsCalc 更新為正交迴歸的版本, 並且做了一些小修正, 放在 RightPairs 下載區 的 RightPairsCalc-O-11.xls.

    2009年4月8日 星期三

    統計套利商品的選擇

    在執行統計套利時, 商品的選擇是策略成功的關鍵. 有些商品是不適合做統計套利的. 在此我提供幾個原則供大家參考:
    1. 相關性太低的商品: 相關性太低表示這兩種商品之間並不會維持一定的關係, 我們也無法預測他們之間的正常關係為何, 用來配對或是統計套利並不恰當.
    2. 相關性太高的商品: 相關性太高表示這兩種商品之間經常維持一定的關係, 即便有差價也不大, 我們很容易預測它們之間的正常關係但是可能獲利並不大, 甚至無法支付交易成本, 用來配對或是統計套利並不恰當.
    3. 近期沒有重大事件的商品: 假設用來配對的商品其中之中最近才公佈重大利多或利空消息, 或是併購或增資等等足以影響股價的事件. 這個時候兩種商品之間的正常關係是否仍與過去相同不得而知, 所以只要近期有重大事件的話就不應該用來做配對交易, 對於過去資料的分析也應以前一次重大事件之後開始做.
    可以選擇的範圍很廣, 包含股票, 期貨, 外匯等都可以用來做統計套利. 投資組合之間也可以做, 或是單一指數期貨對一個股票投資組合也可以. 用投資組合的好處是可以比較貼近想要的相關性, 但是每一組配對的金額會比較大.

    比較建議的方式是指數期貨對單一個股或投資組合, 可以用期貨來做空方, 不需要做融券放空, 當某些個股走勢劣於大盤時, 用買股票賣期貨; 當股票補漲時再回補.

    實作 用Excel計算兩檔商品的相關係數

    Excel是功能很強的計算工具, 對一般投資人而言, 通常資料的來源是比較大的問題. 有許多人是每天去下載交易所的資料存到Excel檔或是文字檔, 也有些資訊廠商有提供歷史資料下載. 在此我示範一下從 Yahoo!Finance 下載資料. 台灣的Yahoo!奇摩已經不提供歷史價格下載了, 美國的Yahoo仍有全球主要股市的歷史價格下載功能, 而且很方便.

    1. 進入Yahoo!Finance, http://finance.yahoo.com
    不 懂英文無所謂, 我們只需要幾個功能. 首先在標籤下方有 GET QUOTES 這個按鈕, 旁邊有一個框框可以輸入股票代碼. 由於Yahoo!Finance提供的是全球的股票, 所以要找台灣股票要在代碼後面加 .TW. 要找台積電則輸入 2330.TW 按 GET QUOTES

    2. 2330.TW的資料出現之後, 在左方功能中有 Historical Prices, 按這個連結會顯示 2330.TW的歷史資料.

    3. 預設的資料長度是5年, 每頁會顯示大約66天的資料. 將畫面移到最下方, 按一下 Download To Spreadsheet

    4. 選擇 開啟檔案, Excel會自動開啟顯示2330.TW的五年歷史資料. 我們需要的是G欄的 Adj. Close, 這表示有調整過的價格.

    5. 在 H欄輸入報酬率的公式. 報酬率的算法是 (當日-昨日)/昨日. 注意! 日期順序為新的在上. 例如H2的公式是 =(G2-G3)/G3

    6. 將公式複製到一年份, 大約是262筆資料

    7. 打開一份新的Excel檔案, 將剛剛計算的報酬率用 選擇性貼上/貼上值 貼到新的工作表

    8. 把原來的歷史價格Excel關閉. 重複一次從Yahoo!Fiance下載資料, 將 2303.TW 的報酬率計算出來, 跟2330.TW貼在一起.

    9. 利用Excel函數 CORREL 計算報酬率的相關係數.

    注意: 所計算出來的報酬率略有偏差, 依不同狀況仍需做適當調整. 例如某一檔股票暫停交易期間, 應將報酬率資料刪除再行計算相關性.

    2009年4月7日 星期二

    用線性迴歸來決定兩組商品的關係

    要用統計的方法來決定兩組商品價格的關係, 最簡單的方式就是用線性迴歸. 利用過去一段時間的歷史資料, 求出這兩組商品的迴歸線, 在這個線上的點, 我們就認為是這兩組商品的正常關係. 只要有偏離這個迴歸線, 我們就假設這只是短期的偏移, 在短時間內會回到迴歸線上.

    我製作了一個簡單的線性迴歸的計算工具, 功能包括
    1. 從Yahoo!Finance下載三個月的歷史資料
    2. 計算迴歸線
    3. 計算每一個資料點與迴歸線的距離, 以及距離標準差
    4. 計算目前市價的距離標準差
    直接在藍色區域輸入商品的代碼, 黃色區域可以自行連結即時資訊源. 在右方的 XY 圖顯示每一個資料點的位置和迴歸線. 目前的市價則以粉紅色的點表示.
    這個檔案可以在 RightPairs 下載區 免費下載, 檔名開頭是 RightPairsCalc-R.

    在這裡使用的是Y為因變數的簡單線性迴歸, 但實際操作時不應該用這個迴歸線, 這個工具僅供參考, 不建議用來實際操作.

    2009年4月6日 星期一

    價差交易, 配對交易與統計套利 Pair Trading and Statistical Arbitrage

    套利 arbitrage 是一種很特殊的交易策略, 假設 A 商品在甲市場賣10元, 在乙市場賣5元, 這個時候我們可以在甲市場用10元賣出這個商品, 同時在乙市場用5元把商品買進來. 當交易完成之後, 我們手上並沒有任何 A 商品的存貨, 但是平空多出了 5 元獲利. 這種無風險的交易策略, 稱為套利.

    現實生活中, 套利是很難有機會存在的. 即使有套利機會存在, 持續的時間和可以交易的量也不會太多. 假設上述的例子存在, 而且只有你一個人發現套利機會, 當在甲市場賣出乙市場買入時, 甲市場裡的A商品價格會下跌, 而乙市場會上漲, 過不久就會把兩個市場的價差拉近而沒有套利的機會.

    即使兩個市場仍有價差存在, 如果交易的成本比價差還大, 那也是沒有套利機會. 假設把 A 商品從乙市場運到甲市場需要運輸成本6元, 那麼從乙市場買進再送到甲市場賣出的總成本需要11元, 低於甲市場的市價, 這樣子套利仍無法成立. 證券和金融商品的交易成本主要是手續費和稅.

    另外也有多種商品組合的套利. 例如相同期貨不同到期日之間的套利, 以及買權/賣權/現貨的套利組合. 越是不成熟的市場會有越多套利機會, 反之越成熟交易量越大的市場即不容易有套利機會.

    套利交易並非不可能存在. 要在現實生活中擁有套利機會, 通常要從幾個方向著手:
    1. 交易成本要比別人低
    2. 套利機會搜尋要比別人廣
    3. 執行速度要比別人快
    如果系統夠快, 成本夠低, 套利並非不可能. 但畢竟是有一定的難度, 所以類似套利的價差交易經常也是很有效的交易策略, 不過這些應該不能稱之為套利, 因為套利的定義應該是完全無風險的交易, 而價差交易並非無風險, 只能算是有買保險的交易策略, 或是稱為 covered trading.

    簡單的 covered trading 只包含兩個商品, 將兩個商品視為相同的產品, 當兩個商品的價值一個偏高, 一個偏低時, 執行買低賣高的進場交易; 等到價格回復為正常關係時, 再反向出場. 這種交易又稱為配對交易 pair trading. 複雜的配對交易可以是兩個投資組合, 每個投資組合都包含一個以上的商品.

    配對交易並不是使用同一商品一買一賣, 所以要執行配對交易時, 要先決定什麼是兩個商品的正常關係. 許多人因為沒有適當的工具, 通常都把兩個商品用一個比例來表示正常關係, 例如台積電是聯電的幾倍, 或是台指期是摩台指期的幾倍等等, 這些都不是很正確的做法. 比較好的做法是用統計的方式求得一個精確的數字, 進出場的時間點也是用統計方法把偏離正常關係的量找出來, 當偏離正常關係大於一定程度時, 我們就可以假設這個價格關係會回到我們所計算的正常關係, 依這個假設所進行的交利就稱為統計套利 Statistical Arbitrage.

    2009年4月3日 星期五

    沒有穩賺不賠的交易策略, 只有不賠大錢的風險管理

    常常聽到有人說: 我這個策略穩賺的, 或是說: 我的勝率有 80%. 也常常有人問我: 你寫了這麼多策略的程式, 怎麼不自己操作?

    沒錯, 我寫了很多交易策略的程式, 但我從不自己投資. 我的投資大部份都是郵票和古地圖等收藏品. 主要是興趣, 行情上上下下的投資遊戲就引不起我的興趣. 我以前的主管也會問我要不要當交易員掛個quota, 但我就是沒興趣.

    交易策略會不會賺錢呢? 可能會賺錢, 可能會虧錢. 如果能夠保證一個策略的勝率有51%, 期望值真的大於一, 那我真的願意用所有家當去執行這個策略. 問題是: 沒有人能保證穩賺不賠. 如果有人告訴我他的策略真的穩賺, 那我會告訴他: 好好的賺, 不要告訴別人. 就好像有人告訴你樂透明牌說這一期一定中, 那也是請他自己去簽就好了, 不要拿出來賣.

    有沒有穩賺不賠的交易策略? 的確是有, 叫做套利. 但現實環境套利的機會很少, 改天有機會再談.

    我們到底在忙什麼呢? 到底這麼多人參與這些金錢遊戲為的是什麼? 為的是的確有可能會賺錢. 但是真正賺錢的人比較少, 虧錢的人比較多. 賺錢的人不一定是策略好, 可能是運氣好. 就像是股神巴菲特, 大家都覺得他很神, 他的話都奉為圭皋. 我倒是不這麼認為. 比爾蓋茲錢賺最多, 他的想法做法也不見得都是對的. 全世界幾十億人之中, 一定會有一個人是賺最多的人, 而那個人就被稱為股神. 最近巴菲特的波克夏海瑟威表現不如理想, 又有人開始在檢討, 其實本來就有賺有賠. 套句周星馳的對白: 其實根本就沒有股神, 每個人也都是股神.

    那 麼普通人和股神都沒有什麼差別嗎? 當然有差別, 只不過一個人再怎麼神, 也沒辦法保證不會賠錢. 有些人可能真的眼光很精準, 但總有看錯的時候. 如果在投資之前沒有想到可能的虧損, 到了真的看錯行情時就會措手不及. 所以任何投資都要考量到可能的風險. 也要做好風險管理. 風險管理並不能保證穩賺不賠, 只是能讓投資人不會賠大錢.

    要做風險管理是需要成本, 也就是說原本你可以賺一萬, 因為做風險管理, 實際獲利可能只剩九千. 風險管理最大的好處是可以將風險控制在一定的範圍, 讓虧損不會無限制的擴大, 只要能夠控制風險, 就可以在市場上長長久久, 尋找獲利的契機. 如果不能控制風襝, 一波大行情下來可能就出場再見了. 連歐美這些大的金融機構都無法承受而倒閉, 在做任何投資之前要先做好風險管理才是.

    2009年4月2日 星期四

    金融商品的流動性

    流動性 (Liquidity) 是所有交易策略都要考慮的重點. 流動性在總體經濟有它的定義, 在此我們只提投資相關的意義. 流動性是指當你持有這個商品時, 把這個商品變成另一種商品的能力. 流動性最好的商品就是現金或是等同現金的存款, 台支本票等. 其他非現金的投資商品的流動性會比現金差一點, 比方說股票, 當你持有股票時, 可能需要等個一兩天才可以變成現金. 所以流動性有時候也稱為變現性變現力.

    金融商品的流動性除了變現力之外, 還有市場深度的另一層涵義. 市場深度 (market depth)是指造成市場價格移動所需要的下單量. 假設有一檔股票買賣價是 50/51, 掛在目前價格的買賣單量是 10/5, 就表示當你下50元賣單11張時, 價格就會向下移動, 而下買單51時, 價格就會向上移動. 通常考量市場深度時會使用不只一個買賣價和量, 可能會看三個以上不同的價格. 成交量和買賣價差都是市場深度的指標, 當一項商品參與的人少, 或是流通在外的籌碼不足, 都會造成流動性不足的問題.

    設計交易策略時一定要考慮商品的流動性問題. 一個進出很頻繁的策略需要流動性高的商品, 才不會讓買賣價差侵蝕獲利, 反之可以利用流動性低的商品來設計相對靜止的策略. 流動性高的商品包括定存, 股票, 期貨, 債券等等在金融機構交易的商品, 流動性低的包括結構型商品, 連動債, 保險, 房地產, 藝術品, 收藏品等等. 流動性差的商品並非不能投資, 通常流動性較差的商品會有所謂的流動性溢酬(liquidity premium), 報酬率會比相對流動性高的商品來得好.

    這些商品都可以用投資組合 (Portfolio)的角度來管理, 好的投資組合通常都會包含多種不同的投資策略, 也同時包含流動性高和流動性低的商品, 經由多樣化的投資分散風險.

    2009年4月1日 星期三

    交易策略歷史模擬/回溯測試所使用的資料

    在前文所提到歷史模擬對任何投資策略都是重要的分析步驟. 錯誤的分析就會導致錯誤的結果和錯誤的決策. 歷史模擬所使用的資料可以分為幾種:

    依資料時間點來分:
    1. 每日收盤價 Day End/Closing: 每日收盤價是最容易取得的資訊, 幾乎所有集中交易的金融商品的收盤價都是可以免費下載過去一段時間的歷史資料. 但是利用收盤價模擬的問題很大, 大部份的商品收盤價都是受到某種程度的人為操弄, 無法反應出實際的價格, 更不要說當多檔商品加入到一個策略時, 商品間的價格關係其實並不準確. 如果在系統支援可能的情況下, 應該避免用每日收盤價來模擬.
    2. 日內定時資料 Intraday Bar/Candle: 將盤中交易資訊定時擷取下來做為模擬的資料, 利如每一分鐘或每五分鐘的最後一筆價格. 這類的資料沒有收盤價格扭曲的問題, 但是要取得過去長時間的資料並不容易, 模擬也需要比較長的時間.
    3. 每筆成交/報價資料 Tick: 如果能使用每筆交易或報價的資料來做模擬是最好的, 不過實務上有其困難. 要保存長時間的每筆交易記錄並不容易, 通常都需要向資料供應商購買. Tick 資料有另外一個好處是可以有買賣價甚至買賣量的資訊可以使用.
    依模擬時間區間來分
    1. 一段固定時間: 只取一段時間的資料來做模擬, 例如過去三年的收盤價或過去一個月的每五分鐘價格. 這會造成最佳結果的謬誤. 因為所模擬的區間可能是用來做為參數調整的來源, 當參數調整過後當然會獲得最佳的報酬率. 如果模擬只做一段時間, 通常結果是有問題的.
    2. 多段不固定時間: 如果不需要訓練參數, 可以採用多段不同的區間來評估績效. 不同時間區間的績效一定會不同, 可以參考策略平均的持有期間或是隨機決定持有期間來評估.
    3. 策略訓練+實證: 訓練其實是策略做參數調整的過程, 有些策略的參數是長時間不變的, 有些參數是需要動態改變. 訓練的過程依策略的不同需要有不同的考量, 訓練過後參數決定了, 就需要再取一段歷史資料來做實證, 實證的結果才能做為策略是否採用的依據. 實證也可能需要做很多次, 每一次評估績效的區間也不同, 針對一周/兩周/一個月/兩個月/六個月等不同時間區間來做績效的評估.

    2009年3月31日 星期二

    交易系統設計與風險管理

    五月份將在證基會講 交易系統設計與風險管理 的課程.
    這門課主要是希望能夠給對於交易系統前中台設計有興趣的朋友一個完整的概念.
    包括系統設計的效率, 彈性, 以及風險管理等議題做個說明.

    陸續會將講義的內容在我的網誌上發表.

    了解交易策略是否能夠獲利

    每個人都可以發揮自己的創意開發多種不同的策略, 但是策略會不會賺錢說實在的只有天知道, 除非真的下場操作, 否則光有策略沒有執行是看不出效果的.

    要知道策略有沒有用, 可以採用以下幾種方式:

    1. 實際操作: 直接提槍上陣廝殺, 不過這種方法風險很大, 如果策略不賺錢的話成本太高了.
    2. 虛擬操作: 類似實際操作但不真實下單, 記錄進出場價格及損益. 這種方式不會造成巨額的損失, 缺點是需要花時間. 任何策略都需要經過長時間的測試才能確認它的獲利能力, 一般來說都需要經過幾次大的波段才能驗證成效, 可能是幾個月的時間.
    3. 歷史模擬: 最好的方式應該就是歷史模擬了, 又稱為回溯測試. 用過去的歷史價格來模擬策略的可行性, 就好像策略從過去的時間點開始執行一樣. 歷史模擬有很多種方式, 下一篇文章會詳細討論歷史模擬的方法.

    C# 連結 DDE 資訊源

    雖然 DDE (Dynamic Data Exchange) 已經是過時的技術, 但不可否認它仍然是跨程式間溝通最簡便的方法. 即使 .NET 早就不支援 DDE 了, 還是有很多程式提供 DDE 的連線方式, 尤其是財務投資領域的應用, 大多數的看盤軟體都還支援 DDE.

    要用 .NET 程式來做 DDE 的連結, 最簡單的方法是用 NDde這個程式庫. NDde雖然有點複雜, 但比起微軟提供的 DDEML (DDE Management Library) 要好用十倍以上. 以下簡單介紹 使用NDde連接 DDE 資訊源的方法.

    首先宣告 DdeClient, 使用 Connect() 方法連線, 並指定 client.Advise 事件處理程式

    NDde.Client.DdeClient client = new NDde.Client.DdeClient(service, topic);
    client.Connect();
    client.Advise += new EventHandler(client_Advise);

    其中的 service 和 topic 看使用的資訊源而定. 如果你不確定 service 和 topic 是什麼, 只要能在 Excel 用 DDE 連結, 在 Excel 的公式中就是分三個部份 =serivce|topic!item.

    client_Advise 方法就是用來接收動態更新的事件. 當 DDE 資訊源有更新資料時, client_Advise 就會立刻被執行. 更新的資料就以 string 儲存在參數 e.Item 之中

    void client_Advise(object sender, NDde.Client.DdeAdviseEventArgs e)
    {
    string item = e.Item;
    // 更新資料後的處理
    }


    只要這兩個簡單的步驟就可以開始動態連結資訊源了, 夠簡單了吧?

    2009年3月30日 星期一

    為什麼要用程式交易?

    最近很流行程式交易, 很多人也在詢問有關如何寫交易策略的程式. 被問的次數多到都想要整理一份 FAQ 了.
    可怕的是大多數人不太了解程式交易的風險所在, 以及與一般看盤之間的差別. 在此簡單說明一下.

    為什麼要用程式交易?

    • 速度: 電腦的好處是反應很快, 只要將既定的規則寫成程式, 一遇到訊號出現就可以馬上反應甚至自動下單. 從訊號出現到實際下單的時間差可能因市場價格波動而成交到不符合策略的價格. 不過有些人認為這並不是重點, 因為長期而言這類的價差平均值應該為零.
    • 複雜度: 如果你覺得速度不是重點, 那麼複雜的策略就是非得要用程式交易的主要原因. 假設有一項策略需要判斷100個規則, 每一個規則都需要加減乘除10次以上, 那麼這就不是人力可以完成的事. 非得要有電腦程式的輔助不可.
    • 一致性: 大多數人都至少有自己的一套策略, 但有些人下單時三心二意經常變來變去. 程式交易適合穩定一致且追求長時間平均績效的策略. 使用程式交易意味著交易決策不能再憑感覺, 而是真的要有一套明確的邏輯存在.
    • 交易量大: 大量的交易也是需要用程式來管理下單, 以免影響市場行情. 當你管理一筆大額的資金且需要經常進出時, 人工分批下單容易導致錯誤, 需要用程式來控管分批下單.