Repaints 6th Order Polynomial Best Fit for ThinkOrSwim

Repaints

Ricker

New member
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;
 

Join useThinkScript to post your question to a community of 21,000+ developers and traders.

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;
@Ricker Hi bro, looks interesting! Please do you mind advise how to use this indicator? Cheers
 
You can expand your chart a couple bars to the right and the curve will show the a future trend.
@Ricker, thanks bro! Do you have the probability for the future trend to occur? Cheers

In addition, do you mind to share which time frame you are using to increase the future trend probability. For example, time interval - one (1) year with aggregation period one (1) day. Also, what is the best combination with the expansion number of bars to the right to suit the time interval and aggregation period. Thanks again. Cheers
 
Last edited:
@Ricker, thanks bro! Do you have the probability for the future trend to occur? Cheers

In addition, do you mind to share which time frame you are using to increase the future trend probability. For example, time interval - one (1) year with aggregation period one (1) day. Also, what is the best combination with the expansion number of bars to the right to suit the time interval and aggregation period. Thanks again. Cheers
No, I haven't added any probability info.

I only expand 2 or 3 bars. Beyond that it may go asymptotic. For intraday trends I use 'Today' Time interval with a 1 min aggregation period. One minute aggregation is the lowest you can go (not 'Tick' level). For longer history I do YTD, 1 yr, 2yr, etc intervals with a 1 day aggregation. Just about any combination will work as long as you keep the total curve length to less than 1,000 or so. You can reduce the curve length with a 'StartAtBar' input greater than the default of 1.
 
Very interesting, been looking for something like this. Question- is it possible to count 'curve begins at bar' from the right instead of from the left? That way the line will stay at one length without having to resize it every so often..
 
Very interesting, been looking for something like this. Question- is it possible to count 'curve begins at bar' from the right instead of from the left? That way the line will stay at one length without having to resize it every so often..
Here you go...
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 -
#   R W Rosborough  4/19/2023 Rev A  Input changed from curve starting bar number to curve length
#
# Limitations:
#  - Aggregation type must be 'Time' or 'Range' not 'Tick'
#  - Input Length must be at least 7 bars and no more than about 1,000
#  - Expansion area must be no more than 100 bars to the right
#
input Length = 20; 
#
def TotalBars =  HighestAll(BarNumber());
def bn = BarNumber();
def RtExp;
#
#  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 StartAtBar = TotalBars - RtExp - Length;
def Nbars = TotalBars - RtExp - StartAtBar + 1;
def x = bn - StartAtBar + 1;
#
AddLabel(1, TotalBars - RtExp + " 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;
 
Thread starter Similar threads Forum Replies Date
samer800 Order Block Band[Sam4Cok] for ThinkOrSwim Custom 0
samer800 Repaints Polynomial Regression Slope [QTL] for ThinkOrSwim Custom 3

Similar threads

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

87k+ Posts
262 Online
Create Post

Similar threads

Similar threads

The Market Trading Game Changer

Join 2,500+ subscribers inside the useThinkScript VIP Membership Club
  • Exclusive indicators
  • Proven strategies & setups
  • Private Discord community
  • ‘Buy The Dip’ signal alerts
  • Exclusive members-only content
  • Add-ons and resources
  • 1 full year of unlimited support

Frequently Asked Questions

What is useThinkScript?

useThinkScript is the #1 community of stock market investors using indicators and other tools to power their trading strategies. Traders of all skill levels use our forums to learn about scripting and indicators, help each other, and discover new ways to gain an edge in the markets.

How do I get started?

We get it. Our forum can be intimidating, if not overwhelming. With thousands of topics, tens of thousands of posts, our community has created an incredibly deep knowledge base for stock traders. No one can ever exhaust every resource provided on our site.

If you are new, or just looking for guidance, here are some helpful links to get you started.

What are the benefits of VIP Membership?
VIP members get exclusive access to these proven and tested premium indicators: Buy the Dip, Advanced Market Moves 2.0, Take Profit, and Volatility Trading Range. In addition, VIP members get access to over 50 VIP-only custom indicators, add-ons, and strategies, private VIP-only forums, private Discord channel to discuss trades and strategies in real-time, customer support, trade alerts, and much more. Learn all about VIP membership here.
How can I access the premium indicators?
To access the premium indicators, which are plug and play ready, sign up for VIP membership here.
Back
Top