通达信DLL插件编写大众化教程
-
相关简介:通达信DLL插件编写大众化教程 要想象编普通公式一样编DLL插件,我们必须掌握C语言里的for语句的用法,我们不用理解具体的含义,更不需要死记硬背下来,我们只要知道最基本的结构就可以了, 本来我是记不住的,现在想想就能打出代码来了 void SMA(int DataLen, float*pfOUT, float*pfINa, float*pfINb, float*pfINc) 这一行,在C语言里叫指针,在通达信里就叫输入参数的,讲得高雅一点,就是通达信的接口 除了void 后面的那三个字母要各种
-
文章来源:股海网作者:股海网发布时间:2019-01-05浏览次数:
通达信DLL插件编写大众化教程
要想象编普通公式一样编DLL插件,我们必须掌握C语言里的for语句的用法,我们不用理解具体的含义,更不需要死记硬背下来,我们只要知道最基本的结构就可以了,
本来我是记不住的,现在想想就能打出代码来了
void SMA(int DataLen, float*pfOUT, float*pfINa, float*pfINb, float*pfINc)
这一行,在C语言里叫指针,在通达信里就叫输入参数的,讲得高雅一点,就是通达信的接口
除了void 后面的那三个字母要各种改以外,别的全部不要动,这个是固定的模式
我们还要记住一个英文单词
因为很多时间,我用自定义的参数,用这个英文要方便很多
fTemp 中文是什么或者怎么读,我也不会,哈哈,如果你认为我不行,可以不用看下面了
我们编公式要用到变量和参数,变量因为是计算出来的,会有小数点,所以用float在指针那一行下面申明一下
参数很多时候用的都是整数,我们就用int来申明一下;
N=9;
V1:MA(C,N);
比如说这个公式,V1就是变量,N就是参数
那么我们用fTemp代替V1
申明就这样写了
void SMA(int DataLen, float*pfOUT, float*pfINa, float*pfINb, float*pfINc)
float fTemp =0.0;
int N = 0;
申明写完了,我们要开始写一个for语句
void SMA(int DataLen, float*pfOUT, float*pfINa, float*pfINb, float*pfINc)
float fTemp =0.0;
int N = 0;
for(int i = 1;i<DataLen;i++)
这句意思就是说,申明i等于1(或者你等于零也可以,i后面要是有计算式的话,删掉,至少我删了好多都证明是可行的),第一句用分号结束,第二句,如果i小DataLen,那么i++,意思就是可以朝下进行,再加一次,进入下面的语句,如果不是小于,是大于或等于了,那么就结束了,程序就不朝下运行了,这是固定不变的,所有的for开头的语句都是这样的
一个完整的for开头的语句就是这样了
void SMA(int DataLen, float*pfOUT, float*pfINa, float*pfINb, float*pfINc)
float fTemp =0.0;
int N = 0;
for(int i = 1;i<DataLen;i++)
{
}
给一个大括句最好,如果不给,只算第一行的,下面的就不算了
再继续下面
void SMA(int DataLen, float*pfOUT, float*pfINa, float*pfINb, float*pfINc)
float fTemp =0.0;
int N = 0;
for(int i = 1;i<DataLen;i++)
{
pfOUT = pfINa//这个地方有一个大括号中间有一个i看图,论坛会漏掉
}
看截图
那么,这就是一个完整的for语句了,记住一句,所有的for开头的语句,你可以全部放在一个for语句里各种计算;
看我的这个帖子,那些五天线,十天线,还有二十天线,我们全部放在一起计算
我们要这样做:
比如说我们要计算一个公式,这个公式要求是五天线大于十天线,十天线大于二十天线,我们这样来处理
void SMA(int DataLen, float*pfOUT, float*pfINa, float*pfINb, float*pfINc)
float fTemp =0.0;
float fTemp1 =0.0;
float fTemp2 =0.0;
float fTemp3 =0.0;
float fTemp4 =0.0;
float sum = 0.0;
int N = 0;
for(int i = 1;i<DataLen;i++)
{
for (int j = 0;
j < 5; j++)
sum = sum + pfINa[i - j];
fTemp1 = sum / 5;
for (int j = 0;
j < 10; j++)
sum = sum + pfINa[i - j];
fTemp2 = sum / 10;
for (int j = 0;
j < 20; j++)
sum = sum + pfINa[i - j];
fTemp3 = sum / 20;
pfOUT = fTemp1 > fTemp2 > fTemp2;
}
提个醒,pfOUT后面有一个大括号,大括号里有一个小写的i
只要是for开头的,全部可以把第一个for省略掉,然后放在一起加减乘除,今天大于明天那些全部是一样的,总之思路或者说方法就是这样,怎样发挥,你自己想吧,就是你想怎样都可以 ,如果你明白了这帖子的话
前提条件是for的第一句表达式必须是一样,那些五天线还有十天线为什么不能用一个for了,因为括号里有5,还有10,还有20,是不一样的,如果是一样,仍然可以再省略掉,只用一个for
两个一样的for,,就是后面的语句是一样的,你编在一起,会把cpu累死,反正我死了好多次机了
如果再给一个不是for开头的,可以直接申明一个fTemp 变量
等代替上一个语句里的pfOUT
然后把fTemp
换成下一个语句的里
pfINa这个参数