ÿþindicator CenterOfGravity; input bars = 180, order = 3, ecart = 1.61803399; draw reg("COG", solid_line, blue), x1("COG top 1", solid_line, gray), x2("COG top 2", solid_line, red), x3("COG top 3", solid_line, red), z1("COG bottom 1", solid_line, gray), z2("COG bottom 2", solid_line, green), z3("COG bottom 3", solid_line, green); vars fin(number), ii(number), jj(number), kk(number), ll(number), mm(number), nn(number), tt(number), qq(number), mi(number), sum(number), n(number), sd(number), dev(series), sx(series), b(series), ai(series), x(series); begin if back(close)-front(close) < bars then return; fin := back(close); nn := order + 1; sx[1] := bars + 1; for mi := 1 to 2*nn-2 do begin sum := 0; for n := 0 to bars do begin sum := sum + pow(n, mi); end; sx[mi + 1] := sum; end; for mi := 1 to nn do begin sum := 0; for n := 0 to bars do begin if mi = 1 then sum := sum + close[fin-n] else sum := sum + Close[fin-n] * pow(n, mi-1); b[mi] := sum; end; end; for jj := 1 to nn do begin for ii := 1 to nn do begin kk := ii + jj - 1; ai[(ii-1)*nn+jj] := sx[kk]; end; end; for kk := 1 to nn-1 do begin ll := 0; mm := 0; for ii := kk to nn do begin if abs(ai[(ii-1)*nn+kk]) > mm then begin mm := abs(ai[(ii-1)*nn+kk]); ll := ii; end; end; if ll = 0 then return; if ll <> kk then begin for jj := 1 to nn do begin tt := ai[(kk-1)*nn+jj]; ai[(kk-1)*nn+jj] := ai[(ll-1)*nn+jj]; ai[(ll-1)*nn+jj] := tt; end; tt := b[kk]; b[kk] := b[ll]; b[ll] := tt; end; for ii := kk+1 to nn do begin qq := ai[(ii-1)*nn+kk] / ai[(kk-1)*nn+kk]; for jj := 1 to nn do begin if jj = kk then ai[(ii-1)*nn+jj] := 0 else ai[(ii-1)*nn+jj] := ai[(ii-1)*nn+jj] - qq * ai[(kk-1)*nn+jj]; end; b[ii] := b[ii] - qq * b[kk]; end; end; x[nn] := b[nn] / ai[nn*nn]; for kk := 1 to nn-1 do begin tt := 0; ii := nn - kk; for jj := 1 to nn-ii do begin tt := tt + ai[(ii-1)*nn+ii+jj] * x[ii + jj]; if ai[(ii-1)*nn+ii] <> 0 then x[ii] := (b[ii] - tt) / ai[(ii-1)*nn+ii]; end; end; dev := StdDev(close, bars); sd := ecart * dev[fin]; for n := 0 to bars do begin sum := 0; for kk := 1 to order do begin sum := sum + x[kk+1] * pow(n, kk); end; reg[fin-n] := x[1] + sum; x1[fin-n] := reg[fin-n] + sd/(1.382*1.618); x2[fin-n] := reg[fin-n] + sd/1.382; x3[fin-n] := reg[fin-n] + sd; z1[fin-n] := reg[fin-n] - sd/(1.382*1.618); z2[fin-n] := reg[fin-n] - sd/1.382; z3[fin-n] := reg[fin-n] - sd; end; end.