图文手把手教你一步步用VC++6.0编写大智慧365插件.doc
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
动态库名称不能叫 SYSTEM,EXPLORER 7.编译时请请选择 1 字节对齐
*/
//示例函数,使用时用实际名称替换 __declspec(dllexport) int WINAPI MYMACLOSE(CALCINFO* pData); __declspec(dllexport) int WINAPI MYMAVAR(CALCINFO* pData);
};
/////////////////////////////////////////////////////////////////////////// //基本数据
typedef struct tagSTKDATA
{
time_t m_time;
//时间,UCT
float m_fOpen;
//开盘
//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 const float* }CALCINFO;
m_dataType; m_pfFinData;
//数据类型 //财务数据
///////////////////////////////////////////////////////////////////////// /* 函数输出
__declspec(dllexport) int WINAPI MYMACLOSE_CALC_PREV(CALCINFO* pData); __declspec(dllexport) int WINAPI MYMAVAR_CALC_PREV(CALCINFO* pData);
#ifdef __cplusplus } #endif //_cplusplus
第三步、File-New,新建一个头文件 DzhFunc.h,这是分析家的接口定义,最好原封不动地 拷贝过来:
#ifndef __DZHFUNC_H_ #define __DZHFUNC_H_
#include <time.h> /* /////////////////////////////////////////////////////////////////////////// 大智慧扩展函数规范 V1.10 1.本规范适用于大智慧 1.10 标准版和专业版公式系统. 2.扩展函数用于实现系统函数不能实现的特殊算法. 3.扩展函数用 windows 32 位动态连接库实现,建议使用 VC++6.0 编程. 4.调用时在公式编辑器中写"动态库名称@函数名称"(参数表)即可,见后面的例子 5.动态连接库名称和函数名称可以自己定义. 6.使用时可以将动态库拷贝到大智慧目录下使用. */
序号 内容
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 净资收益率 */
//买 1--买 3 价 //买 1--买 3 量
//卖 1--卖 3 价 //卖 1--卖 3 量
//保留
///////////////////////////////////////////////////////////////////////////// /*财务数据顺序(m_pfFinData 内容)
图文手把手教你一步步用 VC++6.0 编写大 智慧 365 插件
按照图文提示,一步步往下走,按照说明,创建 VC++6.0 工程,把文中的代码拷贝到 文中说明的位置,编译运行,绝对通过! 深谷老榆制作,2015.2.3
本来都是玩儿的,但是为了挣点儿下载券啊,所以,同志们,我心不贪,就两个下载券, 我不多要。
第五步、 把下面代码全部拷贝到 MyDzhDll.cpp 文件中去:
//计算收盘价的均价,一个常数参数,表示计算周期 //调用时在公式编辑器中写"动态库名称@函数名称"(参数表), //例如:"mydzhdll@mymaclose"(10) /* 注:
1.函数调用参数由 CALCINFO 中的 m_pfParam1--m_pfParam4 带入,若为 NULL 则表示该参 数无效. 2.当一个参数无效时,则其后的所有参数均无效.
}STKDATA;
//////////////////////////////////////////////////////////////////////////// //扩展数据,用于描述分笔成交数据的买卖盘
typedef union tagSTKDATAEx {
struct {
float m_fBuyPrice[3]; float m_fBuyVol[3]; float m_fSellPrice[3]; float m_fSellVol[3]; }; float m_fDataEx[12]; }STKDATAEx;
float m_fHigh; //最高
float m_fLow;
//最低
float m_fClose;
//收盘
float m_fVolume;
//成交量
float m_fAmount;
//成交额
WORD m_wAdvance; //上涨家数(仅大盘有效)
WORD m_wDecline; //下跌家数(仅大盘有效)
) {
switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break;
} return TRUE; }
///////////////////////////////////////////////////////////////////////////// //函agCALCINFO
{
const DWORD
m_dwSize;
const DWORD
m_dwVersion;
第一步、File->New,在弹出的下面窗口中选择“Win32 Dynamic-Link Library” ,并填写工 程名称,自己命名,我这里是 MyDzhDll。
第二步、点击“OK”按钮,出现下面窗口:
选择“A simple DLL project” 。点击“Finish”按钮。程序框架基本搭成。
__declspec(dllexport) int xxxxxxxx(CALCINFO* pData); ---------- A __declspec(dllexport) int xxxxxxxxVAR(CALCINDO* pData); ---------- B
1.函数名称需全部大写. 2.函数必须以上述 A,B 两种形式之一声明,请用实际函数名称替代 xxxxxxxx;
const DWORD
m_dwSerial;
const char*
m_strStkLabel;
const BOOL
m_bIndex;
//结构大小 //调用软件版本(V2.10 : 0x210)
//调用软件序列号 //股票代码 //大盘
const int
m_nNumData;
量)
const STKDATA*
//若 m_nParam1Start<0, 则参数 1 为常数参数,参数等于*m_pfParam1;
//若 m_nParam1Start>=0,则参数 1 为序列数参数,m_pfParam1 指向一个浮点型数组,
//数组大小为 m_nNumData,数据有效范围为 m_nParam1Start--m_nNumData.
m_pData;
为 NULL
//数据数量(pData,pDataEx,pResultBuf 数据数 //常规数据,注意:当 m_nNumData==0 时可能
const STKDATAEx* m_pDataEx; NULL
//扩展数据,分笔成交买卖盘,注意:可能为
//m_nParam1Start 用以指出参数 1 是常量参数还是序列参数
数组大小为 m_nNumData,数据有效范围为 m_nParam1Start--m_nNumData. 在时间上 m_pData[x] 与 m_pfParam1[x]是一致的 */
//---------------------------- 函数 MA(N)-------------------------//这是一个求 N 日收盘平均价的函数,参数 N 将从 m_pfParam1 中传入 //用法:MA(N),求某量 X 的 N 日简单移动平均值。 //算法:(X1+X2+X3+...+Xn)/N //例如:MA(20)表示求 20 日均价 //求哪个量的 N 日平均?结构指针 STKDATA* m_pData 的成员 m_fClose。 //使用方式 "MyDzhDll@MYMACLOSE"(5) //-----------------------------函数源码----------------------------
#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
//多日线
//在时间上 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.
如:m_pfParam2 为 NULL,则 m_pfParam3,m_pfParam4 一定为 NULL. 3.m_pfParam1 可以是常数参数或序列数参数,其余参数只能为常数参数. 4.若 m_nParam1Start<0, 则参数 1 为常数参数,参数等于*m_pfParam1; 5.若 m_nParam1Start>=0,则参数 1 为序列数参数,m_pfParam1 指向一个浮点型数组,
对于 C++程序还需包括在 extern "C" { } 括号中. 3.上述形式 A 用于声明不带参数或全部参数为常数的函数; 形式 B 用于声明参数 1 为序列数的函数;两种函数的区别在于后者以 VAR 结尾. 4.函数计算结果用 pData->m_pResultBuf 带回. 5.函数返回-1 表示错误或全部数据无效,否则返回第一个有效值位置,即: m_pResultBuf[返回值] -- m_pResultBuf[m_nNumData-1]间为有效值. 6.函数名称长度不能超过 15 字节,动态连接库文件名不能超过 9 字节(不包括扩展名),
财务数据顺序mpffindata内容序号内容a2转配股总资产千元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净资收益率函数数据结构typedefstructtagcalcinfoconstdwordmdwsize
#endif //_DZHFUNC_H_
第四步、打开 MyDzhDll.cpp 文件,修改 DllMain 函数如下所示,红字是添加的部分:
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved