kc1230 發表於 13-2-28 21:25

哪位高手能幫我看下群益 api 抓tick 是哪裡有錯

小弟初來乍到, 一個簡單的期貨報價搞不定, SKQuoteLib_RequestTicks函數一直回傳SK_SUBJECT_TICK_STOCK_NOT_FOUND, 不知道是不是我搞錯期貨的代號
難道期貨近月代號不是 TX00 ?
其中 CapitalApi.h 包裝了部分 api 中的同名函數, Notify.h則包含了要註冊的函數
代碼如下:
    #include <iostream>
    #include "CapitalApi.h"
    #include "Notify.h"
    using namespace std;

    int main()
    {
    cout << "Hello world!" << endl;
    char* username = (char*)"X123456789"; //假的帳號
    char* password = (char*)"987654321"; //假的密碼
    short page = -1;
    char* sym = "TX00";
   
InitSKQuoteLib();

    cout << "SKQuoteLib_Initialize:" << SKQuoteLib_Initialize(username, password) << endl;

    cout << "SKQuoteLib_AttachTicksCallBack" << SKQuoteLib_AttachTicksCallBack((long)&OnNotifyTicks) << endl;
   
cout << "SKQuoteLib_AttachFutureTradeInfoCallBack" << SKQuoteLib_AttachFutureTradeInfoCallBack((long)&OnNotifyFutureTradeInfo) << endl;

    cout << "SKQuoteLib_EnterMonitor():" << SKQuoteLib_EnterMonitor() << endl;

    Sleep(2000);
    cout << "SKQuoteLib_RequestTicks():" << SKQuoteLib_RequestTicks(&page, sym) << endl;


    return 0;
    }


仔仔 發表於 13-2-28 22:36

看你的code, coding 的功力, 應是佷淺, 群益它有
附samples , 你先搞清楚使那些code運作的方式再寫會較易成功

kc1230 發表於 13-2-28 23:04

仔仔 發表於 13-2-28 22:36 static/image/common/back.gif
看你的code, coding 的功力, 應是佷淺, 群益它有
附samples , 你先搞清楚使那些code運作的方式再寫會較易成 ...

我有照著一個 C 語言範例 run 一遍
調用函數的順序沒錯
就最後一個 RequestTick 函式不成功

kc1230 發表於 13-2-28 23:09

sunsamy 發表於 13-2-28 22:42 static/image/common/back.gif
1. page為什麼是-1?試看看1, 0

2.sym試試看"TX00"、"TX01"、"TX02"、"TX03"


那 RequestTick 函數在群益策略報價王 api 第 15 頁,只說參考 RequestStocks 第 13 頁說明

第 13 頁有如下的說明 : 當 psPageNo=-1 時帶入,函式庫會指定一個新的編號,並回傳給呼叫端。
所以帶進 -1 應該是正確的
有依照您的建議試了可能的組合,傳回的錯誤一樣,全倒
SK_SUBJECT_TICK_STOCK_NOT_FOUND

如果真跟他回傳的錯誤碼所說的,代號有誤的話
同樣的代號可以請求到 KLine ,但用來請求 Tick 就不行,也太莫名其妙了

cococharles 發表於 13-3-1 00:36

pageNo 用 1,2,3... 試試看呢?
我是在程式中自己計數 page 從 1 開始, 超過100檔股票就換下一個 page
我沒有用 page=-1, 因為我的記憶中這個用法不可行, 不知道是群益手冊錯了, 或者我太笨

kc1230 發表於 13-3-1 01:17

cococharles 發表於 13-3-1 00:36 static/image/common/back.gif
pageNo 用 1,2,3... 試試看呢?
我是在程式中自己計數 page 從 1 開始, 超過100檔股票就換下一個 page
我沒 ...

說明手冊上說傳參考帶入-1,他就會自動帶入新的數值並傳回,那是正確的用法
並也有一試過pageNo 用 1,2,3帶入 錯誤代碼都是 212
據群益的論壇連Delphi範例程式都有貌似一樣的問題
沒權限發連結..
很傻眼, 懷疑那 TCHAR 型別有問題

cococharles 發表於 13-3-1 07:50

我想起我當初嘗試錯誤的經驗了
Initialize 和 SKQuoteLib_RequestTicks 必須在不同的 thread 中執行
你看群益提供的範例, 會先按一個 button 執行 initialize, 然後再按一個 button 訂閱 ticks
你用 Sleep(2000), 但是那個 thread 並沒有結束回到 OS.
我的做法是用 timer:
    UINT SetTimer(UINT nIDEvent, UINT nElapse,
                void (CALLBACK* lpfnTimer)(HWND, UINT, UINT, DWORD));
Initialize 用一個 thread
RequestTicks 用一個 thread

pazival01 發表於 13-3-1 09:51

我是用C#的,我稍為用印象上的說明一下

其實你在login之後, 可以檢查SKQuoteLib_AttchServerTimeCallBack 是不是有server時間回覆.

--
1.我自己用C#寫的code, 用button 執行login之後, 我有檢查server時間,

我發現到當我自己按button去 login 的, 都會先有server時間, 然後SKQuoteLib_RequestTicks會正常.

--
2.我自己用Thread, timer在8點半 自動開啟這個login, C#會沒有callback,

執行SKQuoteLib_RequestTicks會有跟你一樣的202錯誤.

,此時我在判斷一次, 遇到此錯誤 202錯誤, 在隔一段時間在執行一次
SKQuoteLib_RequestTicks, 我的C#會正常拿到tick

--
剛開始寫API的新人 希望給你參考.

kc1230 發表於 13-3-1 23:20

cococharles 發表於 13-3-1 07:50 static/image/common/back.gif
我想起我當初嘗試錯誤的經驗了
Initialize 和 SKQuoteLib_RequestTicks 必須在不同的 thread 中執行
你看群 ...

感謝高手相救, 這正解, 函數終於沒有回傳啥 212 了
看來是非得分成兩個 callback 再依序丟出兩個 thread

cococharles 發表於 13-3-2 09:21

kc1230 發表於 13-3-1 23:20 static/image/common/back.gif
感謝高手相救, 這正解, 函數終於沒有回傳啥 212 了
看來是非得分成兩個 callback 再依序丟出兩個 thread
...

恭喜啦!
做這種程式有很多時候是要嘗試錯誤的,
一方面業者提供的範例或文件可能不完整(或者不符我們需求);
另一方面當我們有問題的時候, 也不一定能得到支援, 可能他們覺得我們還不是大咖吧!

頁: [1]
查看完整版本: 哪位高手能幫我看下群益 api 抓tick 是哪裡有錯