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帳號多單一直存在。

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

繼續閱讀 »

[備忘] Excel VBA-創建 Dynamic Named Range

Dynamic Named Range, 動態具名範圍,可說是 Excel 對於動態資料範圍的掌控,最便利的一種技巧。所謂的動態資料範圍,也就是資料會因外部事件的觸發而導致資料的擴展 (expand)或縮減 (contract)。而隨著動態資料的變動與運算處理,有相當的需求會反映在即時性的圖表中,透過圖形的呈現,來觀察資料的變化情形。

由此推論,即時性的圖表需要能掌控動態資料的變動;而動態資料變動最佳的掌控方式,則是透過「Dynamic Named Range」,也就是創建一個具名的變數,以參考(refer)所對應的資料範圍。

絕大部分均是透過工具對話框式的設定,可參考先前撰寫的這一篇:[備忘] 創建 Excel 動態圖表的步驟。但這樣彈性度仍嫌不足,最好就是能在 VBA 中創建並可以應該參考該動態具名範圍。

參考下圖,這是關於期指與加權的分時紀錄。欄位表頭 (header)紀錄係從 C1~N1,而資料則是會隨著時間,例如設定每五分鐘,會動態寫入一列分時資料。
加權&期指分時資料紀錄

利用 VBA 實現創建對應上述儲存格範圍的 dynamic named range 可參考如下的程序:

' Make a dynamic named range.
Sub MakeNamedRange()
    '如果不存在該名稱,會發生錯誤,然後再去新增該名稱
    On Error GoTo Err1:
    With ThisWorkbook.Names("分時紀錄表")
    End With
Exit Sub
 
Err1:
    If Err.Number = 1004 Then
        '建立包含所有分時資料欄位的 dynamic ramed range.
        ThisWorkbook.Names.Add _
            name:="分時紀錄表", _
            RefersTo:="=OFFSET(分時資訊!$C$1,0,0,COUNTA(分時資訊!$C:$C),COUNTA(分時資訊!$C1:$N1))", _
            Visible:=True
    End If
    Resume Next
End Sub

其中「分時資訊」為工作表 (worksheet)名稱。

繼續閱讀 »

第 1 頁 / 共 242 頁123456789101112...203040...最後一頁 »