关于大智慧dll的一点心得
-
相关简介:关于大智慧dll的一点心得 这个是网上传播的接口: #ifndef __DZHFUNC_H_ #define __DZHFUNC_H_ #include time.h /* /////////////////////////////////////////////////////////////////////////// 大智慧扩展函数规范V1.10 1.本规范适用于大智慧1.10标准版和专业版公式系统. 2.扩展函数用于实现系统函数不能实现的特殊算法. 3.扩
-
文章来源:股海网作者:股海网发布时间:2016-10-03浏览次数:
关于大智慧dll的一点心得
这个是网上传播的接口:
#ifndef __DZHFUNC_H_
#define __DZHFUNC_H_
#include <time.h>
/*
///////////////////////////////////////////////////////////////////////////
大智慧扩展函数规范V1.10
1.本规范适用于大智慧1.10标准版和专业版公式系统.
2.扩展函数用于实现系统函数不能实现的特殊算法.
3.扩展函数用windows 32位动态连接库实现,建议使用VC++6.0编程.
4.调用时在公式编辑器中写"动态库名称@函数名称"(参数表)即可,见后面的例子
5.动态连接库名称和函数名称可以自己定义.
6.使用时可以将动态库拷贝到大智慧目录下使用.
*/
#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, //月线
MULTI_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量
};
float m_fDataEx[12]; //保留
}STKDATAEx;
/////////////////////////////////////////////////////////////////////////////
/*财务数据顺序(m_pfFinData内容)
序号 内容
0 总股本(万股),
1 国家股,
2 发起人法人股,
3 法人股,
4 B股,
5 H股,
6 流通A股,
7 职工股,
8 A2转配股,
9 总资产(千元),
10 流动资产,
11 固定资产,
12 无形资产,
13 长期投资,
14 流动负债,
15 长期负债,
16 资本公积金,
17 每股公积金,
18 股东权益,
19 主营收入,
20 主营利润,
21 其他利润,
22 营业利润,
23 投资收益,
24 补贴收入,
25 营业外收支,
26 上年损益调整,
27 利润总额,
28 税后利润,
29 净利润,
30 未分配利润,
31 每股未分配,
32 每股收益,
33 每股净资产,
34 调整每股净资,
35 股东权益比,
36 净资收益率
*/
/////////////////////////////////////////////////////////////////////////////
//函数数据结构
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
//m_nParam1Start用以指出参数1是常量参数还是序列参数
//若m_nParam1Start<0, 则参数1为常数参数,参数等于*m_pfParam1;
//若m_nParam1Start>=0,则参数1为序列数参数,m_pfParam1指向一个浮点型数组,
//数组大小为m_nNumData,数据有效范围为m_nParam1Start--m_nNumData.
//在时间上m_pData[x] 与 m_pfParam1[x]是一致的
const int m_nParam1Start;
//1.函数调用参数由m_pfParam1--m_pfParam4带入,若为NULL则表示该参数无效.
//2.当一个参数无效时,则其后的所有参数均无效.
// 如:m_pfParam2为NULL,则m_pfParam3,m_pfParam4一定为NULL.
//3.参数1可以是常数参数或序列数参数,其余参数只能为常数参数.
const float* m_pfParam1; //调用参数1
const float* m_pfParam2; //调用参数2
const float* m_pfParam3; //调用参数3
const float* m_pfParam4; //调用参数3
//函数计算结果用pData->m_pResultBuf带回.
float* m_pResultBuf; //结果缓冲区
const DATA_TYPE m_dataType; //数据类型
const float* m_pfFinData; //财务数据
}CALCINFO;
/////////////////////////////////////////////////////////////////////////
/* 函数输出
__declspec(dllexport) int xxxxxxxx(CALCINFO* pData); ---------- A
__declspec(dllexport) int xxxxxxxxVAR(CALCINDO* pData); ---------- B
1.函数名称需全部大写.
2.函数必须以上述A,B两种形式之一声明,请用实际函数名称替代xxxxxxxx;
对于C++程序还需包括在 extern "C" { } 括号中.
3.上述形式A用于声明不带参数或全部参数为常数的函数;
形式B用于声明参数1为序列数的函数;两种函数的区别在于后者以VAR结尾.
4.函数计算结果用pData->m_pResultBuf带回.
5.函数返回-1表示错误或全部数据无效,否则返回第一个有效值位置,即:
m_pResultBuf[返回值] -- m_pResultBuf[m_nNumData-1]间为有效值.
6.函数名称长度不能超过15字节,动态连接库文件名不能超过9字节(不包括扩展名),
动态库名称不能叫SYSTEM,EXPLORER
7.编译时请请选择1字节对齐
*/
//示例函数,使用时用实际名称替换
__declspec(dllexport) int WINAPI MYMACLOSE(CALCINFO* pData);
__declspec(dllexport) int WINAPI MYMAVAR(CALCINFO* pData);
__declspec(dllexport) int WINAPI MYMACLOSE_CALC_PREV(CALCINFO* pData);
__declspec(dllexport) int WINAPI MYMAVAR_CALC_PREV(CALCINFO* pData);
#ifdef __cplusplus
}
#endif //_cplusplus
#endif //_DZHFUNC_H_
国庆假期,翻了一下网上的大智慧接口,由于本人太不专业,搞的太慢。
发现几个问题:
1、分析周期的枚举数字变成了1-9,不再是文字。
2、基本数据里面,时间,开盘价,收盘价等等都不正确了。应该是名字变了。
3、扩展数据也不正确了,不过这个用处不大。
4、calcinfo这个struct能用,
1)m—nnumdata类似于数据总和,这个接口解释不正确。由于stkdata不正确,*m-pdata就没什么意义了。
2)m-nparamlstart是类似于有数据对应于m—nnumdata的编号。比如k线 是从头就有的,自然就是0,如果k线开始5天后才有数据,那么就是5了。这个接口的解释很拗口。
3)m-nparamlstart所谓常数还是序列也很拗口,常数就是指大智慧编译系统中的变量,比如c,比如ma(c,1)之类,序列就是指数字,一般是自然数。
4)* m_pResultBuf这个输出接口显然太少了,而且只能是float,应该还有其他的输出接口。
一点小心得,总体来说,这个接口也就只能满足一下k线的处理,比如,一些缠轮的分笔连接,缺口的编写,因为内部的编译器在对有未来函数的,或者说不能混合根据k线之后的一些数据进行计算,但这些计算有助于对k线整体的理解。尽管dll有优势,但单单这个接口用于k线处理很划不来。
我很想找更详细的接口,主要用于自定义数据的处理,目前来看行情软件提供的k线信息,成交量已经满足不了多数短线要求了。