MultiCharts.NET v12 安裝凱衛歷史行情資料庫的方法 (適用升級後的版本)

我原來從凱衛購買的 MultiCharts 是採用 EasyLanguage 的專業版本,後來又從 MultiCharts 原廠取得 MultiCharts.NET 版本。關於兩者版本的比較可參考官網-Compare Editions

我個人偏好使用 MultiCharts.NET 版本作圖表分析與歷史回測,因為我習慣於使用 C#.NET 撰寫指標等相關程式。至於國內加權指數、四大指數的歷史行情資料,可以從凱衛的下載安裝區下載,而且還會持續更新至近期行情,這點倒是相當不錯。

不過因為我已經把 MultiCharts.NET 升級到最新版本 (目前為 v12),而凱衛的歷史行情資料庫版本卻是 v9,版本可是相差甚遠!是無法直接採覆蓋方式安裝的。

資料庫 (Database) 從舊版要升級到新版本的過程一般成為「轉移 (Migration)」,而 MultiCharts 轉移的方法其實不困難,就是直接線上系統通知有新版本時點選安裝新版本,在升級安裝過程中就會自動完成轉移的步驟,而且不會漏失原來的內容,這點真的作得很好!

所以就是把 MultiCharts or MultiCharts.NET 先安裝 v9.0 版本,也就是要適用於目前凱衛所提供的版本,然後再安裝上述的歷史行情資料包。先確認安裝後透過 QuoteManager 可以看到已覆蓋的歷史行情資料,然後再執行升級的動作。升級後仍透過 QuoteManager 確認資料的一致性。

QuoteManager 確認已正確讀取歷史資料

閱讀全文 »

C# 實作共用變數 by Singleton – 以交易系統登入連線為例

問題

股票期貨交易系統的登入驗證連線,必須隨時保持連線狀態 (connection state),也就是必須設計為 Stateful (有狀態),並於盤中需隨時得知連線情形,若斷線則系統應該要能通知用戶做重新登入的動作。

如果有多個表單 (View) /多個類別需在執行期間 (run-time)可以察知共享登入的連線狀態,該如何實現?

解決方案

共用變數類別

最簡單直覺的方法,設計一個共用變數 (global variables)類別,並保存需要在多個應用程式/類別之間共享的狀態/值。

可以參考此篇的作法:Global variables class

閱讀全文 »

[備註] Visual Studio 2017 跑 x64 單元測試的設定

最近申請到「群益報價/下單 API」,也下載了 C#.NET 的範本,但卻是用 Visual Studio 2010 編譯的專案,花了一個多小時手動編輯 .csproj,總算可以在 Visual Studio 2017 開啟執行

不過範本寫得非常之亂,典型的全把所有邏輯寫在 Windows Form 類別。實在看不下去,準備把一些主要呼叫的 API (Login,下單,報價) 重整下,從 Windows Form 全抽離出來,並撰寫單元測試 (unit test) 方便測試。

群益API 是採以 COM 相對底層機制所撰寫的,使用前要先註冊該元件 (SKCOMLib)。我直接採用 x64 64位元的處理器架構,完全不考慮 32位元,還好群益都有提供。

程式撰寫挺簡單,但執行單元測試卻出了問題,只要將「目標平台 (target platform)」改為「x64」就會出現一些很怪的錯誤訊息。原來以為是呼叫 COM 出了問題,甚至打電話問了群益的資訊部人員,但他們竟然說沒聽過單元測試,程式沒有從 Form 開始就看不懂。挖哩,不過他們確信 COM 元件沒有問題,看來還是出在環境設定上。

查找解決文與 Try-Error 大半個下午,總算,就是只要在 Visual Studio 2017 選單「測試」→「測試設定」→「預設處理器架構」改為「X64」就 OK 啦!

Visual Studio 2017 跑 x64 單元測試的設定

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 交易系統架構整合設計

閱讀全文 »

購買 Multicharts 英文版終身授權&初次設定使用

其實去年底我就從國內代理商「凱衛資訊」,利用五週年慶時含一年的行情服務,購買的是英文版本終身 (lifetime)授權。整套買下來約3萬元,足足比平時期購買的價格便宜一倍。我買的是英文版本,想說未來很有可能操作國外金融商品,且所參考許多交易相關的文章都以原文為主,所以還是早些習慣原文詞彙術語比較好。

擱置了一年,直至這個月初才將之開通,且為了行情接收問題,還與凱衛資訊溝通許久。 (她們原認為限制購買後三個月內要開通,但這說明沒有列清楚。)

會購買 Multicharts 的主要原因是為了方便接收各類商品報價,包括國內期權/股票,甚至海外期貨商品的即時接收。它的 Quote Manager 作得相當不錯,許久以前就曾寫過一篇-[設定備忘] Import Ascii Data from QuoteManager,如何從文字檔接收歷史資料。而現在更是方便,凱衛資訊除了有提供即時行情接收服務外 (一年期約2萬),還有整理了10年期的國內商品歷史資料,下載回來直接覆蓋資料庫即可。

安裝完畢後 (我安裝 x64版本@Windows10),最好是把 OS 的 UAC 帳戶權限開到最低,免得時常蹦出對話框干擾。Multicharts 總共有五個模組-Main (Chart-Window)、Quote Manager、Portfolio、Power Language、3D Optimization Chart。
Multicharts Screenshots

閱讀全文 »

[交易系統] C#.NET 開發海外期貨部位策略管理系統

這是兩三個月前,某大戶所委託開發關於海外期貨的部位策略管理系統。先前有徵詢過該大戶的同意,得以分享該系統的功用與開發概要。

該大戶係以 MultiCharts 作為報價與策略設計的平台,然後再以自行開發輸出文字檔的 DLL 元件,並搭以自動下單系統,而構成全自動化的程式交易系統。

由於管理的海期商品多達上百種,且運作的帳戶亦多達數十個,資金操作已達一定的規模。有感於資金部位的風險管理有其必要,故把他關於資金部位的策略邏輯,並需要整合現在運作的自動下單,寫成一份需求委託文件,以及一些測試的案例與資料供開發上的參考。

我使用了 UML 元件圖 (Component Diagram),先大致表達出整個海期交易系統的架構 (architecture):

海期自動化交易系統架構圖

圖、海期自動化交易系統架構圖

原來的交易系統係以無窮迴圈的處理方式來持續輸出所監控商品的報價文字檔,使用相當簡單的程序以代表 Tick 的跳動;然後自動下單系統再去讀取所有商品文字檔 (仍以無窮迴圈方式),並判斷商品的部位數量有無變化情形,再決定是否傳送至券商的下單系統。

「海期部位策略管理系統」從功能區分大致上區分有三個模組:商品即時監控、專案帳戶資金管理、判斷帳戶所持有部位 (新增/輸出)的邏輯處理

圖、海期資金部位策略管理系統 by C#.NET

圖、海期資金部位策略管理系統 by C#.NET

閱讀全文 »

軟體思維顧問

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

Personal