اخي الكريم كمان نفس المشكلة مع الدالة سلس سميتها RSX
وانا وضعت لك المصفوفة المراد اظهار قيمتها داخل خطين من اشارات ++++++++++++++++++++
وممكن تقلي لازم يتم تعريف المصفوفات في بداية الاكسبيرت طبعا عملت التغيير بس ماظهرت اي قيم فقط صفر
وممكن تقلي القيمة المسندة لها تساي فعلا الصفر منشان هيك عملت كومنت تماما بعد سطر المصفوفة ووضعت داخل الكومنت اسم المصفوفة ثم القيمة الاخري بنفس الكومنت هي نفس القيمة المسندة للمصفوفة ورح تشوف انو بالصورة ظهرت قيمة المعادلة التي اسندت للمصفوفة ولكن قيمة المصفوفة لاحياة لمن تنادي قيمتها صفر فارجو منك المساعدة اخي العزيز جزاك الله عني كل خير وبتركك مع الكود والصورة وناااااااااااااااااااااااطرك على نار يا استاذنا
كود PHP:
void RSX(int rsxPeriod)
{
#define wuBuffer 13
#define wdBuffer 14
double rsx_Blue_indecator[];
double rsxDa[];
double rsxDb[];
double rsx_Yellow_indecator[];
double rsx_Magenta_indecator[];
double rsx_Up_indecator[];
double rsx_Down_indecator[];
double trend[];
double wrkBuffer[][15];
int TmaHalfLength = MathMax(12,1);
double FullLength = 2.0*TmaHalfLength+1.0;
int counted_bars=IndicatorCounted();
int i,j,k,r,limit;
//if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit = MathMin(Bars-1,Bars-counted_bars+TmaHalfLength);
if (ArrayRange(wrkBuffer,0) != Bars) ArrayResize(wrkBuffer,Bars);
double Kg = (3.0)/(2.0+14);
double Hg = 1.0-Kg;
for(i=limit, r=Bars-i-1; i>=0; i--, r++)
{
wrkBuffer[r][TmaHalfLength] = iMA(NULL,rsxPeriod,1,0,MODE_SMA,0,i);
if (i==(Bars-1)) { for (int c=0; c<TmaHalfLength; c++) wrkBuffer[r][c] = 0; continue; }
double roc = wrkBuffer[r][TmaHalfLength]-wrkBuffer[r-1][TmaHalfLength];
double roa = MathAbs(roc);
for (k=0; k<3; k++)
{
int kk = k*2;
wrkBuffer[r][kk+0] = Kg*roc + Hg*wrkBuffer[r-1][kk+0];
wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1]; roc = 1.5*wrkBuffer[r][kk+0] - 0.5 * wrkBuffer[r][kk+1];
wrkBuffer[r][kk+6] = Kg*roa + Hg*wrkBuffer[r-1][kk+6];
wrkBuffer[r][kk+7] = Kg*wrkBuffer[r][kk+6] + Hg*wrkBuffer[r-1][kk+7]; roa = 1.5*wrkBuffer[r][kk+6] - 0.5 * wrkBuffer[r][kk+7];
}
if (roa != 0)
{ // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
rsx_Blue_indecator[i] = MathMax(MathMin((roc/roa+1.0)*50.0,100.00),0.00);
Comment(rsx_Blue_indecator[i]," ",MathMax(MathMin((roc/roa+1.0)*50.0,100.00),0.00));
} // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
else rsx_Blue_indecator[i] = 50.0;
}
for (i=limit; i>=0; i--) rsx_Yellow_indecator[i] = iMAOnArray(rsx_Blue_indecator,0,5,0,MODE_SMA,i);
if (trend[limit] == -1) ClearPoint(limit,rsxDa,rsxDb);
for(i=limit, r=Bars-i-1; i>=0; i--, r++)
{
rsxDa[i] = EMPTY_VALUE;
rsxDb[i] = EMPTY_VALUE;
trend[i] = trend[i+1];
if (rsx_Blue_indecator[i]>rsx_Yellow_indecator[i]) trend[i] = 1;
if (rsx_Blue_indecator[i]<rsx_Yellow_indecator[i]) trend[i] = -1;
if (trend[i] == -1) PlotPoint(i,rsxDa,rsxDb,rsx_Blue_indecator);
if (TmaApplyTo==0)
double price = rsx_Blue_indecator[i];
else price = rsx_Yellow_indecator[i];
double sum = (TmaHalfLength+1)*price;
double sumw = (TmaHalfLength+1);
for(j=1, k=TmaHalfLength; j<=TmaHalfLength; j++, k--)
{
if (TmaApplyTo==0)
sum += k*rsx_Blue_indecator[i+j];
else sum += k*rsx_Yellow_indecator[i+j];
sumw += k;
if (j<=i)
{
if (TmaApplyTo==0)
sum += k*rsx_Blue_indecator[i-j];
else sum += k*rsx_Yellow_indecator[i-j];
sumw += k;
}
}
rsx_Magenta_indecator[i] = sum/sumw;
double diff = price-rsx_Magenta_indecator[i];
if (i> (Bars-TmaHalfLength-2)) continue;
if (i==(Bars-TmaHalfLength-2))
{
rsx_Up_indecator[i] = rsx_Magenta_indecator[i];
rsx_Down_indecator[i] = rsx_Magenta_indecator[i];
if (diff>=0)
{
wrkBuffer[r][13] = MathPow(diff,2);
wrkBuffer[r][14] = 0;
}
else
{
wrkBuffer[r][14] = MathPow(diff,2);
wrkBuffer[r][13] = 0;
}
continue;
}
wrkBuffer[r][13] = wrkBuffer[r-1][13];
wrkBuffer[r][14] = wrkBuffer[r-1][14];
if(diff>0)
{
wrkBuffer[r][13] = (wrkBuffer[r-1][13]*(FullLength-1)+MathPow(diff,2))/FullLength;
wrkBuffer[r][14] = wrkBuffer[r-1][14]*(FullLength-1)/FullLength;
}
if(diff<0)
{
wrkBuffer[r][14] = (wrkBuffer[r-1][14]*(FullLength-1)+MathPow(diff,2))/FullLength;
wrkBuffer[r][13] = wrkBuffer[r-1][13]*(FullLength-1)/FullLength;
}
rsx_Up_indecator[i] = rsx_Magenta_indecator[i] + 2.8*MathSqrt(wrkBuffer[r][13]);
rsx_Down_indecator[i] = rsx_Magenta_indecator[i] - 2.8*MathSqrt(wrkBuffer[r][14]);
/*
rsx_Blue = rsx_Blue_indecator[1];
rsx_Yellow = rsx_Yellow_indecator[1];
rsx_Magenta = rsx_Magenta_indecator[1];
rsx_Up = rsx_Up_indecator[1];
rsx_Down = rsx_Down_indecator[1]; */
}
}
انا عارف انو في دالتين بتناديهن الدالة RSX وهدول هنا تفضل:
كود PHP:
void ClearPoint(int i,double& first[],double& second[])
{
if ((second[i] != EMPTY_VALUE) && (second[i+1] != EMPTY_VALUE))
second[i+1] = EMPTY_VALUE;
else
if ((first[i] != EMPTY_VALUE) && (first[i+1] != EMPTY_VALUE) && (first[i+2] == EMPTY_VALUE))
first[i+1] = EMPTY_VALUE;
}
void PlotPoint(int i,double& first[],double& second[],double& from[])
{
if (first[i+1] == EMPTY_VALUE)
{
if (first[i+2] == EMPTY_VALUE) {
first[i] = from[i];
first[i+1] = from[i+1];
second[i] = EMPTY_VALUE;
}
else {
second[i] = from[i];
second[i+1] = from[i+1];
first[i] = EMPTY_VALUE;
}
}
else
{
first[i] = from[i];
second[i] = EMPTY_VALUE;
}
}