I've created a 6th order polynomial script for curve fitting 'close' data.
Code:
#
# 6th Order Polynomial Best Fit of Close Data
#
# Polynomial coefficients Beta are determined by multiplying the
# products of the inverse of X transpose and X, and X transpose and y
#
# B = [XTX]^-1 [XTy]
#
# To invert the XTX matrix, the Cholesky method is used to
# determine the lower diagonal decomposition matrix L of the XTX matrix
#
# Then the Miranda-Sánchez/López-Bonilla method is used to invert the L matrix
#
# Lastly the inverse of the XTX matrix is the product of the transpose
# of the inverse of L matrix and the inverse of L matrix
#
# R W Rosborough 4/15/2023 Rev -
#
# Limitations:
# - Aggregation type must be 'Time' or 'Range' not 'Tick'
# - Total number of bars must be at least 7 and no more than about 1,000
# - Starting bar number must be greater than 0 and at least 7 less than the last bar number
# - Expansion area must be no more than 100 bars to the right
#
input StartAtBar = 1;
#
def TotalBars = HighestAll(BarNumber());
def bn = BarNumber();
def RtExp;
def x = bn - StartAtBar + 1;
#
# Determine Right Expansion Length, if Any
#
if bn == 1 {
RtExp = (fold LC = 0 to 101 with LC1=0 while isnan(getvalue(close,LC-totalbars))
do LC1 + 1)-1;}
else {
RtExp = RtExp[1];}
#
def Nbars = totalbars - RtExp - StartAtBar + 1;
#
AddLabel(1, Nbars + " Bars + " +
RtExp + " Bar Right Expansion, Curve begins at bar " +
StartAtBar + " ", createcolor(255,255,235));
#
# Multiply X Transpose by X to create XTX Matrix: XTXij = Sum[x^(i+j-2)]
#
def XTX11 = Nbars;
def XTX12 = Fold p12 = 1 to Nbars+1 with x12 do x12 + p12;
def XTX13 = Fold p13 = 1 to Nbars+1 with x13 do x13 + Power(p13 ,2);
def XTX14 = Fold p14 = 1 to Nbars+1 with x14 do x14 + Power(p14 ,3);
def XTX15 = Fold p15 = 1 to Nbars+1 with x15 do x15 + Power(p15 ,4);
def XTX16 = Fold p16 = 1 to Nbars+1 with x16 do x16 + Power(p16 ,5);
def XTX17 = Fold p17 = 1 to Nbars+1 with x17 do x17 + Power(p17 ,6);
def XTX22 = Fold p22 = 1 to Nbars+1 with x22 do x22 + Power(p22 ,2);
def XTX23 = Fold p23 = 1 to Nbars+1 with x23 do x23 + Power(p23 ,3);
def XTX24 = Fold p24 = 1 to Nbars+1 with x24 do x24 + Power(p24 ,4);
def XTX25 = Fold p25 = 1 to Nbars+1 with x25 do x25 + Power(p25 ,5);
def XTX26 = Fold p26 = 1 to Nbars+1 with x26 do x26 + Power(p26 ,6);
def XTX27 = Fold p27 = 1 to Nbars+1 with x27 do x27 + Power(p27 ,7);
def XTX33 = Fold p33 = 1 to Nbars+1 with x33 do x33 + Power(p33 ,4);
def XTX34 = Fold p34 = 1 to Nbars+1 with x34 do x34 + Power(p34 ,5);
def XTX35 = Fold p35 = 1 to Nbars+1 with x35 do x35 + Power(p35 ,6);
def XTX36 = Fold p36 = 1 to Nbars+1 with x36 do x36 + Power(p36 ,7);
def XTX37 = Fold p37 = 1 to Nbars+1 with x37 do x37 + Power(p37 ,8);
def XTX44 = Fold p44 = 1 to Nbars+1 with x44 do x44 + Power(p44 ,6);
def XTX45 = Fold p45 = 1 to Nbars+1 with x45 do x45 + Power(p45 ,7);
def XTX46 = Fold p46 = 1 to Nbars+1 with x46 do x46 + Power(p46 ,8);
def XTX47 = Fold p47 = 1 to Nbars+1 with x47 do x47 + Power(p47 ,9);
def XTX55 = Fold p55 = 1 to Nbars+1 with x55 do x55 + Power(p55 ,8);
def XTX56 = Fold p56 = 1 to Nbars+1 with x56 do x56 + Power(p56 ,9);
def XTX57 = Fold p57 = 1 to Nbars+1 with x57 do x57 + Power(p57 ,10);
def XTX66 = Fold p66 = 1 to Nbars+1 with x66 do x66 + Power(p66 ,10);
def XTX67 = Fold p67 = 1 to Nbars+1 with x67 do x67 + Power(p67 ,11);
def XTX77 = Fold p77 = 1 to Nbars+1 with x77 do x77 + Power(p77 ,12);
def XTX21 = XTX12;def XTX31 = XTX13;def XTX32 = XTX23;def XTX41 = XTX14;def XTX42 = XTX24;
def XTX43 = XTX34;def XTX51 = XTX15;def XTX52 = XTX25;def XTX53 = XTX35;def XTX54 = XTX45;
def XTX61 = XTX16;def XTX62 = XTX26;def XTX63 = XTX36;def XTX64 = XTX46;def XTX65 = XTX56;
def XTX71 = XTX17;def XTX72 = XTX27;def XTX73 = XTX37;def XTX74 = XTX47;def XTX75 = XTX57;
def XTX76 = XTX67;
#
# Create the Cholesky Decomposition Matrix L
#
def L11 = Sqrt(XTX11);
def L21 = XTX21 / L11;
def L22 = Sqrt(XTX22 - Sqr(L21));
def L31 = XTX31 / L11;
def L32 = (XTX32 - L31 * L21) / L22;
def L33 = Sqrt(XTX33 - Sqr(L31) - Sqr(L32));
def L41 = XTX41 / L11;
def L42 = (XTX42 - L41 * L21) / L22;
def L43 = (XTX43 - L41 * L31 - L42 * L32) / L33;
def L44 = Sqrt(XTX44 - Sqr(L41) - Sqr(L42) - Sqr(L43));
def L51 = XTX51 / L11;
def L52 = (XTX52 - L51 * L21) / L22;
def L53 = (XTX53 - L51 * L31 - L52 * L32) / L33;
def L54 = (XTX54 - L51 * L41 - L52 * L42 - L53 * L43) / L44;
def L55 = Sqrt(XTX55 - Sqr(L51) - Sqr(L52) - Sqr(L53) - Sqr(L54));
def L61 = XTX61 / L11;
def L62 = (XTX62 - L61 * L21) / L22;
def L63 = (XTX63 - L61 * L31 - L62 * L32) / L33;
def L64 = (XTX64 - L61 * L41 - L62 * L42 - L63 * L43) / L44;
def L65 = (XTX65 - L61 * L51 - L62 * L52 - L63 * L53 - L64 * L54) / L55;
def L66 = Sqrt(XTX66 - Sqr(L61) - Sqr(L62) - Sqr(L63) - Sqr(L64) - Sqr(L65));
def L71 = XTX71 / L11;
def L72 = (XTX72 - L71 * L21) / L22;
def L73 = (XTX73 - L71 * L31 - L72 * L32) / L33;
def L74 = (XTX74 - L71 * L41 - L72 * L42 - L73 * L43) / L44;
def L75 = (XTX75 - L71 * L51 - L72 * L52 - L73 * L53 - L74 * L54) / L55;
def L76 = (XTX76 - L71 * L61 - L72 * L62 - L73 * L63 - L74 * L64 - L75 * L65) / L66;
def L77 = Sqrt(XTX77 - Sqr(L71) - Sqr(L72) - Sqr(L73) - Sqr(L74) - Sqr(L75) - Sqr(L76));
def L12 = 0;def L13 = 0;def L14 = 0;def L15 = 0;def L16 = 0;def L17 = 0;def L23 = 0;
def L24 = 0;def L25 = 0;def L26 = 0;def L27 = 0;def L34 = 0;def L35 = 0;def L36 = 0;
def L37 = 0;def L45 = 0;def L46 = 0;def L47 = 0;def L56 = 0;def L57 = 0;def L67 = 0;
#
# INVERT THE L MATRIX
#
# Create the N Matrix
#
def N21 = L21 / L22;
def N31 = L31 / L33;
def N41 = L41 / L44;
def N51 = L51 / L55;
def N61 = L61 / L66;
def N71 = L71 / L77;
def N32 = L32 / L33;
def N42 = L42 / L44;
def N52 = L52 / L55;
def N62 = L62 / L66;
def N72 = L72 / L77;
def N43 = L43 / L44;
def N53 = L53 / L55;
def N63 = L63 / L66;
def N73 = L73 / L77;
def N54 = L54 / L55;
def N64 = L64 / L66;
def N74 = L74 / L77;
def N65 = L65 / L66;
def N75 = L75 / L77;
def N76 = L76 / L77;
def N11 = 0;def N12 = 0;def N13 = 0;def N14 = 0;def N15 = 0;def N16 = 0;def N17 = 0;
def N22 = 0;def N23 = 0;def N24 = 0;def N25 = 0;def N26 = 0;def N27 = 0;def N33 = 0;
def N34 = 0;def N35 = 0;def N36 = 0;def N37 = 0;def N44 = 0;def N45 = 0;def N46 = 0;
def N47 = 0;def N55 = 0;def N56 = 0;def N57 = 0;def N66 = 0;def N67 = 0;def N77 = 0;
#
# Square the N Matrix
#
def NSQR31 = N31 * N11 + N32 * N21 + N33 * N31 + N34 * N41 + N35 * N51 + N36 * N61 + N37 * N71;
def NSQR41 = N41 * N11 + N42 * N21 + N43 * N31 + N44 * N41 + N45 * N51 + N46 * N61 + N47 * N71;
def NSQR42 = N41 * N12 + N42 * N22 + N43 * N32 + N44 * N42 + N45 * N52 + N46 * N62 + N47 * N72;
def NSQR51 = N51 * N11 + N52 * N21 + N53 * N31 + N54 * N41 + N55 * N51 + N56 * N61 + N57 * N71;
def NSQR52 = N51 * N12 + N52 * N22 + N53 * N32 + N54 * N42 + N55 * N52 + N56 * N62 + N57 * N72;
def NSQR53 = N51 * N13 + N52 * N23 + N53 * N33 + N54 * N43 + N55 * N53 + N56 * N63 + N57 * N73;
def NSQR61 = N61 * N11 + N62 * N21 + N63 * N31 + N64 * N41 + N65 * N51 + N66 * N61 + N67 * N71;
def NSQR62 = N61 * N12 + N62 * N22 + N63 * N32 + N64 * N42 + N65 * N52 + N66 * N62 + N67 * N72;
def NSQR63 = N61 * N13 + N62 * N23 + N63 * N33 + N64 * N43 + N65 * N53 + N66 * N63 + N67 * N73;
def NSQR64 = N61 * N14 + N62 * N24 + N63 * N34 + N64 * N44 + N65 * N54 + N66 * N64 + N67 * N74;
def NSQR71 = N71 * N11 + N72 * N21 + N73 * N31 + N74 * N41 + N75 * N51 + N76 * N61 + N77 * N71;
def NSQR72 = N71 * N12 + N72 * N22 + N73 * N32 + N74 * N42 + N75 * N52 + N76 * N62 + N77 * N72;
def NSQR73 = N71 * N13 + N72 * N23 + N73 * N33 + N74 * N43 + N75 * N53 + N76 * N63 + N77 * N73;
def NSQR74 = N71 * N14 + N72 * N24 + N73 * N34 + N74 * N44 + N75 * N54 + N76 * N64 + N77 * N74;
def NSQR75 = N71 * N15 + N72 * N25 + N73 * N35 + N74 * N45 + N75 * N55 + N76 * N65 + N77 * N75;
def NSQR11 = 0;def NSQR12 = 0;def NSQR13 = 0;def NSQR14 = 0;def NSQR15 = 0;def NSQR16 = 0;
def NSQR17 = 0;def NSQR22 = 0;def NSQR23 = 0;def NSQR24 = 0;def NSQR25 = 0;def NSQR26 = 0;
def NSQR27 = 0;def NSQR33 = 0;def NSQR34 = 0;def NSQR35 = 0;def NSQR36 = 0;def NSQR37 = 0;
def NSQR44 = 0;def NSQR45 = 0;def NSQR46 = 0;def NSQR47 = 0;def NSQR55 = 0;def NSQR56 = 0;
def NSQR57 = 0;def NSQR66 = 0;def NSQR67 = 0;def NSQR77 = 0;def NSQR21 = 0;def NSQR32 = 0;
def NSQR43 = 0;def NSQR54 = 0;def NSQR65 = 0;def NSQR76 = 0;
#
# Cube the N Matrix
#
def NCUBE41 = N41 * NSQR11 + N42 * NSQR21 + N43 * NSQR31 + N44 * NSQR41 + N45 * NSQR51 +
N46 * NSQR61 + N47 * NSQR71;
def NCUBE51 = N51 * NSQR11 + N52 * NSQR21 + N53 * NSQR31 + N54 * NSQR41 + N55 * NSQR51 +
N56 * NSQR61 + N57 * NSQR71;
def NCUBE52 = N51 * NSQR12 + N52 * NSQR22 + N53 * NSQR32 + N54 * NSQR42 + N55 * NSQR52 +
N56 * NSQR62 + N57 * NSQR72;
def NCUBE61 = N61 * NSQR11 + N62 * NSQR21 + N63 * NSQR31 + N64 * NSQR41 + N65 * NSQR51 +
N66 * NSQR61 + N67 * NSQR71;
def NCUBE62 = N61 * NSQR12 + N62 * NSQR22 + N63 * NSQR32 + N64 * NSQR42 + N65 * NSQR52 +
N66 * NSQR62 + N67 * NSQR72;
def NCUBE63 = N61 * NSQR13 + N62 * NSQR23 + N63 * NSQR33 + N64 * NSQR43 + N65 * NSQR53 +
N66 * NSQR63 + N67 * NSQR73;
def NCUBE71 = N71 * NSQR11 + N72 * NSQR21 + N73 * NSQR31 + N74 * NSQR41 + N75 * NSQR51 +
N76 * NSQR61 + N77 * NSQR71;
def NCUBE72 = N71 * NSQR12 + N72 * NSQR22 + N73 * NSQR32 + N74 * NSQR42 + N75 * NSQR52 +
N76 * NSQR62 + N77 * NSQR72;
def NCUBE73 = N71 * NSQR13 + N72 * NSQR23 + N73 * NSQR33 + N74 * NSQR43 + N75 * NSQR53 +
N76 * NSQR63 + N77 * NSQR73;
def NCUBE74 = N71 * NSQR14 + N72 * NSQR24 + N73 * NSQR34 + N74 * NSQR44 + N75 * NSQR54 +
N76 * NSQR64 + N77 * NSQR74;
def NCUBE11 = 0;def NCUBE12 = 0;def NCUBE13 = 0;def NCUBE14 = 0;def NCUBE15 = 0;
def NCUBE16 = 0;def NCUBE17 = 0;def NCUBE22 = 0;def NCUBE23 = 0;def NCUBE24 = 0;
def NCUBE25 = 0;def NCUBE26 = 0;def NCUBE27 = 0;def NCUBE33 = 0;def NCUBE34 = 0;
def NCUBE35 = 0;def NCUBE36 = 0;def NCUBE37 = 0;def NCUBE44 = 0;def NCUBE45 = 0;
def NCUBE46 = 0;def NCUBE47 = 0;def NCUBE55 = 0;def NCUBE56 = 0;def NCUBE57 = 0;
def NCUBE66 = 0;def NCUBE67 = 0;def NCUBE77 = 0;def NCUBE21 = 0;def NCUBE32 = 0;
def NCUBE43 = 0;def NCUBE54 = 0;def NCUBE65 = 0;def NCUBE76 = 0;def NCUBE31 = 0;
def NCUBE42 = 0;def NCUBE53 = 0;def NCUBE64 = 0;def NCUBE75 = 0;
#
# Create the N^4 Matrix
#
def NFOUR51 = NSQR51 * NSQR11 + NSQR52 * NSQR21 + NSQR53 * NSQR31 + NSQR54 * NSQR41 +
NSQR55 * NSQR51 + NSQR56 * NSQR61 + NSQR57 * NSQR71;
def NFOUR61 = NSQR61 * NSQR11 + NSQR62 * NSQR21 + NSQR63 * NSQR31 + NSQR64 * NSQR41 +
NSQR65 * NSQR51 + NSQR66 * NSQR61 + NSQR67 * NSQR71;
def NFOUR62 = NSQR61 * NSQR12 + NSQR62 * NSQR22 + NSQR63 * NSQR32 + NSQR64 * NSQR42 +
NSQR65 * NSQR52 + NSQR66 * NSQR62 + NSQR67 * NSQR72;
def NFOUR71 = NSQR71 * NSQR11 + NSQR72 * NSQR21 + NSQR73 * NSQR31 + NSQR74 * NSQR41 +
NSQR75 * NSQR51 + NSQR76 * NSQR61 + NSQR77 * NSQR71;
def NFOUR72 = NSQR71 * NSQR12 + NSQR72 * NSQR22 + NSQR73 * NSQR32 + NSQR74 * NSQR42 +
NSQR75 * NSQR52 + NSQR76 * NSQR62 + NSQR77 * NSQR72;
def NFOUR73 = NSQR71 * NSQR13 + NSQR72 * NSQR23 + NSQR73 * NSQR33 + NSQR74 * NSQR43 +
NSQR75 * NSQR53 + NSQR76 * NSQR63 + NSQR77 * NSQR73;
def NFOUR11 = 0;def NFOUR12 = 0;def NFOUR13 = 0;def NFOUR14 = 0;def NFOUR15 = 0;
def NFOUR16 = 0;def NFOUR17 = 0;def NFOUR22 = 0;def NFOUR23 = 0;def NFOUR24 = 0;
def NFOUR25 = 0;def NFOUR26 = 0;def NFOUR27 = 0;def NFOUR33 = 0;def NFOUR34 = 0;
def NFOUR35 = 0;def NFOUR36 = 0;def NFOUR37 = 0;def NFOUR44 = 0;def NFOUR45 = 0;
def NFOUR46 = 0;def NFOUR47 = 0;def NFOUR55 = 0;def NFOUR56 = 0;def NFOUR57 = 0;
def NFOUR66 = 0;def NFOUR67 = 0;def NFOUR77 = 0;def NFOUR21 = 0;def NFOUR32 = 0;
def NFOUR43 = 0;def NFOUR54 = 0;def NFOUR65 = 0;def NFOUR76 = 0;def NFOUR31 = 0;
def NFOUR42 = 0;def NFOUR53 = 0;def NFOUR64 = 0;def NFOUR75 = 0;def NFOUR41 = 0;
def NFOUR52 = 0;def NFOUR63 = 0;def NFOUR74 = 0;
#
# Create the N^5 Matrix
#
def NFIVE61 = N61 * NFOUR11 + N62 * NFOUR21 + N63 * NFOUR31 + N64 * NFOUR41 +
N65 * NFOUR51 + N66 * NFOUR61 + N67 * NFOUR71;
def NFIVE71 = N71 * NFOUR11 + N72 * NFOUR21 + N73 * NFOUR31 + N74 * NFOUR41 +
N75 * NFOUR51 + N76 * NFOUR61 + N77 * NFOUR71;
def NFIVE72 = N71 * NFOUR12 + N72 * NFOUR22 + N73 * NFOUR32 + N74 * NFOUR42 +
N75 * NFOUR52 + N76 * NFOUR62 + N77 * NFOUR72;
def NFIVE11 = 0;def NFIVE12 = 0;def NFIVE13 = 0;def NFIVE14 = 0;def NFIVE15 = 0;
def NFIVE16 = 0;def NFIVE17 = 0;def NFIVE22 = 0;def NFIVE23 = 0;def NFIVE24 = 0;
def NFIVE25 = 0;def NFIVE26 = 0;def NFIVE27 = 0;def NFIVE33 = 0;def NFIVE34 = 0;
def NFIVE35 = 0;def NFIVE36 = 0;def NFIVE37 = 0;def NFIVE44 = 0;def NFIVE45 = 0;
def NFIVE46 = 0;def NFIVE47 = 0;def NFIVE55 = 0;def NFIVE56 = 0;def NFIVE57 = 0;
def NFIVE66 = 0;def NFIVE67 = 0;def NFIVE77 = 0;def NFIVE21 = 0;def NFIVE32 = 0;
def NFIVE43 = 0;def NFIVE54 = 0;def NFIVE65 = 0;def NFIVE76 = 0;def NFIVE31 = 0;
def NFIVE42 = 0;def NFIVE53 = 0;def NFIVE64 = 0;def NFIVE75 = 0;def NFIVE41 = 0;
def NFIVE52 = 0;def NFIVE63 = 0;def NFIVE74 = 0;def NFIVE51 = 0;def NFIVE62 = 0;
def NFIVE73 = 0;
#
# Create the N^6 Matrix
#
def NSIX71 = NCUBE71 * NCUBE11 + NCUBE72 * NCUBE21 + NCUBE73 * NCUBE31 +
NCUBE74 * NCUBE41 + NCUBE75 * NCUBE51 + NCUBE76 * NCUBE61 + NCUBE77 * NCUBE71;
def NSIX11 = 0;def NSIX12 = 0;def NSIX13 = 0;def NSIX14 = 0;def NSIX15 = 0;def NSIX16 = 0;
def NSIX17 = 0;def NSIX22 = 0;def NSIX23 = 0;def NSIX24 = 0;def NSIX25 = 0;def NSIX26 = 0;
def NSIX27 = 0;def NSIX33 = 0;def NSIX34 = 0;def NSIX35 = 0;def NSIX36 = 0;def NSIX37 = 0;
def NSIX44 = 0;def NSIX45 = 0;def NSIX46 = 0;def NSIX47 = 0;def NSIX55 = 0;def NSIX56 = 0;
def NSIX57 = 0;def NSIX66 = 0;def NSIX67 = 0;def NSIX77 = 0;def NSIX21 = 0;def NSIX32 = 0;
def NSIX43 = 0;def NSIX54 = 0;def NSIX65 = 0;def NSIX76 = 0;def NSIX31 = 0;def NSIX42 = 0;
def NSIX51 = 0;def NSIX53 = 0;def NSIX64 = 0;def NSIX75 = 0;def NSIX41 = 0;def NSIX52 = 0;
def NSIX63 = 0;def NSIX74 = 0;def NSIX61 = 0;def NSIX62 = 0;def NSIX72 = 0;def NSIX73 = 0;
#
# Construct the Inverse Q Matrix
#
def INQ11 = 1 - N11 + NSQR11 - NCUBE11 + NFOUR11 - NFIVE11 + NSIX11;
def INQ21 = 0 - N21 + NSQR21 - NCUBE21 + NFOUR21 - NFIVE21 + NSIX21;
def INQ22 = 1 - N22 + NSQR22 - NCUBE22 + NFOUR22 - NFIVE22 + NSIX22;
def INQ31 = 0 - N31 + NSQR31 - NCUBE31 + NFOUR31 - NFIVE31 + NSIX31;
def INQ32 = 0 - N32 + NSQR32 - NCUBE32 + NFOUR32 - NFIVE32 + NSIX32;
def INQ33 = 1 - N33 + NSQR33 - NCUBE33 + NFOUR33 - NFIVE33 + NSIX33;
def INQ41 = 0 - N41 + NSQR41 - NCUBE41 + NFOUR41 - NFIVE41 + NSIX41;
def INQ42 = 0 - N42 + NSQR42 - NCUBE42 + NFOUR42 - NFIVE42 + NSIX42;
def INQ43 = 0 - N43 + NSQR43 - NCUBE43 + NFOUR43 - NFIVE43 + NSIX43;
def INQ44 = 1 - N44 + NSQR44 - NCUBE44 + NFOUR44 - NFIVE44 + NSIX44;
def INQ51 = 0 - N51 + NSQR51 - NCUBE51 + NFOUR51 - NFIVE51 + NSIX51;
def INQ52 = 0 - N52 + NSQR52 - NCUBE52 + NFOUR52 - NFIVE52 + NSIX52;
def INQ53 = 0 - N53 + NSQR53 - NCUBE53 + NFOUR53 - NFIVE53 + NSIX53;
def INQ54 = 0 - N54 + NSQR54 - NCUBE54 + NFOUR54 - NFIVE54 + NSIX54;
def INQ55 = 1 - N55 + NSQR55 - NCUBE55 + NFOUR55 - NFIVE55 + NSIX55;
def INQ61 = 0 - N61 + NSQR61 - NCUBE61 + NFOUR61 - NFIVE61 + NSIX61;
def INQ62 = 0 - N62 + NSQR62 - NCUBE62 + NFOUR62 - NFIVE62 + NSIX62;
def INQ63 = 0 - N63 + NSQR63 - NCUBE63 + NFOUR63 - NFIVE63 + NSIX63;
def INQ64 = 0 - N64 + NSQR64 - NCUBE64 + NFOUR64 - NFIVE64 + NSIX64;
def INQ65 = 0 - N65 + NSQR65 - NCUBE65 + NFOUR65 - NFIVE65 + NSIX65;
def INQ66 = 1 - N66 + NSQR66 - NCUBE66 + NFOUR66 - NFIVE66 + NSIX66;
def INQ71 = 0 - N71 + NSQR71 - NCUBE71 + NFOUR71 - NFIVE71 + NSIX71;
def INQ72 = 0 - N72 + NSQR72 - NCUBE72 + NFOUR72 - NFIVE72 + NSIX72;
def INQ73 = 0 - N73 + NSQR73 - NCUBE73 + NFOUR73 - NFIVE73 + NSIX73;
def INQ74 = 0 - N74 + NSQR74 - NCUBE74 + NFOUR74 - NFIVE74 + NSIX74;
def INQ75 = 0 - N75 + NSQR75 - NCUBE75 + NFOUR75 - NFIVE75 + NSIX75;
def INQ76 = 0 - N76 + NSQR76 - NCUBE76 + NFOUR76 - NFIVE76 + NSIX76;
def INQ77 = 1 - N77 + NSQR77 - NCUBE77 + NFOUR77 - NFIVE77 + NSIX77;
def INQ12 = 0; def INQ13 = 0;def INQ14 = 0;def INQ15 = 0;def INQ16 = 0;def INQ17 = 0;
def INQ23 = 0; def INQ24 = 0;def INQ25 = 0;def INQ26 = 0;def INQ27 = 0;def INQ34 = 0;
def INQ35 = 0; def INQ36 = 0;def INQ37 = 0;def INQ45 = 0;def INQ46 = 0;def INQ47 = 0;
def INQ56 = 0; def INQ57 = 0;def INQ67 = 0;
#
# Create the 1/L Diagonal Matrix
#
def DIAG11 = 1 / L11;
def DIAG22 = 1 / L22;
def DIAG33 = 1 / L33;
def DIAG44 = 1 / L44;
def DIAG55 = 1 / L55;
def DIAG66 = 1 / L66;
def DIAG77 = 1 / L77;
def DIAG12 = 0;def DIAG13 = 0;def DIAG14 = 0;def DIAG15 = 0;def DIAG16 = 0;def DIAG17 = 0;
def DIAG21 = 0;def DIAG23 = 0;def DIAG24 = 0;def DIAG25 = 0;def DIAG26 = 0;def DIAG27 = 0;
def DIAG31 = 0;def DIAG32 = 0;def DIAG34 = 0;def DIAG35 = 0;def DIAG36 = 0;def DIAG37 = 0;
def DIAG41 = 0;def DIAG42 = 0;def DIAG43 = 0;def DIAG45 = 0;def DIAG46 = 0;def DIAG47 = 0;
def DIAG51 = 0;def DIAG52 = 0;def DIAG53 = 0;def DIAG54 = 0;def DIAG56 = 0;def DIAG57 = 0;
def DIAG61 = 0;def DIAG62 = 0;def DIAG63 = 0;def DIAG64 = 0;def DIAG65 = 0;def DIAG67 = 0;
def DIAG71 = 0;def DIAG72 = 0;def DIAG73 = 0;def DIAG74 = 0;def DIAG75 = 0;def DIAG76 = 0;
#
# Multiply Q Inverse and 1/L Diagonal Matrices to create L Inverse
#
def LINV11 = INQ11 * DIAG11 + INQ12 * DIAG21 + INQ13 * DIAG31 + INQ14 * DIAG41 +
INQ15 * DIAG51 + INQ16 * DIAG61 + INQ17 * DIAG71;
def LINV22 = INQ21 * DIAG12 + INQ22 * DIAG22 + INQ23 * DIAG32 + INQ24 * DIAG42 +
INQ25 * DIAG52 + INQ26 * DIAG62 + INQ27 * DIAG72;
def LINV33 = INQ31 * DIAG13 + INQ32 * DIAG23 + INQ33 * DIAG33 + INQ34 * DIAG43 +
INQ35 * DIAG53 + INQ36 * DIAG63 + INQ37 * DIAG73;
def LINV44 = INQ41 * DIAG14 + INQ42 * DIAG24 + INQ43 * DIAG34 + INQ44 * DIAG44 +
INQ45 * DIAG54 + INQ46 * DIAG64 + INQ47 * DIAG74;
def LINV55 = INQ51 * DIAG15 + INQ52 * DIAG25 + INQ53 * DIAG35 + INQ54 * DIAG45 +
INQ55 * DIAG55 + INQ56 * DIAG65 + INQ57 * DIAG75;
def LINV66 = INQ61 * DIAG16 + INQ62 * DIAG26 + INQ63 * DIAG36 + INQ64 * DIAG46 +
INQ65 * DIAG56 + INQ66 * DIAG66 + INQ67 * DIAG76;
def LINV77 = INQ71 * DIAG17 + INQ72 * DIAG27 + INQ73 * DIAG37 + INQ74 * DIAG47 +
INQ75 * DIAG57 + INQ76 * DIAG67 + INQ77 * DIAG77;
def LINV21 = INQ21 * DIAG11 + INQ22 * DIAG21 + INQ23 * DIAG31 + INQ24 * DIAG41 +
INQ25 * DIAG51 + INQ26 * DIAG61 + INQ27 * DIAG71;
def LINV31 = INQ31 * DIAG11 + INQ32 * DIAG21 + INQ33 * DIAG31 + INQ34 * DIAG41 +
INQ35 * DIAG51 + INQ36 * DIAG61 + INQ37 * DIAG71;
def LINV32 = INQ31 * DIAG12 + INQ32 * DIAG22 + INQ33 * DIAG32 + INQ34 * DIAG42 +
INQ35 * DIAG52 + INQ36 * DIAG62 + INQ37 * DIAG72;
def LINV41 = INQ41 * DIAG11 + INQ42 * DIAG21 + INQ43 * DIAG31 + INQ44 * DIAG41 +
INQ45 * DIAG51 + INQ46 * DIAG61 + INQ47 * DIAG71;
def LINV42 = INQ41 * DIAG12 + INQ42 * DIAG22 + INQ43 * DIAG32 + INQ44 * DIAG42 +
INQ45 * DIAG52 + INQ46 * DIAG62 + INQ47 * DIAG72;
def LINV43 = INQ41 * DIAG13 + INQ42 * DIAG23 + INQ43 * DIAG33 + INQ44 * DIAG43 +
INQ45 * DIAG53 + INQ46 * DIAG63 + INQ47 * DIAG73;
def LINV51 = INQ51 * DIAG11 + INQ52 * DIAG21 + INQ53 * DIAG31 + INQ54 * DIAG41 +
INQ55 * DIAG51 + INQ56 * DIAG61 + INQ57 * DIAG71;
def LINV52 = INQ51 * DIAG12 + INQ52 * DIAG22 + INQ53 * DIAG32 + INQ54 * DIAG42 +
INQ55 * DIAG52 + INQ56 * DIAG62 + INQ57 * DIAG72;
def LINV53 = INQ51 * DIAG13 + INQ52 * DIAG23 + INQ53 * DIAG33 + INQ54 * DIAG43 +
INQ55 * DIAG53 + INQ56 * DIAG63 + INQ57 * DIAG73;
def LINV54 = INQ51 * DIAG14 + INQ52 * DIAG24 + INQ53 * DIAG34 + INQ54 * DIAG44 +
INQ55 * DIAG54 + INQ56 * DIAG64 + INQ57 * DIAG74;
def LINV61 = INQ61 * DIAG11 + INQ62 * DIAG21 + INQ63 * DIAG31 + INQ64 * DIAG41 +
INQ65 * DIAG51 + INQ66 * DIAG61 + INQ67 * DIAG71;
def LINV62 = INQ61 * DIAG12 + INQ62 * DIAG22 + INQ63 * DIAG32 + INQ64 * DIAG42 +
INQ65 * DIAG52 + INQ66 * DIAG62 + INQ67 * DIAG72;
def LINV63 = INQ61 * DIAG13 + INQ62 * DIAG23 + INQ63 * DIAG33 + INQ64 * DIAG43 +
INQ65 * DIAG53 + INQ66 * DIAG63 + INQ67 * DIAG73;
def LINV64 = INQ61 * DIAG14 + INQ62 * DIAG24 + INQ63 * DIAG34 + INQ64 * DIAG44 +
INQ65 * DIAG54 + INQ66 * DIAG64 + INQ67 * DIAG74;
def LINV65 = INQ61 * DIAG15 + INQ62 * DIAG25 + INQ63 * DIAG35 + INQ64 * DIAG45 +
INQ65 * DIAG55 + INQ66 * DIAG65 + INQ67 * DIAG75;
def LINV71 = INQ71 * DIAG11 + INQ72 * DIAG21 + INQ73 * DIAG31 + INQ74 * DIAG41 +
INQ75 * DIAG51 + INQ76 * DIAG61 + INQ77 * DIAG71;
def LINV72 = INQ71 * DIAG12 + INQ72 * DIAG22 + INQ73 * DIAG32 + INQ74 * DIAG42 +
INQ75 * DIAG52 + INQ76 * DIAG62 + INQ77 * DIAG72;
def LINV73 = INQ71 * DIAG13 + INQ72 * DIAG23 + INQ73 * DIAG33 + INQ74 * DIAG43 +
INQ75 * DIAG53 + INQ76 * DIAG63 + INQ77 * DIAG73;
def LINV74 = INQ71 * DIAG14 + INQ72 * DIAG24 + INQ73 * DIAG34 + INQ74 * DIAG44 +
INQ75 * DIAG54 + INQ76 * DIAG64 + INQ77 * DIAG74;
def LINV75 = INQ71 * DIAG15 + INQ72 * DIAG25 + INQ73 * DIAG35 + INQ74 * DIAG45 +
INQ75 * DIAG55 + INQ76 * DIAG65 + INQ77 * DIAG75;
def LINV76 = INQ71 * DIAG16 + INQ72 * DIAG26 + INQ73 * DIAG36 + INQ74 * DIAG46 +
INQ75 * DIAG56 + INQ76 * DIAG66 + INQ77 * DIAG76;
def LINV12 = 0;def LINV13 = 0;def LINV14 = 0;def LINV15 = 0;def LINV16 = 0;def LINV17 = 0;
def LINV23 = 0;def LINV24 = 0;def LINV25 = 0;def LINV26 = 0;def LINV27 = 0;def LINV34 = 0;
def LINV35 = 0;def LINV36 = 0;def LINV37 = 0;def LINV45 = 0;def LINV46 = 0;def LINV47 = 0;
def LINV56 = 0;def LINV57 = 0;def LINV67 = 0;
#
# Finally....
# Create the Inverse of the XTX Matrix by mulipling the Transpose of L Inverse and L Inverse
#
def XTXINV11 = LINV11 * LINV11 + LINV21 * LINV21 + LINV31 * LINV31 + LINV41 * LINV41 +
LINV51 * LINV51 + LINV61 * LINV61 + LINV71 * LINV71;
def XTXINV12 = LINV11 * LINV12 + LINV21 * LINV22 + LINV31 * LINV32 + LINV41 * LINV42 +
LINV51 * LINV52 + LINV61 * LINV62 + LINV71 * LINV72;
def XTXINV13 = LINV11 * LINV13 + LINV21 * LINV23 + LINV31 * LINV33 + LINV41 * LINV43 +
LINV51 * LINV53 + LINV61 * LINV63 + LINV71 * LINV73;
def XTXINV14 = LINV11 * LINV14 + LINV21 * LINV24 + LINV31 * LINV34 + LINV41 * LINV44 +
LINV51 * LINV54 + LINV61 * LINV64 + LINV71 * LINV74;
def XTXINV15 = LINV11 * LINV15 + LINV21 * LINV25 + LINV31 * LINV35 + LINV41 * LINV45 +
LINV51 * LINV55 + LINV61 * LINV65 + LINV71 * LINV75;
def XTXINV16 = LINV11 * LINV16 + LINV21 * LINV26 + LINV31 * LINV36 + LINV41 * LINV46 +
LINV51 * LINV56 + LINV61 * LINV66 + LINV71 * LINV76;
def XTXINV17 = LINV11 * LINV17 + LINV21 * LINV27 + LINV31 * LINV37 + LINV41 * LINV47 +
LINV51 * LINV57 + LINV61 * LINV67 + LINV71 * LINV77;
def XTXINV22 = LINV12 * LINV12 + LINV22 * LINV22 + LINV32 * LINV32 + LINV42 * LINV42 +
LINV52 * LINV52 + LINV62 * LINV62 + LINV72 * LINV72;
def XTXINV23 = LINV12 * LINV13 + LINV22 * LINV23 + LINV32 * LINV33 + LINV42 * LINV43 +
LINV52 * LINV53 + LINV62 * LINV63 + LINV72 * LINV73;
def XTXINV24 = LINV12 * LINV14 + LINV22 * LINV24 + LINV32 * LINV34 + LINV42 * LINV44 +
LINV52 * LINV54 + LINV62 * LINV64 + LINV72 * LINV74;
def XTXINV25 = LINV12 * LINV15 + LINV22 * LINV25 + LINV32 * LINV35 + LINV42 * LINV45 +
LINV52 * LINV55 + LINV62 * LINV65 + LINV72 * LINV75;
def XTXINV26 = LINV12 * LINV16 + LINV22 * LINV26 + LINV32 * LINV36 + LINV42 * LINV46 +
LINV52 * LINV56 + LINV62 * LINV66 + LINV72 * LINV76;
def XTXINV27 = LINV12 * LINV17 + LINV22 * LINV27 + LINV32 * LINV37 + LINV42 * LINV47 +
LINV52 * LINV57 + LINV62 * LINV67 + LINV72 * LINV77;
def XTXINV33 = LINV13 * LINV13 + LINV23 * LINV23 + LINV33 * LINV33 + LINV43 * LINV43 +
LINV53 * LINV53 + LINV63 * LINV63 + LINV73 * LINV73;
def XTXINV34 = LINV13 * LINV14 + LINV23 * LINV24 + LINV33 * LINV34 + LINV43 * LINV44 +
LINV53 * LINV54 + LINV63 * LINV64 + LINV73 * LINV74;
def XTXINV35 = LINV13 * LINV15 + LINV23 * LINV25 + LINV33 * LINV35 + LINV43 * LINV45 +
LINV53 * LINV55 + LINV63 * LINV65 + LINV73 * LINV75;
def XTXINV36 = LINV13 * LINV16 + LINV23 * LINV26 + LINV33 * LINV36 + LINV43 * LINV46 +
LINV53 * LINV56 + LINV63 * LINV66 + LINV73 * LINV76;
def XTXINV37 = LINV13 * LINV17 + LINV23 * LINV27 + LINV33 * LINV37 + LINV43 * LINV47 +
LINV53 * LINV57 + LINV63 * LINV67 + LINV73 * LINV77;
def XTXINV44 = LINV14 * LINV14 + LINV24 * LINV24 + LINV34 * LINV34 + LINV44 * LINV44 +
LINV54 * LINV54 + LINV64 * LINV64 + LINV74 * LINV74;
def XTXINV45 = LINV14 * LINV15 + LINV24 * LINV25 + LINV34 * LINV35 + LINV44 * LINV45 +
LINV54 * LINV55 + LINV64 * LINV65 + LINV74 * LINV75;
def XTXINV46 = LINV14 * LINV16 + LINV24 * LINV26 + LINV34 * LINV36 + LINV44 * LINV46 +
LINV54 * LINV56 + LINV64 * LINV66 + LINV74 * LINV76;
def XTXINV47 = LINV14 * LINV17 + LINV24 * LINV27 + LINV34 * LINV37 + LINV44 * LINV47 +
LINV54 * LINV57 + LINV64 * LINV67 + LINV74 * LINV77;
def XTXINV55 = LINV15 * LINV15 + LINV25 * LINV25 + LINV35 * LINV35 + LINV45 * LINV45 +
LINV55 * LINV55 + LINV65 * LINV65 + LINV75 * LINV75;
def XTXINV56 = LINV15 * LINV16 + LINV25 * LINV26 + LINV35 * LINV36 + LINV45 * LINV46 +
LINV55 * LINV56 + LINV65 * LINV66 + LINV75 * LINV76;
def XTXINV57 = LINV15 * LINV17 + LINV25 * LINV27 + LINV35 * LINV37 + LINV45 * LINV47 +
LINV55 * LINV57 + LINV65 * LINV67 + LINV75 * LINV77;
def XTXINV66 = LINV16 * LINV16 + LINV26 * LINV26 + LINV36 * LINV36 + LINV46 * LINV46 +
LINV56 * LINV56 + LINV66 * LINV66 + LINV76 * LINV76;
def XTXINV67 = LINV16 * LINV17 + LINV26 * LINV27 + LINV36 * LINV37 + LINV46 * LINV47 +
LINV56 * LINV57 + LINV66 * LINV67 + LINV76 * LINV77;
def XTXINV77 = LINV17 * LINV17 + LINV27 * LINV27 + LINV37 * LINV37 + LINV47 * LINV47 +
LINV57 * LINV57 + LINV67 * LINV67 + LINV77 * LINV77;
def XTXINV21 = XTXINV12;def XTXINV31 = XTXINV13;def XTXINV32 = XTXINV23;
def XTXINV41 = XTXINV14;def XTXINV42 = XTXINV24;def XTXINV43 = XTXINV34;
def XTXINV51 = XTXINV15;def XTXINV52 = XTXINV25;def XTXINV53 = XTXINV35;
def XTXINV54 = XTXINV45;def XTXINV61 = XTXINV16;def XTXINV62 = XTXINV26;
def XTXINV63 = XTXINV36;def XTXINV64 = XTXINV46;def XTXINV65 = XTXINV56;
def XTXINV71 = XTXINV17;def XTXINV72 = XTXINV27;def XTXINV73 = XTXINV37;
def XTXINV74 = XTXINV47;def XTXINV75 = XTXINV57;def XTXINV76 = XTXINV67;
#
# Multiply X Transpose by y to create the XTy Matrix
#
def XTy1 = fold xx1 = 1 to Nbars+1 with bb1 do bb1 +
GetValue(close, 2 - StartAtBar - xx1);
def XTy2 = fold xx2 = 1 to Nbars+1 with bb2 do bb2 + xx2 *
GetValue(close, 2 - StartAtBar - xx2);
def XTy3 = fold xx3 = 1 to Nbars+1 with bb3 do bb3 + Power(xx3 , 2) *
GetValue(close, 2 - StartAtBar - xx3);
def XTy4 = fold xx4 = 1 to Nbars+1 with bb4 do bb4 + Power(xx4 , 3) *
GetValue(close, 2 - StartAtBar - xx4);
def XTy5 = fold xx5 = 1 to Nbars+1 with bb5 do bb5 + Power(xx5 , 4) *
GetValue(close, 2 - StartAtBar - xx5);
def XTy6 = fold xx6 = 1 to Nbars+1 with bb6 do bb6 + Power(xx6 , 5) *
GetValue(close, 2 - StartAtBar - xx6);
def XTy7 = fold xx7 = 1 to Nbars+1 with bb7 do bb7 + Power(xx7 , 6) *
GetValue(close, 2 - StartAtBar - xx7);
#
# Calculate the Polynomial Coefficients by Multiplying XTX Inverse by XTy
#
def B0; def B1; def B2; def B3; def B4; def B5; def B6;
if bn == 1 {
B0 = XTXINV11 * XTy1 + XTXINV12 * XTy2 + XTXINV13 * XTy3 + XTXINV14 * XTy4 +
XTXINV15 * XTy5 + XTXINV16 * XTy6 + XTXINV17 * XTy7;
B1 = XTXINV21 * XTy1 + XTXINV22 * XTy2 + XTXINV23 * XTy3 + XTXINV24 * XTy4 +
XTXINV25 * XTy5 + XTXINV26 * XTy6 + XTXINV27 * XTy7;
B2 = XTXINV31 * XTy1 + XTXINV32 * XTy2 + XTXINV33 * XTy3 + XTXINV34 * XTy4 +
XTXINV35 * XTy5 + XTXINV36 * XTy6 + XTXINV37 * XTy7;
B3 = XTXINV41 * XTy1 + XTXINV42 * XTy2 + XTXINV43 * XTy3 + XTXINV44 * XTy4 +
XTXINV45 * XTy5 + XTXINV46 * XTy6 + XTXINV47 * XTy7;
B4 = XTXINV51 * XTy1 + XTXINV52 * XTy2 + XTXINV53 * XTy3 + XTXINV54 * XTy4 +
XTXINV55 * XTy5 + XTXINV56 * XTy6 + XTXINV57 * XTy7;
B5 = XTXINV61 * XTy1 + XTXINV62 * XTy2 + XTXINV63 * XTy3 + XTXINV64 * XTy4 +
XTXINV65 * XTy5 + XTXINV66 * XTy6 + XTXINV67 * XTy7;
B6 = XTXINV71 * XTy1 + XTXINV72 * XTy2 + XTXINV73 * XTy3 + XTXINV74 * XTy4 +
XTXINV75 * XTy5 + XTXINV76 * XTy6 + XTXINV77 * XTy7; }
else {
B0 = B0[1];B1 = B1[1];B2 = B2[1];B3 = B3[1];B4 = B4[1];B5 = B5[1];B6 = B6[1];}
#
plot Poly = if bn >= StartAtBar then (B0 + B1 * x + B2 * Power(x, 2) + B3 * Power(x, 3) +
B4 * Power(x, 4) + B5 * Power(x, 5) + B6 * Power(x, 6)) else Double.NaN;