聊聊 C# 實作 Excel 選擇權報價交易系統

前兩個月有位委託人希能協助在 Excel 實現台指期選擇權契約報價暨自動交易決策系統。他說原來已有透過一位獨立開發者利用 Excel VBA 撰寫,但無論如何都無法符合他的需求,甚至連正常執行顯示報價都有問題。

直覺聽來,我是不可能考慮使用 Excel VBA 來實作選擇權報價的,它需要動態處理即時資訊的更新太多也太過頻繁,且實現邏輯可能比想像得還複雜,要能動態處理運算並處理選擇權契約月份與履約價格,這非得使用 OOP 語言來實現會容易許多相對也比較有擴展的彈性。

原來是不打算接受這個委託的,因為要克服相關技術的難點預期應該不少。不過後來想想,反正早有計畫要利用 C#.NET 實現包括報價資料源的連接、當沖策略的設計、自動下單等功能,並直接以 Excel 當使用者介面 (GUI),可以直接利用其簡便的圖形報表呈現所需的結果。

由於幾乎是從無到有,且個人對即時性 (real-time)系統的設計實現並不熟悉,包括從研讀大量相關文件到寫碼實作,整整花了約有一個月 part-time 時間,總算能實現在 Excel 畫面上呈現選擇權履約價的報價表。

Excel 實現選擇權報價

初步實現的功能包括有:

  • 自動判斷每個月星期三的結算日,由此可決定起始的契約月份。
  • 可動態選擇選擇權契約月份。
  • 可任意排序選擇權項目。
  • 可自動判斷與更新台指期近月份報價暨昨日收盤價。
  • 閱讀全文 »

離譜的臭蟲-Chrom 與 MS Office DDE 間的衝突

最近又想要把金融報價看盤軟件,透過 DDE 方式,傳給 Excel 2010 接收即時資料,並利用 VBA 作些較簡單的處理,以及圖形的展現。

結果從報價軟件直接複製 DDE 連線字串後,它會自動啟動 Excel。但就在此時,Excel 程式就當掉了,並出現 "沒有回應" 的字樣,必須透過工作管理員硬砍掉該程序才行,屢試不爽。

這個問題困擾許久,原以為是 Excel 選項內設定的問題。包括「信任中心」、「DDE 啟動」等選項設定,都一一試過卻仍一樣的現象,就只差在要不要考慮重新安裝 Office。

透過 Google 爬文查了好多篇文章,幾乎就繞在上述設定的問題 (無效,沒有解決)。就在快放棄之餘,不經意看到一篇文章,有國外網友分享說,只要關掉 Google Chrome 瀏覽器,就可以正常啟動 DDE 連結。

有這麼簡單? 結果還真的,一關掉 Chrome,再試著從報價軟體複製 DDE 連線字串並啟動 Excel,馬上就啟動成功,相當順暢! 然後我再加上 "Chrome Excel DDE Hang" 等關鍵字,證實就是有這個相當離譜的現象。底下就節錄兩篇討論串:
 o Chrome - MS Office DDE conflict
 o Excel 2010 and TOS DDE Problems

所以,到底有沒有根本性的解決方案? 沒有,目前唯一的方法 (截至 2011/12/05)就是:要啟動 DDE 連線字串前,請先把 Google Chrome 瀏覽器 (v10~v15 都一樣)給關掉。

真的很離譜的臭蟲,打開 IE 或 Firefox 倒是不會有這樣的問題發生,可以與 Office DDE 和平相處。

到底是 Chrome 還是 Office DDE 的問題呢? 我也不想追究了。只是我都已經習慣使用 Chrome 作為個人關於電子郵件/RSS Reader,還有工作事項管理等平台,若是看盤期間都不能打開那可怎麼辦?

我的作業系統環境是 Windows 7 x64,現在的折衷解決方式就是,打開 Windows XP Mode (虛擬機器),將 Google Chrome 瀏覽器複製進去並啟動執行。因為 "看來" 是兩個不同的作業系統環境,所以總算兩者不會衝突了。

這樣的怪現象難得一見,特此記錄下來。

{點子} Universal DDE Server 商品化?

為了方便建立自己的交易分析模型,相關於 Excel, Tradestation, Amibroker 等交易軟件透過 DDE 連結國內盤商的 DDE Server(同時也是看盤軟件),個人算是蠻熟悉的了,自己也寫了許多範例。 況且,我也算是對股票、期貨等金融商品的買賣規則與術語都有一定程度的了解,算是半個 "領域專家 (Domain Expert)" 了 (可不是投機專家< 🙁 )。 乾脆,就委請我們內部團隊開發一個小型的交易商品,就暫名為 "Uni-Data Transfer Server"?

(*** 這些想法目前僅限於個人的紙上紀錄,算是先作個點子註記備忘 ***)

定位與功能:

  • 這算是一種 "中繼 (intermediate)" 類型的應用伺服器。 以連接國內盤商所提供的報價資料,並可以 "餵給" 包括 Excel、交易分析軟體等可以處理交易資料的統計與圖形展現。
  • 可以連接國內主要盤商的報價資料。 初期以最普遍的 DDE 為主,慢慢地要能支援較特別的傳輸協定,例如 Office Quote 等 COM-based 的傳輸元件。
  • 前端連結的資料分析軟體,若為 DDE 傳輸,則幾乎所有交易分析軟件均支援;而為了能更讓資料傳輸更形穩定,打算採 "Plugin" 的方式,直接支援包括 Amibroker, Tradestation 等所自己提供的傳輸協定。
  • 提供 "容錯 (fault-tolerance)" 的功能,可以動態切換至備援的報價資料源。
  • 簡單的示意呈現就是:
    1. Yeswin → DDE 傳輸→ Uni-Data Server → DDE 傳輸 → Excel
    2. 台証OfficeQuote → COM 傳輸→ Uni-Data Server → Data Adapter(By C++) → Amibroker
  • 除了資料的傳遞處理外,也期能提供 "應用" 層面的擴展介面。 可以以 "Plugin" 的方式,讓用戶自行擴展,或由開發廠商以附加套件的方式另行販售。
    例如,可以提供即時分析期貨的買/賣價量的對比數據。單一功能,即可製作成附加套件。
  • 總之,目的就是提供給 "散戶" 以低廉的成本,將手中已有的報價資料源 (From 看盤軟件),透過該商品,轉遞至自行可以撰寫交易分析與統計的應用軟件上,讓其交易策略更能自行具擴展的彈性。
  • 自動下單? 這應該是需要的機制,而前提則是盤商需提供自動下單的呼叫介面。 考慮作成 "Plugin",提供如達成從 AmiBroker 自動下單至各盤商的交易伺服器。

販售與服務方式:

  • 採網路線上訂購。 刷卡或 ATM 轉帳,確認訂購即以 Email 寄送 License Key 與 下載網址。
  • 購買軟件含一年期免費更新。 一年後則付較低廉的升級費用即可持續更新。
  • 使用相關問題與售後服務則以 Email 作技術支援。

[Tradestation 8.x] DDE 即時連結大盤江波買賣資訊

構成「江波圖」大盤的買賣資訊,必要的欄位資料有 委買/委賣/成交 張數/筆數 共六個欄位。

Tradestation 8.x 是否可以透過 DDE 連結至 報價伺服器取得江波的大盤買賣資訊? 答案是 Yes!

Tradestation 8.x/Multicharts 的外部資料源管理 QuoteManager,透過 DDE 可以指定對應的欄位共有 Trade/Ask/Bid Price/Volume 共六個欄位。 雖然一般來說,匯入的資料為 價與量,但是可以先不用管這些對應關係,直接就是把江波的六個欄位任意對應至 QuoteManager 的六個欄位內。

雖然爾後透過 Tradestation "Chart Analysis" 觀看 價格/成交量 的二維圖形會亂七八糟,但沒有關係,可以把開啟的 Main Chart 圖表隱藏 (hide)起來,然後再透過自行撰寫的指標 (Indicator) ,運算處理這些欄位的關聯性,即可產出想要的圖形。

這裡的 DDE 資料源係以 Yeswin 為操作示範。 (永豐 eLeader 似乎沒有提供 江波的 DDE 連結)

先確實瞭解 Yeswin 的江波大盤買賣 DDE 連結字串。 這個可以透過觀察 Yeswin 提供的 「YesDDE 使用範例」Excel 檔案,即可得知,參考如下圖。
Yeswin 大盤買賣 DDE 公式@Excel

然後再打開 QuoteManager (可以參考原來寫的一篇:「QuoteManager DDE 設定 for YesWIN」), Clone 複製 DDE Data Source,DataSource Name 設定為 YesWin DDE2, 縮寫設為 YS2。 (可任意指定,不過爾後在 Tradestaion 的 Symbol 設定會用到。)

閱讀全文 »

[TradeStation 8.x] 大盤與台指期即時 1分K 價差柱量圖

一大早就試著透過 QuoteManager 的 DDE Adapter 連接至 YesWin,再打開 Tradestation 接收即時 (real-time) 的 DDE 報價 from 元大 YesWin。 因為是第一次設定接收,所以尚未到 AM 8:45 開盤時 (接收台指期近月份),Chart 視窗是顯示 receiving Data...,會以為好像當掉一般。

但一開盤時,Chart 視窗馬上出現 Tick 跳動畫面了。 此時才能再新增 Symbol 在同一 Chart 視窗內,參考: [TradeStation 8.x] 實現大盤與台指期價差柱量圖

從早盤到下午收盤,整個接收狀況相當穩定正常,而且可以在盤中隨時切換 Tick, 1分, 3分, 5分 至 各時間格局,參考如下圖,這是今日 (20090903) 台指期疊大盤的 1分K 價差柱量圖,藉此可觀察正或逆價差時的放大與收斂情形。

對於運作的情況相當滿意!

20090903 大盤_台指期 1分K價差柱狀圖

QuoteManager DDE 設定 for YesWIN

MultiCharts → QuoteManager (Tradestation 8.x → OwnData2, QuoteManager=OwnData2)
→ DDE Real-time DataSource → DDE 看盤程式 (YesWin, eLeader ...)

在 QuoteManager [Tools] Menu → [Data Sources...] → 選擇 Universal DDE,按下 [Clone] (複製),DataSource Name 設定為 YesWin DDE, 縮寫設為 YES。 (縮寫比較重要,原因在於爾後透過 MultiCharts 取得資料源時,需打上 縮寫:Symbol_name,例如 YES:TWF1)

設定 DDE 資料源。 這裡係連接 YesWin 的相關參數設定,每一個 DDE 報價資料源基本上只要設定一條 DataSource 即可,再以 * 萬用字元為變數,替代 Symbol Name。參考下圖。
QuoteManager 的 DDE 設定 for YesWin

設定完成後,可按下最下面 [Ttest] 按鈕,並輸入欲測試的 Symbol,觀察視窗是否有出現數據 (一般來說,還是需要等報價 Server 有 Tick 跳動時測試才準)。

新增 Symbol Name,可參考: [設定備忘] Import Ascii Data from QuoteManager

這裡要注意的是,由於 DDE 資料源的設定視窗是以 * 取代了 Symbol Name,所以新增 Symbol 時,Name 欄位要輸入 YesWin 的 Symbol 代號名稱。 例如 台灣加權指數的代號為 $TWT;台指期近月份的代號為 TXF1。 關於 YesWin 的 DDE 設定注意事項,可參考看盤軟體 HELP 選單內的 YESDDE 使用說明。

這裡方便的就是,如果想要觀察 個股或期貨金融商品等,只要 QuoteManager 主視窗新增該 Symbol,例如 2330 (台積電), EXF1 (電指期) 等。 並將 DataSource 指定原來所設定的 DataSource (如 YesWin) 即可。

軟體思維顧問

專職軟體輔導與教育訓練的獨立顧問。輔導企業資訊單位如何有效組織系統開發與維護;輔導開發人員達成有效的專業分工。傳授如何把軟體作軟 (Keeping Software Soft)的技能,得以提昇系統的彈性/延展,並進而創造系統的再利用價值。

Personal