COCO研究院

 找回密碼
 註冊
搜索
查看: 4689|回復: 9

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

[複製鏈接]
發表於 13-2-28 21:25 | 顯示全部樓層 |閱讀模式
小弟初來乍到, 一個簡單的期貨報價搞不定, SKQuoteLib_RequestTicks函數一直回傳SK_SUBJECT_TICK_STOCK_NOT_FOUND, 不知道是不是我搞錯期貨的代號
難道期貨近月代號不是 TX00 ?
其中 CapitalApi.h 包裝了部分 api 中的同名函數, Notify.h則包含了要註冊的函數
代碼如下:
  1.     #include <iostream>
  2.     #include "CapitalApi.h"
  3.     #include "Notify.h"
  4.     using namespace std;

  5.     int main()
  6.     {
  7.     cout << "Hello world!" << endl;
  8.     char* username = (char*)"X123456789"; //假的帳號
  9.     char* password = (char*)"987654321"; //假的密碼
  10.     short page = -1;
  11.     char* sym = "TX00";
  12.    
  13. InitSKQuoteLib();

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

  15.     cout << "SKQuoteLib_AttachTicksCallBack" << SKQuoteLib_AttachTicksCallBack((long)&OnNotifyTicks) << endl;
  16.    
  17. cout << "SKQuoteLib_AttachFutureTradeInfoCallBack" << SKQuoteLib_AttachFutureTradeInfoCallBack((long)&OnNotifyFutureTradeInfo) << endl;

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

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


  21.     return 0;
  22.     }

複製代碼

發表於 13-2-28 22:36 | 顯示全部樓層
看你的code, coding 的功力, 應是佷淺, 群益它有
附samples , 你先搞清楚使那些code運作的方式再寫會較易成功
 樓主| 發表於 13-2-28 23:04 | 顯示全部樓層
仔仔 發表於 13-2-28 22:36
看你的code, coding 的功力, 應是佷淺, 群益它有
附samples , 你先搞清楚使那些code運作的方式再寫會較易成 ...

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

 樓主| 發表於 13-2-28 23:09 | 顯示全部樓層
sunsamy 發表於 13-2-28 22:42
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 就不行,也太莫名其妙了

發表於 13-3-1 00:36 | 顯示全部樓層
pageNo 用 1,2,3... 試試看呢?
我是在程式中自己計數 page 從 1 開始, 超過100檔股票就換下一個 page
我沒有用 page=-1, 因為我的記憶中這個用法不可行, 不知道是群益手冊錯了, 或者我太笨
 樓主| 發表於 13-3-1 01:17 | 顯示全部樓層
cococharles 發表於 13-3-1 00:36
pageNo 用 1,2,3... 試試看呢?
我是在程式中自己計數 page 從 1 開始, 超過100檔股票就換下一個 page
我沒 ...

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

發表於 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

評分

參與人數 3金錢 +5 收起 理由
kc1230 + 2 太感謝了!!
sunsamy + 2 原來如此~
tedwang + 1 按一個讚

查看全部評分

發表於 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的新人 希望給你參考.
 樓主| 發表於 13-3-1 23:20 | 顯示全部樓層
cococharles 發表於 13-3-1 07:50
我想起我當初嘗試錯誤的經驗了
Initialize 和 SKQuoteLib_RequestTicks 必須在不同的 thread 中執行
你看群 ...

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

發表於 13-3-2 09:21 | 顯示全部樓層
kc1230 發表於 13-3-1 23:20
感謝高手相救, 這正解, 函數終於沒有回傳啥 212 了
看來是非得分成兩個 callback 再依序丟出兩個 thread
...

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

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-5-17 10:31

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 | AI繪圖AI超擬真美女AI beauty AI Stable DiffusionAI正妹AI Lookbook