Help Req:Please Tell Me Why Don't Work This AFL

#1
_SECTION_BEGIN("Trend Continuation Factor");

EnableScript("jscript");
Period = Optimize("Period",15,1,100,1);
Change= Close-Ref(Close,-1);
intraChange = Close - ((H+L)/2);
PlusChange=IIf(Change>0 AND intraChange>0,Change + intraChange,0);
MinusChange=IIf(Change<0 AND intraChange < 0,-Change - intraChange,0);

<%

PlusChange=VBArray(AFL("PlusChange")).toArray();
MinusChange=
VBArray(AFL("MinusChange")).toArray();


/*Make two new arrays*/
var PlusCF=new Array ();
var MinusCF=new Array();
/*fill array "PlusCF"*/
for (i=0; i<PlusChange.length; i++ )
{
if (PlusChange==0) {
PlusCF=0;
}
else {
PlusCF=PlusChange+PlusCF[i-1];
}
}

/*Fill array "MinusCF*/
for (i=0; i<MinusChange.length; i++ )
{
if (MinusChange==0) {
MinusCF=0;
}
else {
MinusCF=MinusChange+MinusCF[i-1];
}
}

/*Convert to AFL variables*/
AFL("PlusCF")=PlusCF;
AFL("MinusCF")=MinusCF;

%>
PlusTCF1= Sum(PlusChange-MinusCF,Period);
MinusTCF1= Sum(MinusChange-PlusCF,Period);
PlusTCF2 =( PlusTCF1+(2*Ref(PlusTCF1,-1))+(2*Ref(PlusTCF1,-2))+Ref(PlusTCF1,-3))/6;
MinusTCF2 =( MinusTCF1+(2*Ref(MinusTCF1,-1))+(2*Ref(MinusTCF1,-2))+Ref(MinusTCF1,-3))/6;
PlusTCF=EMA(PlusTCF2,1);
MinusTCF=EMA(MinusTCF2,1);
dynamic_color = IIf(PlusTCF >MinusTCF,IIf(PlusTCF > 0,colorDarkGreen,colorYellow),IIf(PlusTCF > MinusTCF,colorPink,colorDarkRed));
aa=(H+L+2*C)/4;
LSMA34 =LinearReg(aa,34 );

_SECTION_END();
////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////

_SECTION_BEGIN("nth ( 1");
//------------------------------------------------------------------------------
//
// Formula Name: nth ( 1 - 8 ) Order Polynomial Fit

// *********************************************************
// *
// * VBS Function for Gaussian Elimination
// *
// * Called by PolyFit ( AFL )
// *
// *********************************************************

EnableScript("VBScript");

<%
function Gaussian_Elimination (GE_Order, GE_N, GE_SumXn, GE_SumYXn)
Dim b(10, 10)
Dim w(10)
Dim Coeff(10)

for i = 1 To 10
Coeff(i) = 0
next

n = GE_Order + 1

for i = 1 to n
for j = 1 to n
if i = 1 AND j = 1 then
b(i, j) = cDBL(GE_N)
else
b(i, j) = cDbl(GE_SumXn(i + j - 2))
end if
next
w(i) = cDbl(GE_SumYXn(i))
next

n1 = n - 1
for i = 1 to n1
big = cDbl(abs(b(i, i)))
q = i
i1 = i + 1

for j = i1 to n
ab = cDbl(abs(b(j, i)))
if (ab >= big) then
big = ab
q = j
end if
next

if (big <> 0.0) then
if (q <> i) then
for j = 1 to n
Temp = cDbl(b(q, j))
b(q, j) = b(i, j)
b(i, j) = Temp
next
Temp = w(i)
w(i) = w(q)
w(q) = Temp
end if
end if

for j = i1 to n
t = cDbl(b(j, i) / b(i, i))
for k = i1 to n
b(j, k) = b(j, k) - t * b(i, k)
next
w(j) = w(j) - t * w(i)
next
next

if (b(n, n) <> 0.0) then

Coeff(n) = w(n) / b(n, n)
i = n - 1

while i > 0
SumY = cDbl(0)
i1 = i + 1
for j = i1 to n
SumY = SumY + b(i, j) * Coeff(j)
next
Coeff(i) = (w(i) - SumY) / b(i, i)
i = i - 1
wend

Gaussian_Elimination = Coeff

end if
end function
%>

// *********************************************************
// *
// * AFL Function for nth Order Polynomial Fit
// * Calls Gaussian_Elimination ( VBS )
// *
// * Y = The array to Fit
// * BegBar = Beg Bar in range to fit
// * EndBar = End Bar in range to fit
// * Order = 1 - 8 = Order of Poly Fit (Integer)
// * ExtraB = Number of Bars to Extrapolate (Backward)
// * ExtraF = Number of Bars to Extrapolate (Forward)
// *
// *********************************************************

function PolyFit(GE_Y, GE_BegBar, GE_EndBar, GE_Order, GE_ExtraB, GE_ExtraF)
{
BI = BarIndex();

GE_N = GE_EndBar - GE_BegBar + 1;
GE_XBegin = -(GE_N - 1) / 2;
GE_X = IIf(BI < GE_BegBar, 0, IIf(BI > GE_EndBar, 0, (GE_XBegin + BI - GE_BegBar)));

GE_X_Max = LastValue(Highest(GE_X));

GE_X = GE_X / GE_X_Max;

X1 = GE_X;
AddColumn(X1, "X1", 1.9);

GE_Y = IIf(BI < GE_BegBar, 0, IIf(BI > GE_EndBar, 0, GE_Y));

GE_SumXn = Cum(0);
GE_SumXn[1] = LastValue(Cum(GE_X));
GE_X2 = GE_X * GE_X; GE_SumXn[2] = LastValue(Cum(GE_X2));
GE_X3 = GE_X * GE_X2; GE_SumXn[3] = LastValue(Cum(GE_X3));
GE_X4 = GE_X * GE_X3; GE_SumXn[4] = LastValue(Cum(GE_X4));
GE_X5 = GE_X * GE_X4; GE_SumXn[5] = LastValue(Cum(GE_X5));
GE_X6 = GE_X * GE_X5; GE_SumXn[6] = LastValue(Cum(GE_X6));
GE_X7 = GE_X * GE_X6; GE_SumXn[7] = LastValue(Cum(GE_X7));
GE_X8 = GE_X * GE_X7; GE_SumXn[8] = LastValue(Cum(GE_X8));
GE_X9 = GE_X * GE_X8; GE_SumXn[9] = LastValue(Cum(GE_X9));
GE_X10 = GE_X * GE_X9; GE_SumXn[10] = LastValue(Cum(GE_X10));
GE_X11 = GE_X * GE_X10; GE_SumXn[11] = LastValue(Cum(GE_X11));
GE_X12 = GE_X * GE_X11; GE_SumXn[12] = LastValue(Cum(GE_X12));
GE_X13 = GE_X * GE_X12; GE_SumXn[13] = LastValue(Cum(GE_X13));
GE_X14 = GE_X * GE_X13; GE_SumXn[14] = LastValue(Cum(GE_X14));
GE_X15 = GE_X * GE_X14; GE_SumXn[15] = LastValue(Cum(GE_X15));
GE_X16 = GE_X * GE_X15; GE_SumXn[16] = LastValue(Cum(GE_X16));

GE_SumYXn = Cum(0);
GE_SumYXn[1] = LastValue(Cum(GE_Y));
GE_YX = GE_Y * GE_X; GE_SumYXn[2] = LastValue(Cum(GE_YX));
GE_YX2 = GE_YX * GE_X; GE_SumYXn[3] = LastValue(Cum(GE_YX2));
GE_YX3 = GE_YX2 * GE_X; GE_SumYXn[4] = LastValue(Cum(GE_YX3));
GE_YX4 = GE_YX3 * GE_X; GE_SumYXn[5] = LastValue(Cum(GE_YX4));
GE_YX5 = GE_YX4 * GE_X; GE_SumYXn[6] = LastValue(Cum(GE_YX5));
GE_YX6 = GE_YX5 * GE_X; GE_SumYXn[7] = LastValue(Cum(GE_YX6));
GE_YX7 = GE_YX6 * GE_X; GE_SumYXn[8] = LastValue(Cum(GE_YX7));
GE_YX8 = GE_YX7 * GE_X; GE_SumYXn[9] = LastValue(Cum(GE_YX8));

GE_Coeff = Cum(0);

GE_VBS = GetScriptObject();
GE_Coeff = GE_VBS.Gaussian_Elimination(GE_Order, GE_N, GE_SumXn, GE_SumYXn);

for (i = 1; i <= GE_Order + 1; i++)
printf(NumToStr(i, 1.0) + " = " + NumToStr(GE_Coeff, 1.9) + "\n");

GE_X = IIf(BI < GE_BegBar - GE_ExtraB - GE_ExtraF, 0, IIf(BI > GE_EndBar, 0, (GE_XBegin + BI - GE_BegBar + GE_ExtraF) / GE_X_Max));

GE_X2 = GE_X * GE_X; GE_X3 = GE_X2 * GE_X; GE_X4 = GE_X3 * GE_X; GE_X5 = GE_X4 * GE_X; GE_X6 = GE_X5 * GE_X;
GE_X7 = GE_X6 * GE_X; GE_X8 = GE_X7 * GE_X; GE_X9 = GE_X8 * GE_X; GE_X10 = GE_X9 * GE_X; GE_X11 = GE_X10 * GE_X;
GE_X12 = GE_X11 * GE_X; GE_X13 = GE_X12 * GE_X; GE_X14 = GE_X13 * GE_X; GE_X15 = GE_X14 * GE_X; GE_X16 = GE_X15 * GE_X;

GE_Yn = IIf(BI < GE_BegBar - GE_ExtraB - GE_ExtraF, -1e10, IIf(BI > GE_EndBar, -1e10,
GE_Coeff[1] +
GE_Coeff[2] * GE_X + GE_Coeff[3] * GE_X2 + GE_Coeff[4] * GE_X3 + GE_Coeff[5] * GE_X4 + GE_Coeff[6] * GE_X5 +
GE_Coeff[7] * GE_X6 + GE_Coeff[8] * GE_X7 + GE_Coeff[9] * GE_X8));

return GE_Yn;
}

// *********************************************************
// *
// * Demo AFL to use PolyFit
// *
// *********************************************************

Filter = 1;

BI = BarIndex();
PF_BegBar = BeginValue(BI);
PF_EndBar = EndValue(BI);
PF_Y = (H + L) / 2;
PF_Order = Param("nth Order", 8, 1, 8, 1);
PF_ExtraB = Param("Extrapolate Backwards", 0, 0, 50, 1);
PF_ExtraF = Param("Extrapolate Forwards", 0, 0, 50, 1);

Yn = PolyFit(PF_Y, PF_BegBar, PF_EndBar, PF_Order, PF_ExtraB, PF_ExtraF);

///GraphXSpace = 10;
barcolor2= IIf(aa > LSMA34,colorGreen,IIf(aa < LSMA34,colorRed,colorTeal));
SetBarFillColor( dynamic_color);
Plot( C, "Close", barcolor2, styleCandle | styleThick);
ShowP89 = ParamToggle("Plot EMA(89)","Off|ON",0);
ShowYn = ParamToggle("nth Order Polynomial Fit","Off|ON",0);
if (ShowYn) Plot(Yn, "nth Order Polynomial Fit - " + NumToStr(PF_Order, 1.0), IIf(BI > PF_EndBar - PF_ExtraF, colorWhite, IIf(BI < PF_BegBar - PF_ExtraF, colorWhite, colorDarkGreen)), styleThick|styleDots, Null, Null, PF_ExtraF);
///PlotOHLC(O, H, L, C, "Close", colorLightGrey, styleCandle);
if (ShowP89) Plot(EMA(C,89),"",colorYellow,styleDots|styleThick);
if (ShowYn)Plot(EMA(Yn,4),"",colorGreen,styleDashed|styleNoLabel);
_SECTION_END();
/////////////////////////////////////////////////////////////////////////////
 

HULK

Active Member
#2
Kargocu

Why are you Mixing up two different AFL in one. Kindly let me know, as both this AFL Interpretations and usages are in different way as far as my knowledge.
 
#3
Kargocu

Why are you Mixing up two different AFL in one. Kindly let me know, as both this AFL Interpretations and usages are in different way as far as my knowledge.
Dear Friend HULK,

I just need an "n th order polynomial moving average outlook" on the price chart which is the first part of the above AFL...That's all....But I'm having some kind of microsoft script error that I could not solve...
Have a nice day and lucky trades...
 

HULK

Active Member
#4
Kargocu
Find enclosed the AFL as desired by you.

_SECTION_BEGIN("Gaussian Elimination");
// *********************************************************
// *
// * VBS Function for Gaussian Elimination
// *
// * Called by PolyFit ( AFL )
// *
// *********************************************************

EnableScript("VBScript");

<%
function Gaussian_Elimination (GE_Order, GE_N, GE_SumXn, GE_SumYXn)
Dim b(10, 10)
Dim w(10)
Dim Coeff(10)

for i = 1 To 10
Coeff(i) = 0
next

n = GE_Order + 1

for i = 1 to n
for j = 1 to n
if i = 1 AND j = 1 then
b(i, j) = cDBL(GE_N)
else
b(i, j) = cDbl(GE_SumXn(i + j - 2))
end if
next
w(i) = cDbl(GE_SumYXn(i))
next

n1 = n - 1
for i = 1 to n1
big = cDbl(abs(b(i, i)))
q = i
i1 = i + 1

for j = i1 to n
ab = cDbl(abs(b(j, i)))
if (ab >= big) then
big = ab
q = j
end if
next

if (big <> 0.0) then
if (q <> i) then
for j = 1 to n
Temp = cDbl(b(q, j))
b(q, j) = b(i, j)
b(i, j) = Temp
next
Temp = w(i)
w(i) = w(q)
w(q) = Temp
end if
end if

for j = i1 to n
t = cDbl(b(j, i) / b(i, i))
for k = i1 to n
b(j, k) = b(j, k) - t * b(i, k)
next
w(j) = w(j) - t * w(i)
next
next

if (b(n, n) <> 0.0) then

Coeff(n) = w(n) / b(n, n)
i = n - 1

while i > 0
SumY = cDbl(0)
i1 = i + 1
for j = i1 to n
SumY = SumY + b(i, j) * Coeff(j)
next
Coeff(i) = (w(i) - SumY) / b(i, i)
i = i - 1
wend

Gaussian_Elimination = Coeff

end if
end function
%>

// *********************************************************
// *
// * AFL Function for nth Order Polynomial Fit
// * Calls Gaussian_Elimination ( VBS )
// *
// * Y = The array to Fit
// * BegBar = Beg Bar in range to fit
// * EndBar = End Bar in range to fit
// * Order = 1 - 8 = Order of Poly Fit (Integer)
// * ExtraB = Number of Bars to Extrapolate (Backward)
// * ExtraF = Number of Bars to Extrapolate (Forward)
// *
// *********************************************************

function PolyFit(GE_Y, GE_BegBar, GE_EndBar, GE_Order, GE_ExtraB, GE_ExtraF)
{
BI = BarIndex();

GE_N = GE_EndBar - GE_BegBar + 1;
GE_XBegin = -(GE_N - 1) / 2;
GE_X = IIf(BI < GE_BegBar, 0, IIf(BI > GE_EndBar, 0, (GE_XBegin + BI -
GE_BegBar)));

GE_X_Max = LastValue(Highest(GE_X));

GE_X = GE_X / GE_X_Max;

X1 = GE_X;
AddColumn(X1, "X1", 1.9);

GE_Y = IIf(BI < GE_BegBar, 0, IIf(BI > GE_EndBar, 0, GE_Y));

GE_SumXn = Cum(0);
GE_SumXn[1] = LastValue(Cum(GE_X));
GE_X2 = GE_X * GE_X; GE_SumXn[2] = LastValue(Cum(GE_X2));
GE_X3 = GE_X * GE_X2; GE_SumXn[3] = LastValue(Cum(GE_X3));
GE_X4 = GE_X * GE_X3; GE_SumXn[4] = LastValue(Cum(GE_X4));
GE_X5 = GE_X * GE_X4; GE_SumXn[5] = LastValue(Cum(GE_X5));
GE_X6 = GE_X * GE_X5; GE_SumXn[6] = LastValue(Cum(GE_X6));
GE_X7 = GE_X * GE_X6; GE_SumXn[7] = LastValue(Cum(GE_X7));
GE_X8 = GE_X * GE_X7; GE_SumXn[8] = LastValue(Cum(GE_X8));
GE_X9 = GE_X * GE_X8; GE_SumXn[9] = LastValue(Cum(GE_X9));
GE_X10 = GE_X * GE_X9; GE_SumXn[10] = LastValue(Cum(GE_X10));
GE_X11 = GE_X * GE_X10; GE_SumXn[11] = LastValue(Cum(GE_X11));
GE_X12 = GE_X * GE_X11; GE_SumXn[12] = LastValue(Cum(GE_X12));
GE_X13 = GE_X * GE_X12; GE_SumXn[13] = LastValue(Cum(GE_X13));
GE_X14 = GE_X * GE_X13; GE_SumXn[14] = LastValue(Cum(GE_X14));
GE_X15 = GE_X * GE_X14; GE_SumXn[15] = LastValue(Cum(GE_X15));
GE_X16 = GE_X * GE_X15; GE_SumXn[16] = LastValue(Cum(GE_X16));

GE_SumYXn = Cum(0);
GE_SumYXn[1] = LastValue(Cum(GE_Y));
GE_YX = GE_Y * GE_X; GE_SumYXn[2] = LastValue(Cum(GE_YX));
GE_YX2 = GE_YX * GE_X; GE_SumYXn[3] = LastValue(Cum(GE_YX2));
GE_YX3 = GE_YX2 * GE_X; GE_SumYXn[4] = LastValue(Cum(GE_YX3));
GE_YX4 = GE_YX3 * GE_X; GE_SumYXn[5] = LastValue(Cum(GE_YX4));
GE_YX5 = GE_YX4 * GE_X; GE_SumYXn[6] = LastValue(Cum(GE_YX5));
GE_YX6 = GE_YX5 * GE_X; GE_SumYXn[7] = LastValue(Cum(GE_YX6));
GE_YX7 = GE_YX6 * GE_X; GE_SumYXn[8] = LastValue(Cum(GE_YX7));
GE_YX8 = GE_YX7 * GE_X; GE_SumYXn[9] = LastValue(Cum(GE_YX8));

GE_Coeff = Cum(0);

GE_VBS = GetScriptObject();
GE_Coeff = GE_VBS.Gaussian_Elimination(GE_Order, GE_N, GE_SumXn,
GE_SumYXn);

for (i = 1; i <= GE_Order + 1; i++)
printf(NumToStr(i, 1.0) + " = " + NumToStr(GE_Coeff, 1.9) + "\n");

GE_X = IIf(BI < GE_BegBar - GE_ExtraB - GE_ExtraF, 0, IIf(BI > GE_EndBar,
0, (GE_XBegin + BI - GE_BegBar + GE_ExtraF) / GE_X_Max));

GE_X2 = GE_X * GE_X; GE_X3 = GE_X2 * GE_X; GE_X4 = GE_X3 * GE_X;
GE_X5 = GE_X4 * GE_X; GE_X6 = GE_X5 * GE_X;
GE_X7 = GE_X6 * GE_X; GE_X8 = GE_X7 * GE_X; GE_X9 = GE_X8 * GE_X;
GE_X10 = GE_X9 * GE_X; GE_X11 = GE_X10 * GE_X;
GE_X12 = GE_X11 * GE_X; GE_X13 = GE_X12 * GE_X; GE_X14 = GE_X13 * GE_X;
GE_X15 = GE_X14 * GE_X; GE_X16 = GE_X15 * GE_X;

GE_Yn = IIf(BI < GE_BegBar - GE_ExtraB - GE_ExtraF, -1e10, IIf(BI >
GE_EndBar, -1e10,
GE_Coeff[1] +
GE_Coeff[2] * GE_X + GE_Coeff[3] * GE_X2 + GE_Coeff[4] *
GE_X3 + GE_Coeff[5] * GE_X4 + GE_Coeff[6] * GE_X5 +
GE_Coeff[7] * GE_X6 + GE_Coeff[8] * GE_X7 + GE_Coeff[9] *
GE_X8));

return GE_Yn;
}

// *********************************************************
// *
// * Demo AFL to use PolyFit
// *
// *********************************************************

Filter = 1;

BI = BarIndex();
PF_BegBar = BeginValue(BI);
PF_EndBar = EndValue(BI);
PF_Y = (H + L) / 2;
PF_Order = Param("nth Order", 3, 1, 8, 1);
PF_ExtraB = Param("Extrapolate Backwards", 0, 0, 50, 1);
PF_ExtraF = Param("Extrapolate Forwards", 0, 0, 50, 1);

Yn = PolyFit(PF_Y, PF_BegBar, PF_EndBar, PF_Order, PF_ExtraB, PF_ExtraF);

GraphXSpace = 10;

Plot(Yn, "nth Order Polynomial Fit - " + NumToStr(PF_Order, 1.0), IIf(BI >
PF_EndBar - PF_ExtraF, colorWhite, IIf(BI < PF_BegBar - PF_ExtraF, colorWhite,
colorBrightGreen)), styleThick, Null, Null, PF_ExtraF);
PlotOHLC(O, H, L, C, "Close", colorLightGrey, styleCandle);


_SECTION_END();
 
#5
Dear friend HULK,

Thank you so much for your kind help...
But I already have the AFL given by you....
I just don't understand why the both AFL don't work together properly written by me ...Good day and take good care of yourself...
 

Similar threads