Multicharts & 部位策略管理系統架構整合規劃

Multicharts 這套交易系統,作為商品即時行情接收 (Quote Manager)、圖表分析與展現 (Charts Window)、指標撰寫 (Power Language)與績效回測 (Portfolio back testing)等功能,都具有相當不錯的穩定/效能與易用性。但唯獨關於部位的資金策略管理 (Positive Feedback Investment Strategies Management),卻是相當地陽春,使得投資者最好能自行撰寫相關的資金策略部位管理,再與 Multicharts 上述功能模組整合,並實作各券商的自動下單交易協定 (protocol),如此才比較能建構出較完整全方位的交易系統。

Multicharts 並沒有直接提供外部系統整合的 APIs (Application Programming Interfaces),這也列為他們家的商業機密吧。若要原廠提供則還需要另行購買,而且據說還相當不便宜。MC 現在唯一能對一般開發者所提供整合的管道是透過 EasyLanguage Extension Software Development Kit (SDK),也就是在 Power Language Editor 上,透過該 SDK 來呼叫外部 Windows DLL 檔 (C/C++, Delphi, VB ...等實作),以達成與外部系統整合的手段。

目前看到 (似乎也是唯一?)的作法就是撰寫產出文字檔的 DLL,然後再由交易者自行開發的系統以無窮迴圈的方式一直讀取位於所指定目錄內所產出的各商品檔案。

這也算是一種權衡可解決現狀的妥協方案吧。但我實在很難接受這樣的整合方式,產出文字檔然後以無窮迴圈 (或定時)讀取以處理之...。其實我已有見識過某些大戶是以這樣的方式來處理,而且資金規模還頗為龐大。但如果有機會能找出更佳穩定/效能的技術整合方案,我還是把產出文字檔這種方式列為是最不得已的選擇吧。

這兩天從一些相關文件與國內外論壇爬文研究的基本心得,先規劃出 MC 與 客製化交易系統 (主要針對資金部位策略管理模組)的整合架構圖。(其實這應該稱之為實體的分層結構設計規劃)
Multicharts & Custom 交易系統架構整合設計

客製化 (customize)的交易系統,最起碼會分有三個元件 (component):買賣訊號接收Adapter、資金部位策略管理、自動下單Adapter。

資金部位策略管理是客製化交易系統的核心元件,它需要實作關於資金/部位/風險等相關應用領域的邏輯,但卻非與 MC 直接連結。

自動下單元件Adapter 是需要連至各券商的下單交易系統,所以該模組需宣告定義一個一致性 (universal)的下單介面 (interface),然後所撰寫連結至所指定券商的下單具體Adapter類別 (concrete adapter),需實作 (realize)該介面的規格。

至於買賣訊號Adapter,就是接收來自於 MC 所撰寫 Power Language 並呼叫該 DLL (也就是買賣訊號Adapter)的買賣訊號 (主要接收內容包括商品、部位、買/賣、DataTime等資訊)。

上述是架構規劃的巨觀設計思維,至於實作技術的主要難度,當然首要克服的就是買賣訊號Adapter 如何實作並編譯成可被部署 (deploy)的 DLL 元件,並供 MC 來呼叫。

原來是希望能撰寫成 C#.NET 的語法,這樣個人相對熟悉許多。但現實的無奈就是,MC 所能呼叫的 DLL 必須是屬於「UnManaged Code」,也就是傳統的 COM 元件;若要與 C#.NET 元件連結,則還需要再設計 Wrapper 物件,且相關的程序相當繁瑣。 (可參考-Interoperability Overview (C# Programming Guide) )

反正關於技術整合議題,先給一個基本結論:要實作 COM 元件 (且不須註冊 registry)的 DLL,並且未來可以與由 C#.NET 所實作的資金部位策略管理系統,也就是要能有效地連結 UnManaged & Managed Code (.NET CLR, Common Language Runtime),唯一最佳的實作機制就是 Visual C++。

引用 MSDN-使用 C++ Interop 內的一段說明:
「和其他的 .NET 語言不同,Visual C++ 具有互通性 (Interoperability) 支援,允許 Managed 和 Unmanaged 程式碼存在於相同的應用程式,甚至是同一個檔案中 (須使用 managed、unmanaged Pragma)。 這樣 Visual C++ 程式開發人員就可以將 .NET 功能整合至現有的 Visual C++ 應用程式,不會影響到此應用程式的其他部分。 」

所以不得已,未來幾日也只好勉為其難好好研讀下 Visual C++ 語法,然後試著寫一個小的 Prototype,先能撰寫成供 MC 呼叫的 Unmanaged DLL Code,再透過 Wrapper 呼叫 C#.NET (Managed Code)的應用程式。這個技術管道一旦打通,就比較有機會先實現一個全方位 (包括策略設計、買賣訊號觸發、部位策略管理、自動下單等)的自動化模擬交易系統了。