之后点击打开文件通达信dll
第三步点击文件—新建—项目
这里会看到这个通达信dll界面,点箭头标注的地方
第四步:点win32项目,给这个项目起个名称,名称ChanlunTdx
第五步:确认,点下一步
第六步选择dll,选择完成通达信dll
第七步通达信dll
第八步:点头文件,点添加,点现有项通达信dll
找到通达信dll的编程规范并解压,打开所解压的文件夹
双击添加通达信dll提供的头文件
把通达信dll提供的头文件名称改成:ChanLunTdx
将通达信dll以下代码复制进去
#ifndef__PLUGIN_TCALC_FUNC
#define__PLUGIN_TCALC_FUNC
#pragmapack(push,1)
//函数(数据个数,输出,输入a,输入b,输入c)
typedefvoid(*pPluginFUNC)(int,float*,float*,float*,float*);
typedefstructtagPluginTCalcFuncInfo
{
unsignedshortnFuncMark;//函数编号
pPluginFUNCpCallFunc;//函数地址
}PluginTCalcFuncInfo;
typedefBOOL(*pRegisterPluginFUNC)(PluginTCalcFuncInfo**);
//RegisterTdxFunc函数为注册函数,用户的函数全部都放入PluginTCalcFuncInfo结构的全局数组g_CalcFuncSets中。
typedefBOOL(*pRegisterPluginFUNC)(PluginTCalcFuncInfo**);
//=======================================
extern"C"
{
//__cplusplus
__declspec(dllexport)BOOLRegisterTdxFunc(PluginTCalcFuncInfo**pFun);
}
#pragmapack(pop)
#endif
复制下面的内容到红框后,对着截图通达信dll排好版,这很重要,这一步也是最关键:
#ifndef__PLUGIN_TCALC_FUNC
#define__PLUGIN_TCALC_FUNC
#pragmapack(push,1)
//函数(数据个数,输出,输入a,输入b,输入c)
typedefvoid(*pPluginFUNC)(int,float*,float*,float*,float*);
typedefstructtagPluginTCalcFuncInfo
{
unsignedshortnFuncMark;//函数编号
pPluginFUNCpCallFunc;//函数地址
}PluginTCalcFuncInfo;
typedefBOOL(*pRegisterPluginFUNC)(PluginTCalcFuncInfo**);
//RegisterTdxFunc函数为注册函数,用户的函数全部都放入PluginTCalcFuncInfo结构的全局数组g_CalcFuncSets中。
typedefBOOL(*pRegisterPluginFUNC)(PluginTCalcFuncInfo**);
//=======================================
extern"C"
{
//__cplusplus
__declspec(dllexport)BOOLRegisterTdxFunc(PluginTCalcFuncInfo**pFun);
}
#pragmapack(pop)
#endif
快速操作与重构通达信dll
消除曲线错误提示后,左键点通达信dll这个
将红框的通达信dll全删除
删除掉之后点击通达信dll这个
以下通达信dll代码全部复制进去:
//ChanLunTdx.cpp:定义DLL应用程序的导出函数。
//
#include"stdafx.h"#include"ChanLunTdx.h"
//生成的dll及相关依赖dll请拷贝到通达信安装目录的T/dlls/下面,再在公式管理器进行绑定
//函数:EMA(X,N)
//说明:指数平滑移动平均卖一价求指数平滑移动平均。
//用法:EMA(X,N),求X的N日指数平滑移动平均。
//算法:若Y=EMA(X,N)则Y=[2*X+(N-1)*Y]/(N+1),其中Y表示上一周期Y值。
//例如:EMA(CLOSE,30)表示求30日指数平滑均价
//通达信中用的时候,第一个输入参数是收盘价,第2个输入参数是常量,第三个输入参数为空;
voidEMA(intDataLen,float*pfOUT,float*pfINa,float*pfINb,float*pfINc)
{
floatfTemp=0.0;
intN=int(*pfINb);
pfOUT[0]=0.0;
for(inti=1;
iDataLen;i++)
pfOUT=(2*pfINa+(N-1)*pfOUT[i-1])/(N+1);
}
//----------------------------------------------函数MA(X,N)-----------------------------------
//别名:简单移动平均
//所属类别:引用函数参数数量:2
//求简单移动平均。
//用法:MA(X,N),求X的N日简单移动平均值。
//算法:(X1+X2+X3+...+Xn)/N
//例如:MA(CLOSE,20)表示求20日均价
//通达信中用的时候,第一个输入参数是收盘价,第2个输入参数是常量,第三个输入参数为空;
//A:=TDXDLL2(2,C,5,0);
//B:=TDXDLL2(2,C,10,0);
//A,COLORWHITE;
//B,COLORYELLOW;
voidMA(intDataLen,float*pfOUT,float*pfINa,float*pfINb,float*pfINc)
{
intN=int(*pfINb);
floatsum;
for(inti=N-1;iDataLen;i++)
{
sum=0.0;
for(intj=0;
jN;j++)
sum=sum+pfINa[i-j];
pfOUT=sum/N;
}
}
//加载的函数
PluginTCalcFuncInfog_CalcFuncSets[]=
{
{1,(pPluginFUNC)EMA},
{2,(pPluginFUNC)MA},
{0,NULL},
};
//导出给TCalc的注册函数
BOOLRegisterTdxFunc(PluginTCalcFuncInfo**pFun)
{
if(*pFun==NULL)
{
(*pFun)=g_CalcFuncSets;
returnTRUE;
}
returnFALSE;
}
对着图排好版,有一个好方法,就是按删除键,删到上一行的末尾的时候再按确认键,让软件默认排
这是上半部分通达信dll
从最下层朝上排版
对着图排好版,有一个好方法,就是按删除键,删到上一行的末尾的时候再按确认键,让软件默认排通达信dll
这是下半部分
从最后朝前排版通达信dll
点生成,点生成解决方案通达信dll
删除掉无效的框框内的内容,注意看好内容,别删错通达信dll
到这一步已经生成成功了!看看能不能绑定通达信dll
右键点击这个项目名称,点击最后一行属性,打开文件资源管理器中的文件夹通达信dll
看好路径,打开这个文件通达信dll
我们的劳动成果就是这个通达信dll,一定要保管好,先复制下
打开dlls文件夹,把我们的劳动成果复制进去
通达信dll点dll函数,dll绑定
这里通达信dll名字自己想,点主图叠加
A:=TDXDLL1(2,C,5,0);
B:=TDXDLL1(2,C,10,0);
CC:=TDXDLL1(1,C,10,0);
A,COLORWHITE;
B,COLORYELLOW;
CC,COLORGREEN;
成功了通达信dll完成了恭喜你