keymaker 發表於 13-9-13 22:19

NDDE 問題與討論

(前言)自從 Microsoft 老大哥悄悄地將許多控制項(control)內建的 DDE 功能去除之後..
程式高手們不是潛心研究 DDE 通訊協定將DDE server, DDE client 撰寫出來..
不然就是依靠 briangideon 大大辛苦撰寫的 NDDE 來做 DDE 做資料嵌入
briangideon 大大的作品請看 http://ndde.codeplex.com

(言歸正傳) 最近發現有的 DDE client 接券商很正常..有的卻是必須透過 Excel 來接 DDE client..

不知有無高手可以解惑?! {:5_227:}


JamesLo 發表於 13-9-24 21:14

最近剛好也在用NDde, 提供2個範例給第一次使用的人:
A, 讀取券商的stock quote
NDde程式只需要改3個地方, 就可以通了, 底下以"袁大"為例

DdeClient client= new DdeClient("YES", "DQ");
client.Connect();
client.Request("$TWT.Price", 60000);

B, 讀取Excel的欄位:
DdeClient client= new DdeClient("EXCEL", "file.xls");
client.Connect();
client.Request("R1C1", 60000);

keymaker 發表於 13-9-15 11:44

等半年看看... 希望高手還在 coco-in..

ambercrystal 發表於 13-9-15 12:22

keymaker 發表於 13-9-15 11:44 static/image/common/back.gif
等半年看看... 希望高手還在 coco-in..

我不是高手, 但看到站上這麼多人用 DDE 卻沒人回答, 看版大又自己推了一次, 分享我看到的. 有些看盤軟體如凱X大三元在開DDE就會自動把Excel開起來, 有的不會, 因為Excel本身也是DDE client, 有沒有開其實對DDE傳送真的不重要. 當看盤軟體設定成為DDE Server需要關心的是這個Server有沒有自我設限為保護自己效能而每隔一秒才外送有價格改變的報價 (至少我知道免費的MT4上的DDE server功能就沒作這個限制), 你可以開一早上的台指期來看看作個log, 台指期報價變動是最小間隔是250ms(如果變動時,這是交易所的系統設置), 如果用API抓價格作log, 在快市時應該可以看到小於一秒的價格跳動log. 對用 DDE 來作股票沒啥差, 用 DDE 來作台指期反應就會慢一點, 雖然對絕大部份的策略這點慢是沒有差.DDE server 與 client 間的傳輸是叫自己系統內 Win32 API, 個人認為這裡的 delay 可以不計..NET程式調用免費 NDDE library 使用上有個地方需要注意, DDE 三個欄位 service/topic/item, 要讀取不同 item 是叫 NDDE 的 StartAdvise(), 要切換不同 item, 最好先 StopAdvise() 再去叫新的 item, 不然程式很容易當掉, 退出時要記得 connect object 作 dispose() 動作. 不過很久沒碰 DDE 了, 如果寫程式建議用 API 作價格讀取策略, 尤其是期貨的策略, 除非你的策略是建在 Excel+VBA.

dragic 發表於 13-9-15 15:21



很簡單 你可以自己寫DDE SERVER 去觀察交易軟體的DDE CLIENT是怎樣運作
然後再寫DDE CLIENT 去觀察券商軟體的DDE SERVER
這樣應該就知道問題出在哪
不用等高手來幫你解答 你自己就可以是高手
台指期報價變動是最小間隔是250ms成交價應該是 不管報價有沒有變 有成交就會更新報價 不然我們要怎樣接TICK資料呢
可以看期交所的台指期貨每筆成交資料 開盤1秒內就有可能成交數十筆
美國指數期貨 隨現貨開盤時的成交速度 1秒內甚至是上百筆

keymaker 發表於 13-9-15 17:39

ambercrystal 與 dragic
非常感謝你們的回答..發帖的人不能評分..應該各給你們 +2
你們所說的我都有作品..
問題還是在有的作品不須透過 DDE..
有的作品必須透過 Excel 來取得 DDE
必須透過 Excel 的作品得到的訊息含意大概是 unable to connect DDE server
個人認為測試方向或許可以放在不同 Windows 版本, 不同 VS 版本這個方向..
為求集思廣益..所以才開啓這樣的主題..



titl 發表於 13-9-24 11:55

本帖最後由 titl 於 13-9-24 11:58 編輯

我的nb,在windows最近更新後,Excel的dde,變的無法使用!正在頭痛中!{:4_93:}
開啟檔案時,出現下圖:


按是是後出現下圖:

keymaker 發表於 13-9-24 18:00

本帖最後由 keymaker 於 13-9-24 18:09 編輯

titl 遇到的問題我也遇到過..

我的現象是必須使用期貨商軟體打開的 Excel 才能連結 DDE..

自己儲存的 .xls 或 .xlsx 重新打開之後就會連不上 CATDDE..

如果有機會問期貨商的資訊人員或許有解 (但是一般不給問)..

之前我寫一個 DDE client 去測得到的結果是 unable to connect DDE server..

如果任何人有問到又告訴我原因..或許我能改寫出一個可用的 DDE client

再者..由 titl 的陳述中..說是 nb 不行用..那桌機可以用嗎? 作業系統是否相同?
Windows 更新..指的是什麼? xp --> win7/win8 嗎?

JamesLo 發表於 13-9-24 21:05

keymaker大: 最近發現有的 DDE client 接券商很正常..有的卻是必須透過 Excel 來接 DDE client..

本人使用的經驗是: 要開Excel, 才能成功
當然.xls檔案內, 一定要有request DDE Server的公式 (ex, =YES|DQ!'$TWT.Price'), 如果沒有, 開Excel也沒用
(本人使用的Excel, 完全是自己儲存的 .xls)


titl大: 在windows最近更新後,Excel的dde,變的無法使用
你的問題可能是, CatDDE.dll無法用於windows 7或8, google一下"catdde.exe", 可以找找有無新版本可用, 例如:


至於為何windows 7會出現問題, 因為:
Windows 7 is blocking DDE messages, and thus DDE Servers written with NDDE don't work properly with windows 7

keymaker 發表於 13-9-25 12:16

JamesLo 大所言..

Windows 7 is blocking DDE messages 應該是一個可行的思考方向..

須要再花時間找一下資料..

frantz 發表於 16-6-3 20:25

JamesLo 發表於 13-9-24 21:14
最近剛好也在用NDde, 提供2個範例給第一次使用的人:
A, 讀取券商的stock quote
NDde程式只需要改3個地方,...

謝謝jameslo的分享最近正在研究及用c#開發。

不過有想請問一下
如果一次要抓五百檔dde的數據
這樣子可行嗎可一秒更新五百檔的數據嗎?

jinace 發表於 16-6-4 08:41

這我猜應該是DDE server寫法的問題

一般會把所有支援的DDE符號備妥 等待連線後 再確認符號是否有效

另一種是必須透過UI介面指名符號 才把符號放入server 否則任何符號都無效

與Excel應該無關

frantz 發表於 16-6-4 12:12

kuolung 發表於 16-6-3 22:49
依我的經驗值,一次抓 500檔股票,DDE 是可以的
我目前用 華南 E指發 經 TSTW 轉 1300檔股票給 TS , 感覺上 ...

小弟我目前是用C#直接寫
剛起步,很多還要在參考
之前參考了
http://www.kenming.idv.tw/c_dde_c_ua_pclm_client_c_cm_a_n_a_lao_cc
有下載此版主的源碼參考
研究了一下他是將數據全導入至datagridview執行
盤中是可以順利執行
但目前我想分成二大塊呈現報價
一是針對特別的一些報價寫在label上進行動態更新。==>目前呈現出來是靜態的。
二是導入至datagridview第一行後,在執行下,會自動從第二行起開始往下記錄。
目前還沒有一個明確的寫法出來。


frantz 發表於 16-6-4 12:15

jinace 發表於 16-6-4 08:41
這我猜應該是DDE server寫法的問題

一般會把所有支援的DDE符號備妥 等待連線後 再確認符號是否有效


我目前的架構上是想先從基本連線著手,確認能不能連上去

可以的話進一步針對各項item進行讀取。
而上述的動作前,我是打算把所有的item先寫入。

後續在各別針對行的讀取。

frantz 發表於 16-6-7 14:13

kuolung 發表於 16-6-5 08:49
這個 你只要好好研究一下 advise 的功能就能解決

謝謝kuolung大近日有在研究advise
參考源碼後,採用遞減方式一個個刪掉測試後,發現一個狀況。。。。
在client_Advise及onAdvise這裡面的寫法
採用相同的寫法
源碼中的datagridview可以更新變化
新增的datagridview及label1‧text仍是靜態。。。。
還在研究中。。。。。。

頁: [1] 2 3
查看完整版本: NDDE 問題與討論