manmanlai 發表於 18-12-19 09:12

kuolung 發表於 18-12-18 22:55
因為我是用 vc++ 寫的 不是用 excel 收 所以沒在查 sub..count值
另 我的 rtd 版本是最新的 20181116 訂閱...

請問一下, RTD不是只能拿 excel來當server? 可以自己寫程式來當server?
哪裡可以找到相關資料? 謝謝

manmanlai 發表於 18-12-20 12:23

kuolung 發表於 18-12-19 18:11
RTD 是 COM 元件 只要能符合規範 你要自己寫 server 還是 client 都可以
至於相關資料 我也是用 google 大 ...

原來如此, 我再來找一下資料, 看看要如何收到元大RTD的資料

arthurch 發表於 18-12-20 13:04

能否請教收得到rtd的各位。
東工交易所的紅豆、玉米 、黃豆我收不到,我代碼用猜的。
但都是錯,可是我其它商品都收得到。

能請教上面這三個商品的代碼嗎

heavenweaver 發表於 18-12-21 00:06

kuolung 發表於 18-12-19 01:38
我沒載點
你安裝完 rtd 桌面上 會有一個 rtd 的 icon
沒事就執行一下 就會自動更新為最新版


謝謝,我點桌面 yeswin 報價交易元件RTD icon都沒有辦法更新,打客服問原因,她說問題出在有沒有安裝 .Net FrameWork 4。
原來是我一直連錯,連結到未安裝Net FrameWork的網址,所以怎麼安裝或點選更新,都還在2018.0518。
對於已安裝 .Net FrameWork 4的用戶,RTD安裝的下載點為:



元大
yeswin 報價交易元件






名稱:yeswin 報價交易元件

版本:4.2018.1116.1600

發行者:元大


需要下列必要條件:

[*]Windows Installer 3.1
[*]Microsoft .NET Framework 4 (x86 和 x64)

如果已經安裝這些元件,您可以立即 啟動 應用程式。否則,請按下面的按鈕,安裝必要條件並執行應用程式。






安裝




heavenweaver 發表於 19-1-2 13:58

本帖最後由 heavenweaver 於 19-1-2 14:11 編輯

kuolung 發表於 18-12-19 18:11
RTD 是 COM 元件 只要能符合規範 你要自己寫 server 還是 client 都可以
至於相關資料 我也是用 google 大 ...
VC++似乎在ATL COM開發上,比C#擁有太多資源可以參考。
我完全不懂VC++,花了10天左右,終於將C# 程式改成 C++ /CLI 。
似乎也是循您以前走過的歷程,您的經驗提供了一些很好的思考線索。
由於VC++沒有經驗,使得我在STA及Type Convert/Casting真是吃盡苦頭。
特別是在Using nampespace std及Using nampespace System交互使用下,還真是一場混戰。

heavenweaver 發表於 19-1-3 17:18

kuolung 發表於 19-1-3 07:42
你真是神人
也可能是我笨我用了 3個月的時間 才寫出來
不過那是 2013 年的事了


小弟不是神人啦,如果我直接向您請教,才有可能升到神人助手的等級。{:4_90:}
因為您說Google大神都查的到,所以小弟只好先求助於Google大神。
C#基本上就是Managed Code,建立在CLI /CLR的整合環境下。如果想要跳脫Managed Code的圈子,C++是最合適的選項。
因為元大RTD是用C#寫的,所以我才會從C#寫Client端程式。
與您有相同的狀況,就是想把資料源餵進C++寫的AmiBroker Plugin,所以又改寫為C++的版本,但對於怎麼寫入到AmiBroker Plugin中還沒理出頭緒?
Client端程式雖然是C++的版本,但卻有點C#的風格,Managed & unManaged mixed coding,這都拜Google大神所賜,程式有點像拼花。
過去沒有動機想寫程式,或者是說看不懂也不會寫,一直都在惡性循環中蹉跎歲月。直到前一陣子才鼓起勇氣練習寫程式,還在學習中。我現在是用VS2015,很難跳脫Managed Code的誘惑,所以我準備再花點時間用改寫成VC++6.0或8.0的版本。在微軟VS2005_CPP_en-us.pdf中有一篇Walkthrough:Creating a COM Server Using a Text Editor,將Client程式寫的超簡潔,我看完Walkthrough後,實際以VC++6.0&8.0 Mixed版 Go Through一次,過程所產生的.idl、tlh、tli等內容,都是值得玩味,相當有意思。雖然我曾經用VC++6.0的Wizzard玩過,但總是稀哩呼魯的,不明就裡。

heavenweaver 發表於 19-1-4 01:30

kuolung 發表於 19-1-3 23:00
不用換回 vc++ 6.0 or 8.0我現在用 vs 2017 版 也全部是 unmanaged code
我是完全不會 oo 的 所以寫出來 ...

謝謝您的指導,但人通常會先入為主,一旦用慣VS2015 C++ 14, 就會融入其中,特別是對我這種新手而言。
我用VC++ 6.0 or 8.0只是基於好玩而已,先試看看有幾種啟動RTD連線的方式(Coding)。


zaqimon 發表於 19-1-5 11:14

本帖最後由 zaqimon 於 19-1-5 12:23 編輯

我只在Excel用過RTD(元大)跟DDE(精誠GPM系統)
還不清楚怎麼樣在Excel以外的程式接入RTD報價
我的感覺RTD報價速度比DDE快一些尤其是海期更明顯
例如公布原油庫存之類的快市當下RTD很順暢但DDE卻可能會lag好幾秒

但我覺得RTD似乎不夠穩定(也許是我個人的問題)
我測試過周一至周五開著Excel報價
只有開DDE報價時可以撐過五天沒問題
但開RTD報價卻很容易在一兩天後Excel就當掉重開停在RTD登入畫面
可能必須每天重新登入RTD會比較保險

而且RTD的台指期夜盤被切割成後面加"PM"的另一個商品代碼
沒有辦法從早盤到夜盤使用同一個代碼
還需要特別處理比較麻煩

RTD的TY US報價也是要特別處理因為並非小數報價
例如US的RTD報價146.25其實是146 25/32
還好用Excel公式就能直接轉成小數報價
=INT(RTD("money.excel", , "US1903.CME", "Price"))+100*(RTD("money.excel", , "US1903.CME", "Price")-INT(RTD("money.excel", , "US1903.CME", "Price")))/32
我的Excel報價類似這樣
台指期代碼我有自己改過比較好看
正確RTD代碼應該是TXFA9
可以發現台指期報價還停留在上午盤收盤
因為夜盤的台指期代碼應該是TXFA9PM


ram 發表於 19-1-5 13:09

zaqimon 發表於 19-1-5 11:14
我只在Excel用過RTD(元大)跟DDE(精誠GPM系統)
還不清楚怎麼樣在Excel以外的程式接入RTD報價
我的感覺RTD報 ...

我覺得DDE效能差好像是有部分被誤解{:4_144:}

就是像這篇#20樓中之前試AB時前發現到的
http://www.coco-in.net/thread-145893-2-1.html

感覺RTD的作法大概就是每個商品為一個topic

但是當前DDE的作法常常把一堆商品放同一個topic(sheet)導致訊息量倍增

用港股的模擬資訊放很多商品在一個sheet時AB訂閱的負載會比較重

如果改用分開的方式一個sheet只放一個商品報價,AB訂閱的負載狀況就比較輕

海期的訊息量本來就多,都用一個sheet放多個商品的狀況當然就更容易發生問題

heavenweaver 發表於 19-1-5 18:44

本帖最後由 heavenweaver 於 19-1-5 19:00 編輯

kuolung 發表於 19-1-5 09:52
會開啟這個程式,到可以用還有一段距離,能正常收到 rtd event 才算完成

還有這個 RTD 我一直沒有找到自動 ...
您是過來人,很清楚其中的細節。這次我用VC++6.0就是不想用比較高階版本所提供的函式及工具。
例如我在C#及VS2015呼叫IRDTServer.ServerStart, 它會回應 1 ,代表成功, 其他值代表失敗。
但是在VC++6.0呼叫ServerStart時,成功啟動它會回應 HRESULT == S_OK。其他的代碼為失敗,可以參考HRESULT Code。
真正的細工,在如何撰寫ConnectData及RefreshData 的 I/O,型態轉換錯誤,程式一定當掉,特別是RefreshData的SAFEARRAY兩個元素值的型態,要debug才會看到它要的型態是什麼。
    virtual HRESULT __stdcall ConnectData (
      long TopicID,
      SAFEARRAY * * Strings,,
      VARIANT_BOOL * GetNewValues,
      VARIANT * pRetVal ) = 0;
    virtual HRESULT __stdcall RefreshData (
      long * TopicCount,
      SAFEARRAY * * pRetVal ) = 0;
在VS2015 C++我可以採用 marshal_as 將 System::String轉換為std::string ,但在VC++6.0實在想不出甚麼方法?{:4_155:}

在自動登入方面,我也找不到可以輸入密碼及按確定的Control Class及Instance。如果您能提示一點,真是感激不盡了。

yue790513 發表於 19-1-10 13:22

新手
我這幾月用下來的感想,RTD與DDE的差異
RTD是針對多筆股票的監控,要在1秒以上取才不會當掉
DDE可針對少筆的期貨的監控,1分鐘我跑了5千多LOOP都不會當

期貨等1秒會掉tick,DDE比較好用

heavenweaver 發表於 19-1-18 11:05

先感謝kuolung大大的指導,讓我用VC++6.0開拓unmanaged code的視野。沒有kuolung大大像燈塔般的指引,還真的持續不下去。

新的程式讓我發現以前未曾注意的異常狀況,也就是當我每一秒或每二秒RefreshData時,
不時發生只有topicID, 卻沒有 eventData(retVal)的配對輸出的現象。
這種狀況是否就是所謂的掉 Tick?

以下是我的測試數據:只顯示異常部分
PropertyArray Size = 262
**************ConnectData **************
ConnectData == S_OK
RetVal = 10:23:18
ConnectData == S_OK
RetVal = 00:00:00
ConnectData == S_OK
RetVal = 2018.1116
ConnectData == S_OK
RetVal = 1 / 2200 / 4
下略
**************RefreshData **************
SafeArray dimensions =2
1 Dim lBound =0 , uBound = 1
2 Dim lBound =0 , uBound = 3
正常 topicId與retVal成對輸出,略
**************RefreshData **************
SafeArray dimensions =2
1 Dim lBound =0 , uBound = 1
2 Dim lBound =0 , uBound = 3
正常 topicId與retVal成對輸出,略
**************RefreshData **************
SafeArray dimensions =2
1 Dim lBound =0 , uBound = 1
2 Dim lBound =0 , uBound = 261
正常 topicId與retVal成對輸出,略
1112   , topicId = 7
1314   , topicId = 8
1516   , topicId = 9
正常 topicId與retVal成對輸出,略
2728   , topicId = 15
2930   , topicId = 16
3132   , topicId = 17
3334   , topicId = 18
3536   , topicId = 19
正常 topicId與retVal成對輸出,略
4142   , topicId = 22
4344   , topicId = 23
4546   , topicId = 24
4748   , topicId = 25
4950   , topicId = 26
正常 topicId與retVal成對輸出,略
5556   , topicId = 29
5758   , topicId = 30
5960   , topicId = 31
正常 topicId與retVal成對輸出,略
6970   , topicId = 36
7172   , topicId = 37
7374   , topicId = 38
7576   , topicId = 39
7778   , topicId = 40
資料太多,以下省略。

heavenweaver 發表於 19-1-18 21:28

kuolung 發表於 19-1-18 13:19
是您很棒,我也沒有說什麼,您就可以自己寫出程式來了,

不過,看了您這一篇回文,才發現一個問題,


您的成功案例,對於後續想要自行開發RTD Client的人,具有積極的鼓舞及精神燈塔的象徵。簡單的說:您是我的偶像!{:4_113:}
我不懂 VC++的 Event Trigger 要如何實現,基本上我還在 Console Mode 學習中,對於 Win App 或 MFC,還只是生字而已。
另外我想請問:
1、RTD Server 若有資料更新,它會用Callback.UpdateNotify主動通知Client端來作 RefreshData, 自己寫的Client端如何接收 UpdateNotify 的通知?
2、上述的UpdateNotify是針對某一個 topicID,還是整批的 topicCount?
麻煩您,謝謝!

heavenweaver 發表於 19-1-20 10:52

kuolung 發表於 19-1-19 07:55
先回答你第二個問題

是整批的 是收到 topicCount

我猜第一個也不是取得 CallBack.UpdateNotify的Hwnd Handler,{:4_210:}
因為元大RTD並沒有實作IRTDUpdateEvent,{:4_122:}
而是另有旁蹊小徑。

真是佩服到極點了!
{:4_113:}

seaba8 發表於 19-1-22 16:57

上述的方法再測試,只是感覺有點複雜
頁: 1 [2] 3
查看完整版本: 元大RTD報價元件