//+------------------------------------------------------------------+ //| test.mq4 | //| Copyright © 2009, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ double fx[126],sqh[126],sql[126],stdh[126],stdl[126]; int start() { //---- CenterOfCGravity(); Alert("Lower Line 2 = " + stdl[1]); Alert("Lower Line 1 = " + sql[1]); Alert("Upper Line 2 = " + stdh[1]); Alert("Upper Line 1 = " + sqh[1]); Alert("Center Line = " + fx[1]); if ( fx[1] > fx[2] ) Alert("Trend is pointing Up"); else Alert("Trend is pointing Down"); return(0); } //+------------------------------------------------------------------+ void CenterOfCGravity() { double ai[10,10], b[10], x[10], sx[20]; double qq, mm, tt,sq, std,sum; int ip, p, n, f,ii, jj, kk, ll, nn,mi; int i = 0; int m = 2; int bars_back = 125; double kstd = 2.0; nn = m + 1; ip = bars_back; p = bars_back; sx[1] = p + 1; for(mi = 1; mi <= nn * 2 - 2; mi++) { sum = 0; for(n = i; n <= i + p; n++) { sum += MathPow(n, mi); } sx[mi + 1] = sum; } for(mi = 1; mi <= nn; mi++) { sum = 0.00000; for(n = i; n <= i + p; n++) { if(mi == 1) sum += Close[n]; else sum += Close[n] * MathPow(n, mi - 1); } b[mi] = sum; } for(jj = 1; jj <= nn; jj++) { for(ii = 1; ii <= nn; ii++) { kk = ii + jj - 1; ai[ii, jj] = sx[kk]; } } for(kk = 1; kk <= nn - 1; kk++) { ll = 0; mm = 0; for(ii = kk; ii <= nn; ii++) { if(MathAbs(ai[ii, kk]) > mm) { mm = MathAbs(ai[ii, kk]); ll = ii; } } if(ll == 0) return(0); if(ll != kk) { for(jj = 1; jj <= nn; jj++) { tt = ai[kk, jj]; ai[kk, jj] = ai[ll, jj]; ai[ll, jj] = tt; } tt = b[kk]; b[kk] = b[ll]; b[ll] = tt; } for(ii = kk + 1; ii <= nn; ii++) { qq = ai[ii, kk] / ai[kk, kk]; for(jj = 1; jj <= nn; jj++) { if(jj == kk) ai[ii, jj] = 0; else ai[ii, jj] = ai[ii, jj] - qq * ai[kk, jj]; } b[ii] = b[ii] - qq * b[kk]; } } x[nn] = b[nn] / ai[nn, nn]; for(ii = nn - 1; ii >= 1; ii--) { tt = 0; for(jj = 1; jj <= nn - ii; jj++) { tt = tt + ai[ii, ii + jj] * x[ii + jj]; x[ii] = (1 / ai[ii, ii]) * (b[ii] - tt); } } for(n = i; n <= i + p; n++) { sum = 0; for(kk = 1; kk <= m; kk++) { sum += x[kk + 1] * MathPow(n, kk); } fx[n] = x[1] + sum; } sq = 0.0; for(n = i; n <= i + p; n++) { sq += MathPow(Close[n] - fx[n], 2); } sq = MathSqrt(sq / (p + 1)) * kstd; std = iStdDev(NULL, 0, p, MODE_SMA, 0, PRICE_CLOSE, i) * kstd; for(n = i; n <= i + p; n++) { sqh[n] = fx[n] + sq; sql[n] = fx[n] - sq; stdh[n] = fx[n] + std; stdl[n] = fx[n] - std; } } //end of function