.
Please... A little help here guys... :)
This sums are too much for my acknowledgment!
//---- double sumy=0, sumx=0, sumxy=0, sumx2=0; int i,pos=Bars-ExtCountedBars-1; //---- initial accumulation if(pos<RegLin_Period) pos=RegLin_Period; for(i=1;i<RegLin_Period;i++,pos--) { sumy+=Close[pos]; sumxy+=Close[pos]*i; sumx+=i; sumx2+=i*i; } //---- main calculation loop while(pos>=0) { sumy+=Close[pos]; sumxy+=Close[pos]*i; sumx+=i; sumx2+=i*i; SLOPE[pos] = (((RegLin_Period*sumxy)-(sumx*sumy)) / ((RegLin_Period*sumx)-(sumx*sumx))); sumy-=Close[pos+RegLin_Period-1]; sumxy-=Close[pos+RegLin_Period-1]*i; pos--; } //----
Are this sums correct?
I've done it based on the moving average indicator sum where it work fine! :(
.
Your Image shows Your Code doesn't match (RegLin_Period*sumxy)-(sumx*sumy)) / ((RegLin_Period*sumx)-(sumx*sumx))
n(Exy) - (Ex)(Ey)
-----------------
n(Ex2) - (Ex)2n(Exy) - (Ex)(Ey)
-----------------
n(Ex) - (Ex)2- You sumx and sumx2 but you never remove them like the sumy sumxy (after SLOPE[]=)
- You are trying to do it in one pass - makes it unreadable.
Factor out your functions and put it in a proper loop. Don't calculate needless bars.
double slope(int iBar, int nBars){ double sumy=0, sumx=0, sumxy=0, sumx2=0; int iLimit = iBar + nBars; for(; iBar < iLimit; iBar++) { sumy+=Close[iBar]; sumxy+=Close[iBar]*iBar; sumx+=iBar; sumx2+=iBar*iBar; } return( (nBars*sumxy - sumx*sumy) / (nBar*sumx2 - sumx*sumx) ); } int start(){ int count = IndicatorCounted(); if(count < RegLin_Period) count = RegLin_Period; // Lookback for(int iBar = Bars - 1 - count; iBar >= 0; iBar--){ { SLOPE[iBar] = slope(iBar, RegLin_Period); } }
.
Your the best!!! :D
I didn't know about TheilSen. It looks promissor...
I will make some tests betwen those two methods to see what fits better.
Thank you so much WHRoeder! Have a nice wekend :)
.
.
What a complicated concepts you introduced me!!!
I'm struggling hard to understand this piece of code... But it will not be easy...
Do you have some indicator that uses Theil-Sen ?
.
Meanwhile I leave here the Linear Regression Slope indicator for other people that may need it. :)
.
Hi WHRoeder,
I'm trying to develope an indicator based on the piece of code (TheilSen.mq4) that you give me.
But I don't know how to get the Slope from the function TheilSen2D( ) ...
//+------------------------------------------------------------------+ //| FUNCTION - TheilSen2D | //+------------------------------------------------------------------+ void TheilSen2D(double& m, double& b, double v[][], int n1, int e2, int iBeg=0) { /* Theil–Sen estimator of a set of two-dimensional points (xi,yi) is the median m of the slopes (yj - yi)/(xj - xi) http://en.wikipedia.org/wiki/Theil-Sen_estimator 2 2:1 1 3 2:1, 3:1, 3:2 3 4 2:1, 3:1, 3:2, 4:1, 4:2, 4:3 6 5 2:1, 3:1, 3:2, 4:1, 4:2, 4:3 5:1, 5:2, 5:3, 5:4 10 */ static double slopes[]; int nReq = n1 * (n1-1) / 2; if(ArraySize(slopes) < nReq) if(ArrayResize(slopes, nReq) <= 0) { DisableTrading("ArrayResize(TheilSen, " + nReq + ") Failed: " +GetLastError() ); return; } int nSlopes = 0; for(int i=iBeg + n1 - 1; i > iBeg; i--) for(int j=i - 1; j >= iBeg; j--) { slopes[nSlopes] = (v[i][e2] - v[j][e2]) / (i-j); nSlopes++; } m = Median(slopes, nSlopes); for(i=0; i < n1; i++) slopes[i] = v[iBeg+i][e2] - m * i; b = Median(slopes, n1); }
I was thinking in do something like the linear regression indicator.
But I really don't understand those input parameters...
TheilSen2D(double& m, double& b, double v[][], int n1, int e2, int iBeg=0)
Do you have some link where I can read more about that indicator/function?
Thank you! :)
.
TheilSen2D(double& m, double& b, double v[][], int n1, int e2, int iBeg=0)
I thought reading the function would be self explanatory.
v is the market array from ArrayCopyRates
e2 is the enumeration of which value
#define ACR_TIME 0 // Array Copy Rates #define ACR_OPEN 1 #define ACR_LOW 2 #define ACR_HIGH 3 #define ACR_CLOSE 4 // #define ACR_VOLUME 5 #define ACR_COUNT 6
slopes[nSlopes] = (v[i][e2] - v[j][e2]) / (i-j);
creates an array of slopes. You could easily change v[i][e2] to Close[i] for a standard 1D version.
.
I'm so noobie in this that I'm probably asking too basic things. And for that my apologies...
Let's see if now I can use it...
Thank you very much once again WHRoeder... :)
.
.
Hi WHRoeder,
Thank you for introduce me that concept (Theil-Sen) but it's too much for me...
I've tried hard but this is too much for my math and programing knowledges.
For now I will focus my ideas on the least squares...
Once again, thank you so much for your help!
God bless you!! :D
.
// SLOPE[iBar] = slope(iBar, RegLin_Period); double m, b; TheilSen(m, b, Close, RegLin_Period, iBar); SLOPE[iBar] = m;
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
.
Hi,
I'm trying to develop an indicator that gives the SLOPE of the regression line at each point.
The slope formula is this one:
http://s12.postimg.org/fumrf7s3x/Sem_T_tulo.png
I've already wrote some code based on the Moving Average indicator.
But I not very sure about those cicles are given me the sums that I want...
Can anyone give me some help here with these cycles please.
I've attached the indicator that I've already done. :)
.