C#與NDde-一週白工甘苦記
最近有個老客戶給了我完全沒碰過,但一直很感興趣的案子,就是關於股票期貨走勢預測的軟體。聽完他對這案子的想法,覺得應該不會太難做,就放正事不幹先衝下去玩這有趣的東西(一方面想說這以後應該挺有搞頭的)…
他只玩台指期(近十年),八成都是當日沖(挺猛的),所以即時資訊源是必需的…
Day 1
剛開始我也和每個人一樣摸不著頭緒,但沒關係照例去搜搜google,嗯,很多券商都有提供免費DDE(Dynamic Data Exchange)的即時股市資訊,就是要用這個啦…
最初在開發上有兩個選擇,一是用Excel與VBA,一是用C#與NDde;心想,難得有這機會,就玩玩C#(C Sharp)吧,都沒碰過,不也剛好是個機會^^
Day 2
當然,有長時間累積的程式撰寫經驗,大部份的程式語言也不過就是開發工具及語法上的差異…找到官方網站提供的Visual C#入門手冊,內容詳盡如同得到大補帖,很快就上手…
感謝有前人在種樹(參閱此文談談 C#.NET 連結 DDE Server 的設計觀 ),拿台証超級大三元測一下連線及Item取值沒有問題,就去編寫其它邏輯運算式和使用者介面…
Day 5
三天後,差不多寫完七七八八,還加上可以選擇其它券商做備援連線(元大yeswin、永豐e-leader),便想來測看看趨勢預測邏輯有沒有問題,這時苦難降臨…
接收台指期即時資訊跑了一陣子就不動?沒關係,程式寫這麼久,bug怎麼可能不會排除,就抽絲撥繭一步步往上查…啊咧,怎麼只剩下最單純的一個連線一個item都會跑到掛點?
Day 7
由於台指期近日都是數萬口的量,一秒產生七、八次的advise是常有的事,這時就會發現它停掉不動T_T
連兩日與google苦戰,甚至改寫NDde的原始碼,依然無法抵抗一個事實:NDde的設計有效能瓶頸!
若針對特定券商去改寫NDde,讓它變為專屬,效能應該可以改善不少,但,也沒那興致…還是回頭改用Excel+VBA去玩DDE吧!
註1:這裡的C#資源(VB/ VBA/ C#/ Java/ C++ 語言學習筆記 美妙人生)也很不錯,簡單易懂還附範例
註2:DDE本身會有lost資訊的問題,看來後續還是苦難呀
Hi, 我使用 NDde 同時連結 50檔權值股票,還加上即時運算買/賣價量,每秒起碼有數十個 Tick 資料,連接上都沒有問題喔。
說它有效能瓶頸是我太快下定論了…
我並沒有深入去研究問題原因…
也許超級大三元的DDE機制也有問題不一定…
我後來其實還有嚐試過連結四五檔股票(不是期貨),每檔股票每日成交量大概都在1000~4000多張,並沒有遇到問題,很順的從早上跑到下午…
所以,我也摸不找頭緒,為什麼連期貨會有問題,即便每日成交量近七八萬口,但DDE本身傳輸的資料有時會lost,1000口的量,一分鐘運氣好頂多抓到400口,然後一分鐘又不是每秒都有tick,為什麼一秒七八個tick就會掛停…???
很感謝您提供的資訊,從您的網站中得到很多…^^
在您的文章討論中,您也有提到NDde可能潛在的問題…
http://www.kenming.idv.tw/about-excel-dde-tick-change-event-process
從NDde的原碼來看,它tick機制是用泛型Dictionary去儲存adviseloop的資料,而且是以item當做key值,這種情況下同一個item如果反覆快速的add與remove資料,應該會有問題吧…
我在想同時多當股票item產生tick,會對adviseloop的key進行操作上的置換,所以就不會有我上述問題產生…
不過,這都是未經證實的推論,也不大想再花時間去找NDde的問題了T_T
Hi, 上述我自己提的問題是我的盲點,早已解決了。 !^^
我在另外一篇有留言,就是請記得: “Keep DDe Connection instances”。
DDE 的 Connection instances 一定要與 Caller object 的生命週期是一樣的。
很簡單的技術盲點,當時是我錯怪 NDDe 了。 !^^
順帶提一下,我使用其他從國外購買的交易分析軟體,以 DDe 連結大三元與 easywin (兩者系統核心是一模一樣的),都會有嚴重的資料 lost 問題。
我不知道是大三元還是那個交易軟件的問題。 不過,我比較頃向可能是 大三元 DDe Server 的效能穩定問題。
您其它有關dde的文章如下:
http://www.kenming.idv.tw/el_el_c_net_e_pcm_dde_server
http://www.kenming.idv.tw/c_dde_c_ua_pclm_client_c_cm_a_n_a_lao_cc
我沒有找到關於Keep DDe Connection instances的描述,煩請再次指導,謝謝
我平時開兩台老PC(P4 2.4G-768M/AMD 1.8G-1G, XP)分別以台證超級大三元與永豐金eLeader作 DDE server 供 Excel VBA作台指期記錄分析(15秒取樣一次)。台證的系統偶爾會停頓一段時間,這不僅是DDE的問題,其他原生報價資料也都停了,而連線顯示沒有問題。eLeader斷線會有警示,其他狀況還算穩定。以我的分析需求而言,DDE雖然無法捕捉到每一段期間的極端值,但這樣的誤差是可以接受的。我沒使用nDDE,不知道他所引發的額外問題。
http://global-power-t.myweb.hinet.net/fg-s.jpg