- 金币:
-
- 奖励:
-
- 热心:
-
- 注册时间:
- 2005-10-20
|
|
/////////////////////////////////////////////////////////////////////////////////////////
//jaofunc.c:飞狐交易师"C语言接口"公用函数内容文件1->程序体部分
/////////////////////////////////////////////////////////////////////////////////////////
//========================================================================================================================
//jf_llv: 计算简单移动最小值(数组,起始,结束,周期,结果)
// Y=MIN(X,N)=MIN(X1+X2+...+Xn),N>0
int jf_llv(const float* x,int b,int e,int n,float* y)
{
for(int i=b; i<=e; i++)
{
int j=i-1; float r=x; int s=1;
while(j>=b)
{
s++;
if(s<=n){ if(x[j]<r) r=x[j]; } else break;
j=j-1;
}
y=r;
}
return 1;
}
//========================================================================================================================
//jf_hhv: 计算简单移动最大值(数组,起始,结束,周期,结果)
// Y=MAX(X,N)=MAX(X1+X2+...+Xn),N>0
int jf_hhv(const float* x,int b,int e,int n,float* y)
{
for(int i=b; i<=e; i++)
{
int j=i-1; float r=x; int s=1;
while(j>=b)
{
s++;
if(s<=n){ if(x[j]>r) r=x[j]; } else break;
j=j-1;
}
y=r;
}
return 1;
}
//========================================================================================================================
//jf_ma: 计算简单移动平均值(数组,起始,结束,周期,结果)
// Y=MA(X,N)=(X1+X2+...+Xn)/N,N>0
int jf_ma(const float* x,int b,int e,int n,float* y)
{
float r=0.00; int s=0;
for(int i=b; i<=e; i++)
{
r=r+x;
if(s<n) s++; else r=r-x[i-s];
y=r/s;
}
return 1;
}
//========================================================================================================================
//jf_sma: 计算加权移动平均值(数组,起始,结束,周期,权重,结果)
//Y=SMA(X,N,M)=(M*X+(N-M)*Y')/N, N>0,N>M,Y'=Yi-1,Y0=X
int jf_sma(const float* x,int b,int e,int n,int m,float* y)
{
y=x; int z=n-m;
for(int i=b+1; i<=e; i++)
{
y=(m*x+z*y[i-1])/n;
}
return 1;
}
//========================================================================================================================
//jf_ema: 计算平滑移动平均值(数组,起始,结束,周期,结果)
//Y=EMA(X,N)=[2*X+(N-1)*Y']/(N+1), N>0,Y'=Yi-1,Y0=X
int jf_ema(const float* x,int b,int e,int n,float* y)
{
y=x; int z1=n-1,z2=n+1;
for(int i=b+1; i<=e; i++)
{
y=(2*x+z1*y[i-1])/z2;
}
return 1;
}
//=======================================================================================
//jf_logic: 逻辑运算子程序
//(a & b | c) | (e & d | f),代码:"&"=2 "|"=3 "!"=4 "("=5 ")"=6
int jf_logic(ID* pId,int s)//s: 1.主逻辑调用,0/非1.非逻辑调用
{
//-------------------------------------------------------------------------------------
//处理:变量声明
ID* pIe=pId; if(((int)pIe)==0) return 0;//当前链接指针
ID* pIr; ID* pIt; //前后链接指针
int r=0; //计算结果清零
int o=0; //操作符清零
int f=0; //递归调用及返回标志清零
//-------------------------------------------------------------------------------------
//处理:逻辑与或非
pIe=pId;
while(1)//循环:处理逻辑与或,每处理一次释放当前内存
{
pIr=(ID*)pIe->pIr; pIt=(ID*)pIe->pIt;//前后链接指针
switch(pIe->iDt)//当前数据
{
case 0://"0"
case 1://"1"
{
switch(o)
{
case 0:{r=pIe->iDt; break;}//" "
case 3:{r=r & pIe->iDt; break;}//"&"
case 4:{r=r | pIe->iDt; break;}//"|"
default:{}
}
break;
}
case 2:
{
switch(o)
{
case 0:{r= !jf_logic(pIt,0); break;}//" "
case 3:{r=r & !jf_logic(pIt,0); break;}//"&"
case 4:{r=r | !jf_logic(pIt,0); break;}//"|"
default:{}
}
pIt=pIe->pIt; break;//更新向后链接
}
case 3:{o=3; break;}//"&"
case 4:{o=4; break;}//"|"
case 5://"("
{
switch(o)
{
case 0:{r= jf_logic(pIt,1); break;}//" "
case 3:{r=r & jf_logic(pIt,1); break;}//"&"
case 4:{r=r | jf_logic(pIt,1); break;}//"|"
default:{}
}
pIt=pIe->pIt; break;//更新向后链接
}
case 6:{f=1; break;}//")"
default:{}
}
if(((int)pIr)>0) pIr->pIt=pIt; //调整前链接
if(((int)pIt)>0) pIt->pIr=pIr; //调整后链接
free(pIe); //释放本链接
if((s!=1) | f) break; //调试返回处理
if(((int)pIt)>0) pIe=pIt; else break;//后有内容则向后跳转,否则结束 |
|
|