通达信提供了插件选股功能,可以自己用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线形态进行统计分析。