?? scstkdrv.h
字號:
#ifndef _STOCK_DRV_SC_H_
#define _STOCK_DRV_SC_H_
#include "Stockdrv.h"
// 更新日期:20060131
// 更新內容:
// 1. tagSCPankou里面的時間改為long類型。
// SC_PankouReply里面的個數short m_nCount改為long m_lCount
// 2. SC_KLineAsk和SC_KLineReply有所調整
// 3. 擴充市場定義,三板、外匯、期貨、臺灣市場,使用SCMarket返回的m_wMarket值即可。
// 4. 大部分數據類型的的#define值有更改,重新編譯即可
// 5. SC_Downdload中的m_nCount改為m_lCount,類型改為long.
// 結構名稱從'SC_Downdload'改為'SC_Download'
// 6. SH_MARKET_EX、SZ_MARKET_EX等的定義已刪除,直接用SCMarket里面的m_wMarket即可。
// 7. 初始化函數名改為SCInit
// 8. 示范代碼更加詳細,請參考我們的例子,SCDemo
#define STKLABEL_LEN 10 // 股號數據長度,國內市場股號編碼兼容錢龍
#define STKNAME_LEN 32 // 股名長度
#define TITLE_LEN 64 // 信息地雷標題長度
#define SC_INIT 0x2001 // SCInit調用
#define SC_CLEAR_PREVREQ 0x2101 // 撤銷前面的所有請求,建議在發請求(或組合請求)之前調用
#define SC_MARKET 0x2131 // 請求指定市場的信息,無需請求,有變化就會自動發送
#define SC_NOWDATA 0x2201
#define SC_PANKOU 0x2301 // 請求盤口數據,對應:long m_time,建議使用這個。
#define SC_IMTYPELIST 0x2401 // 請求信息地雷信息分類表
#define SC_IMTITLE 0x2402 // 請求信息地雷標題列表
#define SC_IMCONTENT 0x2403 // 請求信息地雷數據(f10, 交易所公告、實時和歷史的個股信息等)
#define SC_KLINE 0x2501 // 請求K線數據(日線)
#define SC_CQ 0x2601 // 請求除權數據
#define SC_DL_KLINE 0x2701 // K線數據下載
#define SC_DL_CQ 0x2702 // 除權數據下載
#define SC_DL_XX 0x2703 // 信息下載,如F10、交易所公告、新聞等
#define SC_DL_TRACE 0x2704 // 明細數據,舊的,新版已不用
#define SC_DL_5MIN 0x2705 // 5分鐘K線下載
#pragma pack(1)
struct SCHead { // 請求包頭
WORD m_nType; // 請求/應答類型,SC_MARKET、SC_IMCONTENT等
char m_cStatus; // 當為應答包時,m_cStatus=1成功,m_cStatus=0失敗,m_cStatus=2離線
long m_lIndex; // 包的唯一索引。不要設為0,請求的時候賦值,并在應答包中
// 判斷是否與請求包中的相同,如果不同,則表示不是這個請求包對應的應答包
// 如果這個值為0,表示不是請求引起的數據變化
};
typedef struct tagStock { // 證券
char m_szLabel[STKLABEL_LEN]; // 股票代碼,以'\0'結尾
char m_szName[STKNAME_LEN]; // 股票名稱,以'\0'結尾
short m_nHand; // 每手股數
} StockInfo;
typedef struct tagMarket { //市場內容
union {
WORD m_wMarket; //市場代碼, 'HS', 'SZ', 'BS', 'HW', 'KH', 'ZH', 'QS', 'QD', 'QZ', 'WT',
char m_EShortName[3]; //英文簡寫, "SH", "SZ", "SB", "WH", "HK", "HZ", .....
};
char m_Name[16]; //市場名稱
char m_CShortName[5]; //中文簡稱
unsigned long m_lProperty; //市場屬性(未定義)
unsigned long m_lDate; //數據日期(20030114)
short m_PeriodCount; //交易時段個數
short m_OpenTime[5]; //開市時間 1,2,3,4,5
short m_CloseTime[5]; //收市時間 1,2,3,4,5
short m_nCount; //該市場的證券個數
StockInfo m_Siif[1];
} SCMarket;
typedef struct tagStockID { //證券標識
WORD m_wMarket; //市場代碼
short m_nIndex; //在該市場SCMarket::m_Siff中的偏移
} StockID;
typedef struct tagSCNow
{
StockID m_sID;
long m_time; // 成交時間
float m_fLastClose; // 昨收
float m_fOpen; // 今開
float m_fHigh; // 最高
float m_fLow; // 最低
float m_fNewPrice; // 最新
float m_fVolume; // 成交量
float m_fAmount; // 成交額
long m_lStroke; // 本次實際成交筆數
float m_fBuyPrice[5]; // 申買價1,2,3,4,5
float m_fBuyVolume[5]; // 申買量1,2,3,4,5
float m_fSellPrice[5]; // 申賣價1,2,3,4,5
float m_fSellVolume[5]; // 申賣量1,2,3,4,5
} RCV_NOW_STRUCTEx;
typedef struct tagSCPankou {
long m_time; // UCT
float m_fHigh; // 最高
float m_fLow; // 最低
float m_fNewPrice; // 最新
float m_fVolume; // 成交量
float m_fAmount; // 成交額
long m_lStroke; // 本次實際成交筆數
float m_fBuyPrice[5]; // 申買價1,2,3
float m_fBuyVolume[5]; // 申買量1,2,3,
float m_fSellPrice[5]; // 申賣價1,2,3
float m_fSellVolume[5]; // 申賣量1,2,3
} RCV_PANKOU_STRUCTEx;
/*
typedef union tagRCV_HISTORY_STRUCTEx
{
struct
{
long m_time; //UCT
float m_fOpen; //開盤
float m_fHigh; //最高
float m_fLow; //最低
float m_fClose; //收盤
float m_fVolume; //量
float m_fAmount; //額
WORD m_wAdvance; //漲數,僅大盤有效
WORD m_wDecline; //跌數,僅大盤有效
};
} RCV_HISTORY_STRUCTEx;
typedef union tagRCV_POWER_STRUCTEx
{
struct
{
long m_time; // UCT
float m_fGive; // 每股送
float m_fPei; // 每股配
float m_fPeiPrice; // 配股價,僅當 m_fPei!=0.0f 時有效
float m_fProfit; // 每股紅利
};
}RCV_POWER_STRUCTEx,*PRCV_POWER_STRUCTEx;
*/
///////////////////////////////////////////////////////////////////////////////////
// 引擎初始化包
struct SC_InitAsk { // 發出初始化請求,調用SCInit時使用,無對應返回包
SCHead m_Head;
DWORD m_dwSoftware; // 分析軟件標識,由數暢分配
HWND m_hWnd; // 用來接收數據的窗口句柄
DWORD m_nMsg; // 用來接收數據的消息
};
///////////////////////////////////////////////////////////////////////////////////
//請求包和應答包
struct SC_MarketReply { // 這個包無需請求即可收到,在市場信息變化的時候就可收到
SCHead m_Head;
SCMarket m_Market;
};
struct SC_NowDataReply { // 這個包無需請求即可收到。數據有更新,會自動發送
SCHead m_Head;
short m_nCount;
RCV_NOW_STRUCTEx m_Now[1];
};
struct SC_PankouAsk { // 請求一天盤口數據,現支持當天,歷史盤口將通過下載獲得
SCHead m_Head;
StockID m_sID;
long m_lDate; // FORMAT: 20010305
};
struct SC_PankouReply {
SCHead m_Head;
StockID m_sID;
long m_lDate; // FORMAT: 20010305
float m_fLastClose; // 昨收
float m_fOpen; // 今開
long m_lCount;
RCV_PANKOU_STRUCTEx m_Data[1];
};
//define for SC_KLineAsk::m_wDataType
#define KLINE_DAYDATA 0 //日線
#define KLINE_MIN5DATA 1 //5分鐘線
// 注意:
// 1、由于服務器的設置,可能只能收到最近某一時段的數據,更多的數據,可以通過下載獲得。
// 2、對于K線請求包,當表示日線時,long的格式為yyyymmdd,
// 3、對于K線請求包,當為五分鐘線時,long的格式如下面這個TDate結構所示
// struct TDate { // 五分鐘時間格式
// unsigned long m_Minute : 6;
// unsigned long m_Hour : 5;
// unsigned long m_Day : 5;
// unsigned long m_Month : 4;
// unsigned long m_Year : 12;
// };
// 4、關于時間的轉行,我們提供例子中有示范代碼,可參考。
// 5、對K線應答包,日線和無分鐘的時間統一為long格式,已經包含日期和分鐘信息。
struct SC_KLineAsk {
SCHead m_Head;
StockID m_sID;
WORD m_wDataType; // KLINE_DAYDATA or KLINE_MIN5DATA
long m_tBegin; // 開始時間或位置,0表示從第一個數據開始
long m_tEnd; // 結束時間或請求數量,0表示直到結束
};
struct SC_KLineReply {
SCHead m_Head;
StockID m_sID;
WORD m_wDataType; // KLINE_DAYDATA or KLINE_MIN5DATA
long m_lDataCount; // m_pData數量
RCV_HISTORY_STRUCTEx m_pData[1];
};
// 除權數據不校驗,總是以服務器的為準
struct SC_CQAsk {
SCHead m_Head;
StockID m_sID;
};
struct SC_CQReply {
SCHead m_Head;
StockID m_sID;
short m_nCount;
RCV_POWER_STRUCTEx m_pData[1]; // m_head不使用
};
//////////////////////////////////////////////////////////////////////////////////
////////////// 信息地雷接口
//信息地雷類型屬性的定義
#define CLASS_JYSXX 0 // 交易所公告
#define CLASS_STKINFO 1 // 歷史信息地雷
#define CLASS_NEWS 2 // 新聞
#define CLASS_STOCKBASE 3 // F10
#define CLASS_MKTINFO 4 // 綜合資訊
struct SCIMType { // 信息分類,如重大事項、公司公告、個股點評等
char m_cFlag[8];
char m_cTitle[24];
};
struct SC_IMTypeReply { // 無需請求,自動返回
SCHead m_Head;
char m_cVendor;
char m_cClass;
short m_nSize;
SCIMType m_Type[1];
};
struct SCIMTitle {
unsigned long m_lID; // 標題ID
long m_lChkSum; // 新增加,所對應的內容的Checksum
unsigned long m_lDate; // yyyymmdd
unsigned long m_lTime; // hhmmss
char m_cFlag[8];
char m_cMainType[9];
char m_cSubtype[17];
char m_cTitle[64];
char m_szLabel[9]; // 股票代碼,以'\0'結尾
};
struct SCIMTitleID {
unsigned long m_lID; // 標題ID
long m_lChkSum; // 新增加,所對應的內容的Checksum
};
struct SC_IMTitleAsk { // 請求某個時間段內信息地雷標題
SCHead m_Head;
char m_cClass;
StockID m_sID; //對于個股資訊、基本資料F10使用m_sID,交易所公告只使用
//其中的市場,新聞、綜合資訊不使用這個字段
long m_lStartDate; //新聞、綜合資訊、交易所公告只使用m_lStartDate,m_lEndDate不使用
long m_lEndDate; //個股資訊使用m_lStartDate,m_lEndDate;
};
struct SC_IMTitleReply {
SCHead m_Head;
char m_cVendor; // 應答包有廠商
char m_cClass;
StockID m_sID; //對于個股資訊、基本資料F10、使用m_sID,
short m_nSize; // 標題個數
SCIMTitle m_IMTitle[1];
};
struct SC_IMDataAsk { // 信息地理內容請求,一次可請求多個標題的內容
SCHead m_Head;
// char m_cVendor; // 請求包沒有廠商代碼
char m_cClass;
StockID m_sID; //對于個股資訊、基本資料、個股信息地雷使用m_sID,
short m_nSize; // 標題ID個數
long m_lDate; //日期,新聞、交易所公告、綜合資訊需要,一次只能設一個日期
SCIMTitleID m_ID[1];
};
struct SCIMData { // 信息地理內容
SCIMTitle m_IMTitle;
unsigned long m_lDataLength;
char m_cData[1];
};
struct SC_IMDataReply { // 信息地雷內容應答,一次可返回多個標題和內容
SCHead m_Head;
char m_cVendor;
char m_cClass;
StockID m_sID; //對于個股資訊、基本資料F10使用m_sID,
long m_lDate; //對于新聞、綜合資訊、財經新聞、券商信息使用m_lDate
short m_nSize;
SCIMData m_Data[1];
};
typedef struct tagIMTitle {
unsigned long m_lOffset;
unsigned long m_lDataLength;
long m_time;
char m_cCaption[TITLE_LEN];
} IMTitleEx;
// 在引擎里面進行下載操作之后,會自動收到這個包,里面包含了下載下來的指定數據。
struct SC_Download { // 數據下載接口
SCHead m_Head; // m_head中僅m_nType有效
StockID m_sID;
long m_lCount; // // m_KLine,m_power,m_Trace,m_Title的個數
union {
RCV_HISTORY_STRUCTEx m_KLine[1]; // k線、五分鐘數據下載
RCV_POWER_STRUCTEx m_power[1]; // 除權數據下載
RCV_PANKOU_STRUCTEx m_Trace[1]; // 明細數據下載
struct { // F10、交易所公告、新聞、綜合資訊下載
char m_cClass; // 類別
IMTitleEx m_Title[1];
char m_cData[1];
};
};
};
#pragma pack()
//////////////////////////////////////////////////////////////////////////////////
//新增接口
#ifdef __cplusplus
extern "C"{
#endif
//新接口的DLL請使用HKEY_LOCAL_MACHINE/SOFTWARE/StockDrv下的SCDriver項
// 接口函數1
//****************************************************************************************\\
// 設置處理消息的窗口句柄和自定義的消息
// SCAskData請求的數據在這個消息中返回結果
// 但是,并不是一定要調用SCAskData才有數據返回,在沒有調用SCAskData的情況下,有下面三種情況會返回數據
// 1、市場變化(比如初始化,新股上市等),返回SC_MarketReply數據
// 2、開市時段內,實時數據不斷變化,返回SC_NowReply數據
// 3、在引擎里面進行了下載操作,返回下載下來的指定數據SC_Downdload
// 其它情況,通過調用SCAskData,返回指定類型的數據。
BOOL WINAPI SCInit(void *pInit, int nSize); // SC_InitAsk, sizeof(SC_InitAsk)
//****************************************************************************************//
// 接口函數2
//****************************************************************************************\\
// 退出的時候調用這個函數,以釋放調用SCInit時分配的資源。
void WINAPI SCQuit();
//****************************************************************************************//
// 接口函數3
//****************************************************************************************\\
// 軟件向信息平臺請求數據,
// nSize為請求包的大小
// pAsk分別為 SC_IMVendorAsk *, SC_TraceAsk *, SC_NowAsk *, SC_IMAsk * 等
// 數據在函數SCInit所設的消息中返回,可參考CSCDemoDlg::OnReply(...)
// 消息中的數據可能在SCAskData之后返回,也可能在SCAskData尚未結束之前返回
// 用戶通過調用AskData,信息平臺可能從本地返回數據,也可能把用戶的請求轉交到網上的服務器
// 再返回數據,對用戶來說,效果和用法都是一樣的,可參考CSCDemoDlg::OnReply(...)。
void WINAPI SCAskData(void *pAsk, int nSize);
//****************************************************************************************//
// 接口函數4
//****************************************************************************************\\
// 取系統信息
enum TSCInfo {
INFO_VERSION = 1,
INFO_USERNAME = 2,
};
UINT WINAPI SCGetInfo(TSCInfo Info, void *pData, int *nSize);
// Info=INFO_VERSION時,pData可設為NULL,函數返回值為引擎版本號
// Info=INFO_USERNAME時,pData指向一個字符串,
// 返回值為0表示未登錄,pData指向的內容未定義
// 返回值為1表示已成功登錄,pData指向的內容為用戶名
//****************************************************************************************\\
#ifdef __cplusplus
}
#endif
#endif // _STOCK_DRV_SC_H_
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -