網際風的通視介面,看說明文檔半天也看不明白,網上也沒有找到合適的內容,主要就是使用C#調用stock.dll,然後顯示資訊。有沒有人寫過類似的源碼,或者說一些具體步驟,不勝感激。附網際風通視介面規範:
****************************************************************************************
*
在通視卡規範基礎上,參照飛狐交易師介面規範3.0,進行擴充,即時行情增加漲跌停價;
*
內外盤;期貨行情的昨結算價和現結算價;增加補充5分鐘線、1分鐘線、分筆資料的支援
****************************************************************************************/
/****************************************************************************************
*
驅動程式安裝後,應該在系統註冊表中註冊以下資訊,分析軟體通過該註冊資訊啟動動態庫
*
HKEY_LOCAL_MACHINE/SOFTWARE/StockDrv 下
*
Driver = "驅動DLL全路徑"
****************************************************************************************/
#ifndef __STOCKDRV_H__
#define __STOCKDRV_H__
#if _MSC_VER > 1000
#pragma once
#endif
typedef long time_t;
/////////////////////////////////////////////////////////////////////////////////////////
// 工作方式類型定義
#define RCV_WORK_SENDMSG
4
// 相容標準圖文訊息處理模式
// 其他工作方式保留
//
訊息類型
#define RCV_REPORT
0x3f001234
#define RCV_FILEDATA
0x3f001235
//==================================== 資料結構 =================================================
// 證券市場
#define
SH_MARKET_EX
'HS'
// 上海
#define
SZ_MARKET_EX
'ZS'
// 深圳
#define
HK_MARKET_EX
'KH'
// 香港
#define
SQ_MARKET_EX
'QS'
// 上期
#define
DL_MARKET_EX
'LD'
// 大連
#define
ZZ_MARKET_EX
'ZZ'
// 鄭州
#define
JZ_MARKET_EX
'JZ'
// 中金所
#define
WP_MARKET_EX
'PW'
// 外盤
#define
ID_MARKET_EX
'DI'
// 國際指數
#define
WH_MARKET_EX
'WH'
// 外匯
// 檔案資料類型
#define
FILE_HISTORY_MIN1_EX
0xA003
// 補1分鐘K線資料(擴充)
#define
FILE_HISTORY_EX
0x0002
// 補日線資料
#define
FILE_HISTORY_MIN5_EX
0x0051
// 補5分鐘K線資料(擴充)
#define
FILE_MINUTE_EX
4
// 補分時線資料
#define
FILE_MINUTE_EX
5
// 補分筆線資料 (擴充)
#define
FILE_POWER_EX
6
// 補充除權資料
#define
FILE_FINANCE_EX
7
// 補充財務資料(擴充)
#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
FILE_SHAZQDATA_EX
0x3000
// 上海債券淨價交易
#define
FILE_TYPE_RES
-1
// 保留
// 訊息子類型
#define
News_Sha_Ex
2
// 上證訊息
#define
News_Szn_Ex
4
// 深證訊息
#define
News_Sqn_Ex
5
// 期貨訊息
#define
News_Fin_Ex
6
// 財經報道
#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_SUPPORTEXTHQ
6
// 是否支援JSJ格式
#define
STKLABEL_LEN
10
// 品種代碼長度
#define
STKNAME_LEN
32
// 品種名稱 長度
//////////////////////////////////////////////////////////////////////////////////
//行情資料結構,支援期貨行情
typedef struct tagRCV_REPORT_STRUCTEx
{
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;
// 申買量6
float
m_fSellPrice5;
// 申賣價5
float
m_fSellVolume5;
// 申賣量5
float
m_fLastAverage;
//期貨專用昨結算價(擴充)
float
m_fAverage;
//期貨專用今結算價(擴充)
} RCV_REPORT_STRUCTEx, *PRCV_REPORT_STRUCTEx;
//////////////////////////////////////////////////////////////////////////////////
//補充資料頭
//資料頭 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,*PRCV_EKE_HEADEx;
//補充日線、5分鐘、1分鐘資料
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,*PRCV_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,*PRCV_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,*PRCV_POWER_STRUCTEx;
//////////////////////////////////////////////////////////////////////////////////
// 檔案類型資料包頭
// 注一:
//
m_wDataType == FILE_BASE_EX
//
m_dwAttrib = 股票證券市場,m_szFileName僅包含檔案名稱
//
m_FileTime = 基本面資料檔案建立日期
// m_wDataType == FILE_NEWS_EX
//
m_dwAttrib = 訊息來源,m_szFileName 包含目錄的檔案名稱,目錄名為訊息來源
//
m_dwSerialNo = 序號
//
如: "上交所訊息\\0501Z012.TXT","新蘭德\\XLD0001.TXT"
// m_wDataType == FILE_HTML_EX
//
m_dwAttrib 保留, m_szFileName為URL
//
m_wDataType
== FILE_SOFTWARE_EX
//
m_dwAttrib 分析軟體類型, 用於初步判斷
//
m_szFileName 分析軟體 ID 特徵字串 + '\\' + 檔案名稱
//
如 "TongShi\\TS\\RECEIVE\\RECEIVE.EXE",
//
ID 特徵字串為 "TongShi", "TS\\RECEIVE\\RECEIVE.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,*PRCV_FILE_HEADEx;
//////////////////////////////////////////////////////////////////////////////////
// 資料通知訊息
//查詢方式通知訊息
//
wParam = MsgPara_StkData
有股票資料
//
wParam = MsgPara_File
有檔案資料檔案
//直接資料引用通知訊息
//
wParam = RCV_WPARAM;
// lParam 指向 RCV_DATA結構;
//
返回 1 已經處理, 0 未處理或不能處理,目前該傳回值被忽略
// 注一:
//
記錄數表示行情資料和補充資料(包括 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_HISTORY_STRUCTEx * m_pDay;
RCV_MINUTE_STRUCTEx * m_pMinute;
RCV_POWER_STRUCTEx * m_pPower;
void
* m_pData;
// 參見注二
};
} RCV_DATA,*PRCV_DATA;
/* 訊息處理常式 DEMO(VC++)
LONG OnStkDataOK(UINT wParam,LONG lParam)
{
UINT wFileType = wParam;
RCV_DATA*
pHeader;
pHeader = (RCV_DATA *)lParam;
int nBufSize = pHeader->m_pReport[0].m_cbSize;//資料結構大小
PBYTE pBaseBuf = (PBYTE)&pHeader->m_pReport[0];//VC++。
//PBYTE pBaseBuf = (PBYTE)&pHeader->m_pReport[0]-2;//BCB需要減2。
switch( wFileType )
{
case RCV_REPORT:
// 即時行情
for(int i=0; i<pHeader->m_nPacketNum; i++)
{
RCV_REPORT_STRUCTEx & Buf = *(PRCV_REPORT_STRUCTEx)(pBaseBuf + nBufSize*i);
if(Buf.m_fLastClose*1000 <=0) continue; //收盤價為零,可能這個品種目前沒有即時資料
if(Buf.m_szName == "上證指數") {;};// 從介面共用記憶體取出資料進行處理
//Buf.m_time/60;
//Buf.m_wMarket;
//Buf.m_szLabel;
//Buf.m_szName;
//Buf.m_fLastClose;
}
break;
case RCV_FILEDATA:
// 補K線資料
switch(pHeader->m_wDataType)
{
case FILE_HISTORY_EX:
// 補日線資料
for(i=0; i<pHeader->m_nPacketNum; i++)
{
pHeader->m_pDay ...
//資料處理
// 請編補日線、5分鐘線、1分鐘線的調用範例
}
break;
case FILE_HISTORY_MIN5_EX:
// 補5分鐘K線資料(擴充)
break;
case FILE_HISTORY_MIN1_EX:
// 補1分鐘K線資料(擴充)
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;
}
*/
/*訊息處理常式 DEMO(BCB C++ Build)
void __fastcall OnStkDataOK(TMessage & Msg)
{
UINT wFileType = Msg.WParam;
RCV_DATA * pHeader;
pHeader = (RCV_DATA *) Msg.LParam;
int nBufSize = pHeader->m_pReport[0].m_cbSize;//資料結構大小
PBYTE pBaseBuf = (PBYTE)&pHeader->m_pReport[0]-2;//BCB需要減2。
switch( wFileType )
{
case RCV_REPORT:
// 即時行情
for(int i=0; i<pHeader->m_nPacketNum; i++)
{
RCV_REPORT_STRUCTEx & Buf = *(PRCV_REPORT_STRUCTEx)(pBaseBuf + nBufSize*i);
if(Buf.m_fLastClose*1000 <=0) continue; //收盤價為零,可能這個品種目前沒有即時資料
if(AnsiString(Buf.m_szName) == "上證指數") ShowMessage(AnsiString(Buf.m_szLabel));// 從介面共用記憶體取出資料進行處理
資料處理......
}
}
}
*/
//////////////////////////////////////////////////////////////////////////////////
//APIs
#ifdef __cplusplus
extern "C"{
#endif
//////////////////////////////////////////////////////////////////////////////////
// 註冊函數
// 股票初始化
// 入口參數:
//
hWnd
處理訊息的視窗控制代碼
//
Msg
使用者自訂訊息
//
nWorkMode
介面工作方式, 應等於 RCV_WORK_SENDMSG
// 返回參數:
//
1
成功
//
-1
失敗
int WINAPI
Stock_Init(HWND hWnd,UINT Msg,int nWorkMode);
// 退出,停止發送訊息
// 入口參數:
//
hWnd
處理訊息的視窗控制代碼,同 Stock_Init 的調用入口參數
//
返回參數:
//
1
成功
//
-1
失敗
int WINAPI
Stock_Quit(HWND hWnd);
//////////////////////////////////////////////////////////////////////////////////
// 行情介面
// 取已接收到的股票總數
int WINAPI
GetTotalNumber();
// 由序號取股票資料(擴充)
// 入口參數:
//
nNo
序號
//
pBuf
存放股票資料的緩衝區
// 返回參數:
//
NoStockData
無股票資料
// 注:
//
該函數提供股票資料的主要資料;分析軟體剛運行時,可以快速建立資料架構
int WINAPI
GetStockByNoEx(int nNo,RCV_REPORT_STRUCTEx * pBuf);
// 由股號取股票資料(擴充)
// 入口參數:
//
pszStockCode股票看板代號
//
nMarket
證券市場
//
pBuf
存放股票資料的緩衝區
// 返回參數:
//
NoStockData
無股票資料
// 注:
//
該函數提供股票資料的主要資料;分析軟體剛運行時,可以快速建立資料架構
int WINAPI
GetStockByCodeEx(char * pszStockCode,int nMarket,RCV_REPORT_STRUCTEx * pBuf);
// 啟用接收程式,進行設定
// 入口參數:
//
bShowWindow
TRUE
顯示視窗,進行設定
//
FALSE
隱含視窗
// 返回參數:
//
1
成功
//
-1
失敗
int
WINAPI SetupReceiver(BOOL bShowWindow);
//
取得股票驅動資訊
//
入口參數:
//
nInfo
索引
//
pBuf
緩衝區
//
出口參數:
//
nInfo == RI_IDSTRING,
返回特徵字串長度, pBuf 為特徵字串
//
如:
"TongShi_StockDrv_1.00"
//
nInfo == RI_IDCODE,
返回資訊卡 識別碼, pBuf 為字串形式的 識別碼
//
如:
0x78001234
"78001234"
//
nInfo == RI_VERSION,
返回資訊卡版本號碼, pBuf 為字串版本
//
如: 1.00
"1.00"
//
nInfo == RI_ERRRATE,
取通道誤碼,
//
nInfo == RI_STKNUM,
取上市股票總家數
DWORD WINAPI GetStockDrvInfo(int nInfo,void * pBuf);
#ifdef __cplusplus
}
#endif
#endif // __STOCKDRV_H__