zoukankan      html  css  js  c++  java
  • 网际风的通视接口 武胜

    网际风的通视接口,看说明文档半天也看不明白,网上也没有找到合适的内容,主要就是使用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,
    返回信息卡 ID 号, pBuf 为字符串形式的 ID 号
    //
    如:
    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__

  • 相关阅读:
    胜利大逃亡
    求最小环
    Prime算法
    网站根目录下没有正确的DNT.config文件 (不同类型错误更新中)
    Day4_代码重用与函数
    Day1_算法分析方法
    Day3_字符串操作与正则表达式
    错误解决一_call time passbyreference removed
    Day1_PHP快速入门
    silverlight 动态加载树形菜单[带图标],方法一
  • 原文地址:https://www.cnblogs.com/zeroone/p/2969250.html
Copyright © 2011-2022 走看看