2010年2月23日 星期二

測試 Wealth-Lab 5 的 DDE Streaming Provider

Wealth-Lab 5 竟然沒有可以使用 DDE 的 Streaming Data Provider, 這讓我有點驚訝這個 community 的支援竟然這麼薄弱...

為了要讓 Wealth-Lab 能夠使用 DDE 的即時資訊源, 我試著找了一些資料想要自己寫一個. Wealth-Lab 5 的 API 沒有任何說明 (聽說這個月底會有正式的文件), 做起來有點累. 參考官網的 Community.Providers 和 WealthLab.Extension.Samples 兩個範例之後, 其實製作 Extension 很簡單, 用 Visual Studio 直接做成類別庫就可以了. 這也是我欣賞 WL5 的原因. 從完全沒接觸 Wealth-Lab Extension 到做完這個測試花了我大概六個小時的時間, WL5還算是簡單易懂.

我用我自己製作的 Virtual Quote Server 來當 DDE 資訊源. 這個小程式可以設定 DDE 的 application 和 topic, 並且提供兩個 item 資料的不定時更新.

在 Visual Studio 建立一個 DDEStreamingDataProvider 專案, 把 NDde 也包含進來.

將 DDEStreamingDataProvider 的基底類別設為 StreamingDataProvider. 在 Initialize 裡把 service 和 topic 指定為常數, 另外還需要設定 client.Advise 事件處理.

這個抽象類別有幾個抽象方法需要定義, 重點是 Subscribe 和 Unsubscribe, 要將 NDdeClient 的訂閱功能寫進來.

再寫  client_Advise, 當 NDde 有資料更新時會執行這段程式. 在這個簡單的測試裡, Symbol 就是 Item, 而且只有回應一個值, 我把這個值指定到 Quote 所有的欄位. 再將 Quote 類別的 q 用 UpdateQuote 傳送給 WL5.

再依範例將 Extension 的資訊寫進去


建置之後將 DLL 檔案放到 WL5 的資料夾. 重新啟動後, Extension Manager 就會出現剛剛所寫的 DDE Streaming Provider.

把  Preference 的 Streaming Data 設定給新的資訊源

最後將 AA 和 IBM 兩個股票代碼輸入到 Quote 視窗, 就可以看到 WL5 和 Virtual Quote Server 的資料會同步變動.

關於 Wealth-Lab 與 C# 程式交易

有別於其他使用簡單 script 的平台, Wealth-Lab 5 利用與 C# 的結合, 可以做出非常複雜的策略和功能, 適合有程式設計經驗或是非常專業的交易員使用. 有了 Wealth-Lab 5, 程式交易所能達到的功能只限於運算能力和想像力了!

未來將利用這個網誌分享 Wealth-Lab 5 和 C# 的程式設計經驗.