加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]飞狐交易师C++接口编程

(2013-03-24 16:06:24)
标签:

转载

分类: 转帖
存档备查

用Microsoft Visual C++6.0制作dll文件流程


在Microsoft Visual C++6.0环境中
file -- > new --> projects -->win32 dynamic-Link Library(动态链接库) -->

键入projectname,例如”CZSC” -->empty project -->OK
把.cpp及.H档或其它相关档全部复制到project目录
project - -> add to projects - -> files - - >添加所有文件
build   - -> build CZSC.dll

-------------------------------------------------------------------------

飞狐提供的原码:

-------------------------------------------------------------------------

 

-------------------------------------------------------------------------

FoxFunc.cpp

-------------------------------------------------------------------------

 

// FoxFunc.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "FoxFunc.h"

BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
           )
{
    switch (ul_reason_for_call)
  {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
      break;
    }
    return TRUE;
}

//计算收盘价的均价,一个常数参数,表示计算周期
//调用方法:
//  "FOXFUNC@MYMACLOSE"(5)

__declspec(dllexport) int WINAPI MYMACLOSE(CALCINFO* pData)
{
  if ( pData->m_pfParam1 &&        //参数1有效
     pData->m_nParam1Start<0 &&      //参数1为常数
     pData->m_pfParam2==NULL )      //仅有一个参数
  {
    float fParam = *pData->m_pfParam1;
    int nPeriod = (int)fParam;      //参数1
    if(nPeriod>0)
    {
      float fTotal;
      int i, j;
      for ( i = nPeriod-1; i < pData->m_nNumData; i++ )//计算nPeriod周期的均线,数据从nPeriod-1开始有效
      {
        fTotal = 0.0f;
        for ( j = 0; j < nPeriod; j++ )        //累加
          fTotal += pData->m_pData[i-j].m_fClose;
        pData->m_pResultBuf[i] = fTotal/nPeriod;  //平均
      }
      return nPeriod-1;
    }
  }
  return -1;
}

//计算均价,2个参数,参数1为待求均线的数据,参数2表示计算周期
//调用方法:
//  "FOXFUNC@MYMAVAR"(CLOSE-OPEN,5)

__declspec(dllexport) int WINAPI MYMAVAR(CALCINFO* pData)
{
  if(pData->m_pfParam1 && pData->m_pfParam2 &&   //参数1,2有效
    pData->m_nParam1Start>=0 &&          //参数1为序列数
    pData->m_pfParam3==NULL)          //有2个参数
  {
    const float*  pValue = pData->m_pfParam1;  //参数1
    int nFirst = pData->m_nParam1Start;      //有效值起始位
    float fParam = *pData->m_pfParam2;      //参数2
    int nPeriod = (int)fParam;     

    if( nFirst >= 0 && nPeriod > 0 )
    {
      float fTotal;
      int i, j;
      for ( i = nFirst+nPeriod-1; i < pData->m_nNumData; i++ )
      {
        fTotal = 0.0f;
        for ( j=0; j < nPeriod; j++ )      //累加
          fTotal += pValue[i-j];
        pData->m_pResultBuf[i] = fTotal/nPeriod;//平均
      }
      return nFirst+nPeriod-1;
    }
  }
  return -1;
}

//计算多个序列的均值,5个参数,参数1-4为待求多个序列,参数5用于举例说明数值参数的用法,实际在此例中无需该参数

__declspec(dllexport) int WINAPI MYBBI(CALCINFO* pData)
{
  if ( pData->m_pCalcParam[0].m_nParamStart >= 0 &&
     pData->m_pCalcParam[1].m_nParamStart >= 0 &&
     pData->m_pCalcParam[2].m_nParamStart >= 0 &&
     pData->m_pCalcParam[3].m_nParamStart >= 0 )      //4个序列都含有效数值
  {
    //计算返回的序列的第一个有效值位置
    int nFirst = pData->m_pCalcParam[3].m_nParamStart;    //已知返回的序列的第一个有效值位置与第4个序列一致
//若不知,则

    const float* pValue1 = pData->m_pCalcParam[0].m_pfParam;
    const float* pValue2 = pData->m_pCalcParam[1].m_pfParam;
    const float* pValue3 = pData->m_pCalcParam[2].m_pfParam;
    const float* pValue4 = pData->m_pCalcParam[3].m_pfParam;
    int nNum = (int)(pData->m_pCalcParam[4].m_fParam);    //实际上该例中已知nNum=4,在此用于说明数值参数的用法
    for( int i = nFirst; i < pData->m_nNumData; i++ )
    {
      pData->m_pResultBuf[i] =
        (pValue1[i] + pValue2[i] + pValue3[i] + pValue4[i])/nNum;
    }
    return nFirst;
  }
  return -1;
}

 

-------------------------------------------------------------------------

FoxFunc.h

-------------------------------------------------------------------------

#ifndef __FOXFUNC_H_INCLUDE
#define __FOXFUNC_H_INCLUDE

 

#ifdef __cplusplus
extern "C"
{
#endif //__cplusplus

////////////////////////////////////////////////////
//分析周期
////////////////////////////////////////////////////
enum DATA_TYPE
{
 TICK_DATA=2,    //分笔成交
 MIN1_DATA,     //1分钟线
 MIN5_DATA,     //5分钟线     
 MIN15_DATA,     //15分钟线
 MIN30_DATA,     //30分钟线
 MIN60_DATA,     //60分钟线
 DAY_DATA,     //日线
 WEEK_DATA,     //周线
 MONTH_DATA,     //月线
 YEAR_DATA,     //年线
 MULTIDAY_DATA,    //多日线
 MULTIMIN_DATA,    //多分钟线
 MULTISEC_DATA    //多秒线
};

////////////////////////////////////////////////////
//基本数据
////////////////////////////////////////////////////

typedef struct tagSTKDATA 
{
 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;  //下跌家数(仅大盘有效)
} STKDATA;

////////////////////////////////////////////////////
//扩展数据,用于描述分笔成交数据的买卖盘
////////////////////////////////////////////////////

typedef union tagSTKDATAEx
{
 struct
 {
  float m_fBuyPrice[3];  //买1--买3价
  float m_fBuyVol[3];   //买1--买3量
  float m_fSellPrice[3];  //卖1--卖3价 
  float m_fSellVol[3];  //卖1--卖3量
  DWORD m_dwToken;   //成交方向
 };
 float m_fDataEx[13];
} STKDATAEx;

////////////////////////////////////////////////////
//除权数据
////////////////////////////////////////////////////

typedef struct tagSPLITDATA 
{
 time_t m_time;   //时间,UCT
 float m_fHg;   //红股
 float m_fPg;   //配股
 float m_fPgj;   //配股价
 float m_fHl;   //红利
} SPLITDATA;


////////////////////////////////////////////////////

////////////////////////////////////////////////////
//调用参数项结构
////////////////////////////////////////////////////
typedef struct tagCALCPARAM
{
 union
 {
  const float* m_pfParam;    //序列参数,指向一个浮点型数组 
  const float  m_fParam;    //数值参数 
 };
 const int   m_nParamStart;   //序列参数有效起始位置
}CALCPARAM;


////////////////////////////////////////////////////
//调用接口信息数据结构
////////////////////////////////////////////////////
typedef struct tagCALCINFO
{
 const DWORD   m_dwSize;    //结构大小
 const DWORD   m_dwVersion;   //调用软件版本(V2.10 : 0x210)
 const DWORD   m_dwSerial;    //调用软件序列号
 const char*   m_strStkLabel;   //股票代码
 const BOOL   m_bIndex;    //大盘

 const int   m_nNumData;    //数据数量(pData,pDataEx,pResultBuf数据数量)
 const STKDATA*  m_pData;    //常规数据,注意:当m_nNumData==0时可能为 NULL
 const STKDATAEx* m_pDataEx;    //扩展数据,分笔成交买卖盘,注意:可能为 NULL

 const int   m_nParam1Start;   //参数1有效起始位置
 const float*  m_pfParam1;    //调用参数1 
 const float*  m_pfParam2;    //调用参数2
 const float*  m_pfParam3;    //调用参数3
 const float*  m_pfParam4;    //调用参数3

 float*    m_pResultBuf;   //结果缓冲区
 const DWORD   m_dataType;    //数据类型
 const float*  m_pfFinData;   //财务数据

//以上与分析家兼容,所以沿用其结构和名称

//以下为飞狐交易师扩展

 const DWORD   m_dwReserved;   // 保留

 const int   m_nNumParam;   // 调用参数数量
 const CALCPARAM* m_pCalcParam;   // 调用参数数组

 const DWORD   m_dwReservedEx[4];  // 保留

 char*    m_strStkName;   //股票名称

 SPLITDATA*   m_pSplitData;   //除权数据
 int     m_nNumSplitData;  //除权次数

} CALCINFO;

 


////////////////////////////////////////////////////

//示例函数,使用时用实际名称替换
__declspec(dllexport) int WINAPI MYMACLOSE(CALCINFO* pData);
__declspec(dllexport) int WINAPI MYMAVAR(CALCINFO* pData);
__declspec(dllexport) int WINAPI MYBBI(CALCINFO* pData);

#ifdef __cplusplus
}
#endif //__cplusplus


#endif //__FOXFUNC_H_INCLUDE

 

 

此外还包括StdAfx.h和StdAfx.cpp

 

0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有