?? stkdrv.txt
字號:
/****************************************************************************************
* 分析家證券投資分析系統行情接口規范V3.0
* (適用于單向數據傳輸方式)
****************************************************************************************/
****************************************************************************************/
* 驅動程序安裝后,應該在系統注冊庫中注冊以下信息,分析軟件通過該注冊信息啟動動態庫 *
* HKEY_LOCAL_MACHINE/SOFTWARE/StockDrv 下 *
* Driver = "驅動DLL全路徑" *
****************************************************************************************/
#ifndef __STOCKDRV_H__
#define __STOCKDRV_H__
/////////////////////////////////////////////////////////////////////////////////
//增補說明
//2003年9月1日,增補上海、深圳市場5檔買賣盤支持
// a.當用RCV_WORK_SENDMSG工作模式時,分析家V5.0.1后的版本才支持支持上海、深圳市場5檔買賣盤
// b.與之前版本相比,新增了RCV_REPORT_STRUCTExV3結構用以代替RCV_REPORT_STRUCTExV2結構,驅動程序升級僅需要用前者替換后者即可
//2001年9月1日,增補深圳行情庫SJS庫的更改
// a.工作模式增加RCV_WORK_SENDMSG模式,建議驅動程序支持RCV_WORK_MEMSHARE和RCV_WORK_SENDMSG兩種工作模式以支持各種版本的分析家
// b.RCV_WORK_SENDMSG工作模式與RCV_WORK_MEMSHARE的唯一區別在于使用RCV_REPORT_STRUCTExV2數據結構替代RCV_REPORT_STRUCTEx數據結構傳輸動態行情
// c.若GetStockDrvInfo(RI_V2SUPPORT)返回1,則分析家啟用RCV_WORK_SENDMSG工作模式,否則啟用RCV_WORK_MEMSHARE工作模式,分析家采用這種方式來兼容前后版本
// d.采用RCV_WORK_SENDMSG工作模式,分析家系統能夠支持4位和6位深圳股票代碼
// e.RCV_WORK_SENDMSG工作模式只在分析家V4.01.00后的版本才支持。
/////////////////////////////////////////////////////////////////////////////////
// 工作方式類型定義
#define RCV_WORK_DEMAND 0 // 查詢接口,方式一
#define RCV_WORK_MEMSHARE 2 // 內存共享直接引用,方式二
#define RCV_WORK_SENDMSG 4 // 版本 2 建議使用的方式,對于六位代碼的深圳市場必須使用這種模式
// 其他工作方式保留
/*
指數代號-名稱
1A0001 上證綜合指數 1A0002 上證A股指數 1A0003 上證B股指數
1B0001 上證工業指數 1B0002 上證商業指數 1B0004 上證地產指數
1B0005 上證公用事業 1B0006 上證綜合 1B0007 上證30指數
2A01 深證成分指數 2A02 深證成分A 2A03 深證成分B
2B01 深證工業 2B02 深證商業 2B03 深證金融
2B04 深證地產 2B05 深證公共事業 2B06 深證綜合
2B07 深證基金 2C01 深證指數 2C02 深證A股
2C03 深證B股
*/
/////////////////////////////////////////////////////////////////////////////////////////
// 以下是接口方式二
// 證券市場
#define SH_MARKET_EX 'HS' // 上海
#define SZ_MARKET_EX 'ZS' // 深圳
#define HK_MARKET_EX 'KH' // 香港
// 文件數據類型
// 結構數組形式的文件數據
#define FILE_HISTORY_EX 2 // 補日線數據
#define FILE_MINUTE_EX 4 // 補分鐘線數據
#define FILE_POWER_EX 6 // 補充除權數據
#define FILE_BASE_EX 0x1000 // 錢龍兼容基本資料文件,m_szFileName僅包含文件名
#define FILE_NEWS_EX 0x1002 // 新聞類,其類型由m_szFileName中子目錄名來定
#define FILE_HTML_EX 0x1004 // HTML文件,m_szFileName為URL
#define FILE_SOFTWARE_EX 0x2000 // 升級軟件
// 消息子類型
#define News_Sha_Ex 2 // 上證消息
#define News_Szn_Ex 4 // 深證消息
#define News_Fin_Ex 6 // 財經報道
#define News_TVSta_Ex 8 // 電視臺通知
#define News_Unknown_Ex -1 // 未知提供者
//Definition For nInfo of Function GetStockDrvInfo(int nInfo,void * pBuf);
#define RI_IDSTRING 1 // 廠商名稱,返回(LPCSTR)廠商名
#define RI_IDCODE 2 // 卡號
#define RI_VERSION 3 // 驅動程序版本
#define RI_V2SUPPORT 6 // 支持深圳SJS庫結構
#define STKLABEL_LEN 10 // 股號數據長度,國內市場股號編碼兼容錢龍
#define STKNAME_LEN 32 // 股名長度
//////////////////////////////////////////////////////////////////////////////////
//行情數據(版本1數據結構RCV_WORK_MEMSHARE)
typedef struct tagRCV_REPORT_STRUCTEx
{
WORD m_wMarket; // 股票市場類型
char m_szLabel[STKLABEL_LEN]; // 股票代碼,以'\0'結尾
char m_szName[STKNAME_LEN]; // 股票名稱,以'\0'結尾
float m_fLastClose; // 昨收
float m_fOpen; // 今開
float m_fHigh; // 最高
float m_fLow; // 最低
float m_fNewPrice; // 最新
float m_fVolume; // 成交量
float m_fAmount; // 成交額
float m_fBuyPrice[3]; // 申買價1,2,3
float m_fBuyVolume[3]; // 申買量1,2,3
float m_fSellPrice[3]; // 申賣價1,2,3
float m_fSellVolume[3]; // 申賣量1,2,3
} RCV_REPORT_STRUCTEx;
//////////////////////////////////////////////////////////////////////////////////
//行情數據(版本2數據結構RCV_WORK_SENDMSG)
typedef struct tagRCV_REPORT_STRUCTExV2
{
WORD m_cbSize; // 結構大小
time_t m_time; // 成交時間
WORD m_wMarket; // 股票市場類型
char m_szLabel[STKLABEL_LEN]; // 股票代碼,以'\0'結尾
char m_szName[STKNAME_LEN]; // 股票名稱,以'\0'結尾
float m_fLastClose; // 昨收
float m_fOpen; // 今開
float m_fHigh; // 最高
float m_fLow; // 最低
float m_fNewPrice; // 最新
float m_fVolume; // 成交量
float m_fAmount; // 成交額
float m_fBuyPrice[3]; // 申買價1,2,3
float m_fBuyVolume[3]; // 申買量1,2,3
float m_fSellPrice[3]; // 申賣價1,2,3
float m_fSellVolume[3]; // 申賣量1,2,3
float m_fBuyPrice4; // 申買價4
float m_fBuyVolume4; // 申買量4
float m_fSellPrice4; // 申賣價4
float m_fSellVolume4; // 申賣量4
} RCV_REPORT_STRUCTExV2;
//////////////////////////////////////////////////////////////////////////////////
//行情數據(版本3數據結構RCV_WORK_SENDMSG,兼容RCV_REPORT_STRUCTExV2結構,使用m_cbSize區分不同結構)
//版本3支持5檔買賣盤
typedef struct tagRCV_REPORT_STRUCTExV3
{
WORD m_cbSize; // 結構大小
time_t m_time; // 成交時間
WORD m_wMarket; // 股票市場類型
char m_szLabel[STKLABEL_LEN]; // 股票代碼,以'\0'結尾
char m_szName[STKNAME_LEN]; // 股票名稱,以'\0'結尾
float m_fLastClose; // 昨收
float m_fOpen; // 今開
float m_fHigh; // 最高
float m_fLow; // 最低
float m_fNewPrice; // 最新
float m_fVolume; // 成交量
float m_fAmount; // 成交額
float m_fBuyPrice[3]; // 申買價1,2,3
float m_fBuyVolume[3]; // 申買量1,2,3
float m_fSellPrice[3]; // 申賣價1,2,3
float m_fSellVolume[3]; // 申賣量1,2,3
float m_fBuyPrice4; // 申買價4
float m_fBuyVolume4; // 申買量4
float m_fSellPrice4; // 申賣價4
float m_fSellVolume4; // 申賣量4
float m_fBuyPrice5; // 申買價5
float m_fBuyVolume5; // 申買量5
float m_fSellPrice5; // 申賣價5
float m_fSellVolume5; // 申賣量5
} RCV_REPORT_STRUCTExV3;
//////////////////////////////////////////////////////////////////////////////////
//補充數據頭
//數據頭 m_dwHeadTag == EKE_HEAD_TAG
#define EKE_HEAD_TAG 0xffffffff
typedef struct tagRCV_EKE_HEADEx
{
DWORD m_dwHeadTag; // = EKE_HEAD_TAG
WORD m_wMarket; // 市場類型
char m_szLabel[STKLABEL_LEN]; // 股票代碼
}RCV_EKE_HEADEx;
//補充日線數據
typedef union tagRCV_HISTORY_STRUCTEx
{
struct
{
time_t 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_EKE_HEADEx m_head;
}RCV_HISTORY_STRUCTEx;
//補充分時線數據
typedef union tagRCV_MINUTE_STRUCTEx
{
struct{
time_t m_time; // UCT
float m_fPrice;
float m_fVolume;
float m_fAmount;
};
RCV_EKE_HEADEx m_head;
}RCV_MINUTE_STRUCTEx;
//補充除權數據
typedef union tagRCV_POWER_STRUCTEx
{
struct
{
time_t m_time; // UCT
float m_fGive; // 每股送
float m_fPei; // 每股配
float m_fPeiPrice; // 配股價,僅當 m_fPei!=0.0f 時有效
float m_fProfit; // 每股紅利
};
RCV_EKE_HEADEx m_head;
}RCV_POWER_STRUCTEx;
//////////////////////////////////////////////////////////////////////////////////
// 文件類型數據包頭
// 注一:
// m_wDataType == FILE_BASE_EX
// m_dwAttrib = 股票證券市場,m_szFileName僅包含文件名
// m_wDataType == FILE_NEWS_EX
// m_dwAttrib = 消息來源,m_szFileName 包含目錄的文件名,目錄名為消息來源
// 如: "上交所消息\\0501Z012.TXT","新蘭德\\XLD0001.TXT"
// m_wDataType == FILE_HTML_EX
// m_dwAttrib 保留, m_szFileName為URL
// m_wDataType == FILE_SOFTWARE_EX
// m_dwAttrib 分析軟件類型, 用于初步判斷
// m_szFileName 分析軟件 ID 特征字符串 + '\\' + 文件名
// 如 "SuperStk\\SuperStk.EXE",
// ID 特征字符串為 "SuperStk", "SuperStk.EXE" 為文件名
// 特征字符串 和 文件名及其含義由分析軟件商定義
// 注二:
// 數據文件循環播出,每個文件有唯一的序列號,以避免重復接收
typedef struct tagRCV_FILE_HEADEx
{
DWORD m_dwAttrib; // 文件子類型
DWORD m_dwLen; // 文件長度
DWORD m_dwSerialNo; // 序列號
char m_szFileName[MAX_PATH]; // 文件名 or URL
} RCV_FILE_HEADEx;
//////////////////////////////////////////////////////////////////////////////////
// 數據通知消息
//直接數據引用通知消息
// wParam = RCV_WPARAM;
// lParam 指向 RCV_DATA結構;
// 返回 1 已經處理, 0 未處理或不能處理
#define RCV_REPORT 0x3f001234
#define RCV_FILEDATA 0x3f001235
// 注一:
// 記錄數表示行情數據和補充數據(包括 Header)的數據包數,對文件類型數據, = 1
// 注二:
// 若 m_bDISK = FALSE, m_pData 為數據緩沖區指針
// ******** 數據共享,不能修改數據 **********
// m_bDISK = TRUE, m_pData 為該文件的存盤文件名,一般情況只有
// 升級軟件等大文件用存盤方式
typedef struct tagRCV_DATA
{
int m_wDataType; // 文件類型
int m_nPacketNum; // 記錄數,參見注一
RCV_FILE_HEADEx m_File; // 文件接口
BOOL m_bDISK; // 文件是否已存盤的文件
union
{
RCV_REPORT_STRUCTEx * m_pReport;
RCV_REPORT_STRUCTExV2* m_pReportV2;
RCV_REPORT_STRUCTExV3* m_pReportV3;
RCV_HISTORY_STRUCTEx * m_pDay;
RCV_MINUTE_STRUCTEx * m_pMinute;
RCV_POWER_STRUCTEx * m_pPower;
void * m_pData; // 參見注二
};
} RCV_DATA;
/* 消息處理程序 DEMO
LONG OnStkDataOK(UINT wParam,LONG lParam)
{
RCV_DATA* pHeader;
pHeader = (RCV_DATA *)lParam;
switch( wParam )
{
case RCV_REPORT: // 共享數據引用方式,股票行情
for(i=0; i<pHeader->m_nPacketNum; i++)
{
pHeader->m_pReport[i] ...
// 數據處理
}
break;
case RCV_FILEDATA: // 共享數據引用方式,文件
switch(pHeader->m_wDataType)
{
case FILE_HISTORY_EX: // 補日線數據
break;
case FILE_MINUTE_EX: // 補分鐘線數據
break;
case FILE_POWER_EX: // 補充除權數據
break;
case FILE_BASE_EX: // 錢龍兼容基本資料文件,m_szFileName僅包含文件名
break;
case FILE_NEWS_EX: // 新聞類,其類型由m_szFileName中子目錄名來定
break;
case FILE_HTML_EX: // HTML文件,m_szFileName為URL
break;
case FILE_SOFTWARE_EX: // 升級軟件
break;
}
break;
default:
return 0; // unknown data
}
return 1;
}
*/
//////////////////////////////////////////////////////////////////////////////////
//APIs
#ifdef __cplusplus
extern "C"{
#endif
//////////////////////////////////////////////////////////////////////////////////
// 注冊函數
// 股票初始化
// 入口參數:
// hWnd 處理消息的窗口句柄
// Msg 用戶自定義消息
// nWorkMode 接口工作方式,參見工作方式類型定義
// 返回參數:
// 1 成功
// -1 失敗
// 注:
// 注冊后,驅動程序會向處理窗口發送消息; 若不注冊,通過查詢方式亦可取得數據
// 若股票接收沒啟動,則啟動股票接收程序
int WINAPI Stock_Init(HWND hWnd,UINT Msg,int nWorkMode);
// 退出,停止發送消息
// 入口參數:
// hWnd 處理消息的窗口句柄,同 Stock_Init 的調用入口參數
// 返回參數:
// 1 成功
// -1 失敗
int WINAPI Stock_Quit(HWND hWnd);
// 激活接收程序,進行設置
// 入口參數:
// bSetup TRUE 顯示窗口,進行設置
// FALSE 隱含窗口
// 返回參數:
// 1 成功
// -1 失敗
int WINAPI SetupReceiver(BOOL bSetup);
// 取得股票驅動信息
// 入口參數:
// nInfo 索引
// pBuf 緩沖區
// 出口參數:
// nInfo == RI_IDSTRING, 返回特征字符串長度, pBuf 為特征字符串
// 如: "TongShi_StockDrv_1.00"
// nInfo == RI_IDCODE, 返回信息卡 ID 號, pBuf 為字符串形式的 ID 號
// 如: 0x78001234 "78001234"
// nInfo == RI_VERSION, 返回信息卡版本號, pBuf 為字符串版本
// 如: 1.00 "1.00"
// nInfo == RI_V2SUPPORT, 返回是否支持深圳SJS庫結構, pBuf無效
DWORD WINAPI GetStockDrvInfo(int nInfo,void * pBuf);
void WINAPI ReInitStockInfo();
//重新取得股票數據
#ifdef __cplusplus
}
#endif
#endif // __STOCKDRV_H__
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -