主图策略下面附图显示一个附图指标,改变附图指标 主图上的策略开平仓位置都会改变
也就是数据互相之间会干扰
__declspec(dllexport) int WINAPI JRSX(CALCINFO* pData)
{
if ( pData->m_pCalcParam[1].m_nParamStart >= 0)
{
int Length=(int)pData->m_pCalcParam[1].m_pfParam[0];
int count=pData->m_nNumData;
const float* pValue1 = pData->m_pCalcParam[0].m_pfParam;
double *input=new double[count];
double *output=new double[count];
for (int i=0;i<count;i++)
{ input[i]=(double)pValue1[i]; }
int cond=RSX(count,input,output,Length);
if (cond==0)
{
for (int i=0;i<count;i++)
{
pData->m_pResultBuf[i]=(float)output[i];
}
}
delete []input;
delete []output;
return 0;
}
return -1;
}
每一段都类似这些 数组 new了 后delete 不明白怎么能越界
而且老版本金字塔没有这种问题 同时开多个dll内的函数、指标都没问题的
请给个qq 我把dll和 相关fla都发给你
好大一堆。。 随意了 希望能有帮助。。
问题是我还另外使用了外接dll 根本没法贴的
其他代码我都贴了好几遍了
stockfunc.h 部分
__declspec(dllexport) int WINAPI MRSX(CALCINFO* pData);
__declspec(dllexport) int WINAPI MJMA(CALCINFO* pData);
__declspec(dllexport) int WINAPI MMA(CALCINFO* pData);
stockfunc.cpp 部分
int mRSX(double Buffer[],int Lengh,double JRSX_Bufer[])
{
int shift,r,w,k,Tnew,counted_bars,T0,T1;
double v4,v8,v10,v14,v18,v20,v0C,v1C,v8A;
double F28,F30,F38,F40,F48,F50,F58,F60,F68,F70,F78,F80;
double f0,f28,f30,f38,f40,f48,f50,f58,f60,f68,f70,f78,f80,Kg,Hg;
if (Lengh-1>=5)w=Lengh-1;else w=5; Kg=3/(Lengh+2.0); Hg=1.0-Kg;
for (shift=0;shift<sizeof(Buffer);shift++)
{
if (r==0)
{
r = 1; k = 0;
}
else
{
if (r>=w) r=w+1; else r=r+1;
v8 = Buffer[shift]-Buffer[shift-1]; v8A=abs(v8);
f28 = Hg * f28 + Kg * v8;
f30 = Kg * f28 + Hg * f30;
v0C = 1.5 * f28 - 0.5 * f30;
f38 = Hg * f38 + Kg * v0C;
f40 = Kg * f38 + Hg * f40;
v10 = 1.5 * f38 - 0.5 * f40;
f48 = Hg * f48 + Kg * v10;
f50 = Kg * f48 + Hg * f50;
v14 = 1.5 * f48 - 0.5 * f50;
f58 = Hg * f58 + Kg * v8A;
f60 = Kg * f58 + Hg * f60;
v18 = 1.5 * f58 - 0.5 * f60;
f68 = Hg * f68 + Kg * v18;
f70 = Kg * f68 + Hg * f70;
v1C = 1.5 * f68 - 0.5 * f70;
f78 = Hg * f78 + Kg * v1C;
f80 = Kg * f78 + Hg * f80;
v20 = 1.5 * f78 - 0.5 * f80;
if ((r <= w) && (v8!= 0)) k = 1;
if ((r == w) && (k == 0)) r = 0;
}
if ((r > w) &&(v20 > 0.0000000001 ))
{
v4 = (v14/v20+1.0)*50.0; if(v4>100.0)v4=100.0; if(v4<0.0)v4=0.0;
}
else v4 = 50.0;
JRSX_Bufer[shift]=v4;
}
return 0;
}
__declspec(dllexport) int WINAPI MRSX(CALCINFO* pData)
{
if ( pData->m_pCalcParam[1].m_nParamStart >= 0)
{
int Length=(int)pData->m_pCalcParam[1].m_pfParam[0];
int count=pData->m_nNumData;
const float* pValue1 = pData->m_pCalcParam[0].m_pfParam;
double *input=new double[count];
double *output=new double[count];
for (int i=0;i<count;i++)
{ input[i]=(double)pValue1[i]; }
int cond=mRSX(input,Length,output);
if (cond==0)
{
for (int i=0;i<count;i++)
{
pData->m_pResultBuf[i]=(float)output[i];
}
}
delete []input;
delete []output;
return 0;
}
return -1;
}
int mMA(double input[],int Length,double output[])
{
for (int i=0;i<Length-1;i++)
{
output[i]=0;
}
for (int i=0;i<sizeof(input)-Length+1;i++)
{
double tmp=0;
for (int j=0;j<Length;j++)
{
tmp+=input[i+j];
}
output[i+Length-1]=tmp/Length;
}
return 0;
}
__declspec(dllexport) int WINAPI MMA(CALCINFO* pData)
{
if ( pData->m_pCalcParam[1].m_nParamStart >= 0)
{
int Length=(int)pData->m_pCalcParam[1].m_pfParam[0];
int count=pData->m_nNumData;
const float* pValue1 = pData->m_pCalcParam[0].m_pfParam;
double *input=new double[count];
double *output=new double[count];
for (int i=0;i<count;i++)
{ input[i]=(double)pValue1[i]; }
int cond=mMA(input,Length,output);
if (cond==0)
{
for (int i=0;i<count;i++)
{
pData->m_pResultBuf[i]=(float)output[i];
}
}
delete []input;
delete []output;
return 0;
}
return -1;
}
这2段是自编的代码 不用外接dll的