通达信选股插件开发

风行水上 @ 2011-07-14 16:27:40
标签:

通达信提供了插件选股功能,可以自己用C/C++语言开发选股插件。

把编译好的插件dll文件放入通达信目录下的plugin目录下,通过菜单功能>选股器>插件选股就可以使用了。

#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers 
#include <windows.h>

#define PLUGIN_EXPORTS
#include "plugin.h"        

/**********************************************************************
 * MinGW 编译
 *   g++ -shared -mwindows -o MyPlugin.dll MyPlugin.cpp
 **********************************************************************/

BOOL APIENTRY DllMain(HANDLE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){
  switch (fdwReason) {
    case DLL_PROCESS_ATTACH:  // 进程加载
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:  // 进程卸载
      break;
  }
  return TRUE;
} 

/*********************************************************
 * 注册K线数据读取回调函数
 *********************************************************/
PDATAIOFUNC  readKData; // 读取K现数据的回调函数
void RegisterDataInterface(PDATAIOFUNC pfn){ 
  readKData = pfn;
}        

/*********************************************************
 * 注册插件信息
 *********************************************************/
void GetCopyRightInfo(LPPLUGIN info) {
  //基本信息
  strcpy(info->Name,     "名称与版本");
  strcpy(info->Dy,       "产地");
  strcpy(info->Author,   "作者");
  strcpy(info->Descript, "选股描述");
  strcpy(info->Period,   "适应周期");
  strcpy(info->OtherInfo,"其他信息");
  //参数信息
  info->ParamNum = 2;                                  // 0<=参数个数<=4
  strcpy(info->ParamInfo[0].acParaName,"MA天数1");     // 参数的中文名称
  info->ParamInfo[0].nMax=1;                           // 参数最小取值范围 
  info->ParamInfo[0].nMax=1000;                        // 参数最大取值范围
  info->ParamInfo[0].nDefault=13;                      // 参数默认值
} 


/*********************************************************
 * 根据全部本地历史数据进行判断
 * 返回真值(TRUE)为选中
 *********************************************************/

BOOL InputInfoThenCalc1(
  char * Code,    // 股票代码 e.g.  002036
  short nSetCode, // 股票市场 0=深市, 1=沪市
  int Value[4],   // 选股参数
  short DataType, // 数据类型,默认为日K线历史数据,如申请行情数据则赋值为 REPORT_DAT
  short nDataNum, // 数据个数
  BYTE nTQ,       // 是否精确除权
  unsigned long unused
) {
  // 分配空间
  LPHISDAT pHisDat = new HISDAT[nDataNum];  //数据缓冲区
  //利用回调函数申请数据,返回得到的数据个数
  NTime tmpTime={0};  
  long readnum = m_pfn(Code,nSetCode,DataType,pHisDat,nDataNum,tmpTime,tmpTime,nTQ,0);  
  // 计算
  /* ... ... */
  // 释放空间
  delete []pHisDat;
  return TRUE
}

/*********************************************************
 * 根据给定时间区间内的本地历史数据进行判断
 * 返回真值(TRUE)为选中
 *********************************************************/
BOOL InputInfoThenCalc2(
  char * Code,    // 股票代码 e.g.  002036
  short nSetCode, // 股票市场 0=深市, 1=沪市
  int Value[4],   // 选股参数
  short DataType, // 数据类型,默认为日K线历史数据,如申请行情数据则赋值为 REPORT_DAT
  NTime time1,    // 起始时间
  NTime time2,    // 结束时间
  BYTE nTQ,       // 是否精确除权
  unsigned long unused
) {
  // 计算区间内数据个数
  long nDataNum = readKData(Code,nSetCode,DataType,NULL,-1,time1,time2,nTQ,0); 
  // 分配空间
  LPHISDAT pHisDat = new HISDAT[datanum];
  // 读取数据
  long readnum = readKData(Code,nSetCode,DataType,pHisDat,datanum,time1,time2,nTQ,0); 
  // 计算
  /* ... ... */
  // 释放空间
  delete []pHisDat;
  return TRUE
}
 
/*****************定义在文件 "OutStruct.h" 中的数据结构 ********************* 
struct NTime {
  unsigned short year;
  unsigned char month;
  unsigned char day;
  unsigned char hour;
  unsigned char minute;
  unsigned char second;
};     

struct HISDAT {
  NTime Time;	    //时间
  float Open;	    //单位开盘价
  float High;	    //单位最高价
  float Low;	    //单位最低价
  float Close;	    //单位收盘价
  float Amount;     //成交额
  DWORD Volume;     //单位成交量,指数无成交量
  union { 
    float YClose;   // 单位前收盘价(除权用) 或者 期货的持仓量
    struct {   
      WORD up;      // 上涨家数
      WORD down;    // 下跌家数
    } zd;	    // 单位前收盘价(除权用),期货的持仓量
  };
};

*************************************************************************/

选股插件的其他用途

利用通达信的选股插件,除了用来选股,也可以用来坐些数据统计和分析工作。

因为根据全部本地历史数据选股(InputInfoThenCalc1)时,实际上是已经提供了一个遍历个股全部数据的方法。可以借此,比如说,查找符合特定模式的K线形态进行统计分析。

参考资源

标签:

分享到:
comments powered by Disqus

52/60ms