[備註] 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

閱讀全文 »

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

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

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

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

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

Excel 實現選擇權報價

初步實現的功能包括有:

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

[金融投機] 多個交易策略部位控管思考

目的:藉由多個交易策略,分散投機的風險;而對同一金融商品,亦有加碼的效用;且經由諸多論述證明,多種交易策略的發展,長期的投資獲利,會來得比單一交易方式好上很多。

先把問題簡化一下...,想像交易人有兩個帳戶:A帳戶發展 30分K 策略;B帳戶發展5分K策略。

  1. 如果在 8120點 30分K有訊號做多,所以A帳戶這裡新增一筆多單。
  2. 如果順利,盤勢現在來到 8280點,短線上判斷會拉回,所以準備做短單空,B帳戶會新增一筆空單。
  3. 請注意,此時的部位為兩口,雖然一筆為多單,一筆為空單,但位於不同帳號。
  4. 當拉回至 8250點,判斷已達滿足點,空單回補,B帳戶沒有單。
  5. A帳號多單一直存在。

但帳戶只有一個的時候,上述情境當短線下了空單後,就會沖銷掉原來的多單,而變得在當下沒有部位。這樣的情形可能會影響到投機者的交易心理,他可能發展了長、短單的兩個交易策略,而當長單「站穩」立足點後,即會成為母單。有了母單的部位,心裡會覺得比較踏實,無論短單如何進出,只要趨勢沒有改變下,獲利的部位就一直存在著。

閱讀全文 »

軟體思維顧問

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

Personal