*** 現因個人已轉至 Multicharts 交易系統,小型程式交易委製已停止 ***

※ 參考委託案例
 o 聊聊 C# 實作 Excel 選擇權報價交易系統
 o [交易系統] C#.NET 開發海外期貨部位策略管理系統

由於常接收到諸多欲作程式化交易的讀者來電或來信詢問,原來不便接受個人化的委製開發,不過經與所屬顧問團隊負責人討論之後,同意可將視其為小型化的專案 (project),以服務有實際需求的個人用戶。

開發週期係以「週」為開發單位,並視所需完成的功能來報價計費。最短一週、一般這類小型化專案不致超過一個月。(當然仍需視系統的複雜度來決定,若為企業層級的系統,則另行專案處理。)

接收即時性的報價源與圖表分析的處理,會以 Excel 作為主要的界面,畢竟這仍是最普及、且易於與各券商的報價系統連結的應用系統。

其實利用 Excel 非作為程式化交易 (即自動化的下單),而是善用 Excel 的特長:統計分析,然後再作為決策判斷的交易系統。

所以要打造 Excel 成為個人化的即時性決策系統,會需要完成三大部分:即時報價源、分時資料紀錄、圖表分析

一、即時報價源:

一般 Excel 會透過 DDE or RTD 連結券商所提供的免費報價系統,僅需透過連結字串與 Excel 儲存格的對應,即可以取得即時性的報價資料,參考如下圖。
報價資料即時接收

少數用戶可能會透過更穩定的專線或特定的傳輸協定,來連結券商的報價系統。此時就必須參考券商所提供的傳輸協定,來撰寫連結資料的 Data Adapter。


二、分時資料紀錄:
最常見的實作方式係透過定時處理 (如設定每5分鐘紀錄資料乙次);也有當偵測特定的儲存格變化而啟動事件處理 (event-handling)時,再行紀錄與處理資料。(總的來說,比較會建議透過定時處理為佳)

分時資料的紀錄,一般較普遍的方式是記錄在 Excel 工作表內的儲存格。每一列即時記錄著分時資料 (如每5分鐘寫入一列資料)。更進階的做法是寫入到資料庫系統,如 Access or SqLite/MySQL 等,如此是可以儲存長期性的歷史資料,但存取資料並作為運算處理的實作細節上則較複雜。
加權&期指分時資料紀錄

三、圖表分析:
利用 Excel 呈現統計分析的圖表必然需要是動態、即時性的,也就是如果每五分鐘紀錄分時資料乙次,則同時會反映到圖表上,如此才能作為即時性的決策分析系統。

參考下圖,即是統計台指期的委買賣口數差,每五分鐘記錄乙次,再配合台指期價格的走勢圖,來觀察兩者的變形相對關係。
台指期委買賣口數差圖

圖表的應用可以很廣泛,例如加權的江波圖、電子/金融/其它 相對強弱走勢圖、台指期/摩台價差圖 ...等。

上述三大部分的實作有 95% 以上均以 VBA 程式來實作 (僅有少數如儲存格的屬性會透過屬性視窗設定),甚至是圖表物件的產生、Name Range 物件 ...等,而盡量不是透過屬性視窗的設定,如此才能得以有更具彈性的客製化。(除非有更特殊化的需求,希以 .NET 如 C# 開發,則另行討論。)

當然,所有的 VBA 程式碼均會轉給用戶,每一個程序以及重要的指令陳述,均會使用註解說明,如此用戶也可以在維護與擴展功能上會更形容易。

在程式寫碼的技巧上,個人花費了許多心思在變動性設計的議題上。例如當以加權大盤為一組表格,若表格的最左上欄位置沒有更動,僅其內如最高價/收盤價欄位移動位置,也就是座標值變動了,但在 VBA 程式碼內完全不用作任何變動。因為所有的欄位均是參考各自所屬表格的最左上的相對位置,而非個別一個一個以絕對座標來作運算的。如要移動整個表格位置,則也只需要在程式碼上變更左上儲存格座標位置即可,所以在程式碼的可維護性可有相當的彈性度。
Excel VBA 程式

如需利用 Excel 作為個人化的即時決策分析系統,希望由本單位接受委製開發的讀者,煩請先線上填寫「客戶聯繫表單」,本單位會即刻以電郵或電話連繫用戶實際的功能需求,並估算開發時間進行報價。關於線上填寫的資訊可參考如下圖,可先讓委託方了解用戶大概的需求。
客戶委製開發聯繫單

若完成委製開發,交付給客戶的會是完整的 Excel 數據、圖表等,以及所有的 VBA 程式碼。維護期會視專案的規模與複雜度來決定,原則上從 2週至2個月 左右。維護與實際連線測試,主要會以 TeamViewer 遠端遙控用戶端電腦,並完成相關的設定。