I just got in and got a chance to check out the new toy,yes it's as marvelous as I thought it would be! thanks
Dear Mladen/Mr Tools,
As we know buying and selling currencies based on the direction they are moving is one of the most profitable ways of making money especially over the longer term. Is it then possible to design an indicator which would recognise the degree of the slope and colour it according to whether the currencies have risen or fallen or stayed in ranging periods? No matter how far and how long they have moved, thus to avoid staying overbought or oversold so typical for oscillators. Such an indicator should also have a multi timeframe functionality and can be used for manual trading. I would appreciate your work on that.
Slope available in buffer
Question about 'past regression deviated - main with slope line'...
If I understand it correctly, one could calculate the slope by querying the slBuffer buffer at the  bar and the [LR.length] bar (as in, IndicatorSlope = (slbuffer-slbuffer[LR.length-1])/LR.length-1)?
If so, would you recommend this calculation or an added buffer for use in automation?
If the buffer, would you please add a buffer to your 'past regression deviated - main with slope line' that makes the actual slope of the line available in a buffer? I think there is one left. If not, we could get by with only one pair of buffers for the SD. Or, maybe you feel it better reworked in the work format.
Thanks a bunch.
This is the function I used in the automatic (linear) regression channel :
double iLRValue(double& LinearRegSlope, int len, int shift)
double SumXY = 0;
double SumY = 0;
if (lr.period != len)
lr.period = len;
lr.sumX = lr.period * (lr.period-1) / 2;
lr.sumXSqr = lr.period * (lr.period-1) * (2 * lr.period - 1) / 6;
lr.divisor = MathPow(lr.sumX,2) - lr.period * lr.sumXSqr;
for (int i=0; i<lr.period; i++)
double price = prices;
SumXY += i*price;
SumY += price;
if( lr.divisor != 0 )
LinearRegSlope = (lr.period * SumXY - lr.sumX * SumY)/lr.divisor;
else LinearRegSlope = 0;
Intercept = (SumY - LinearRegSlope * lr.sumX) / lr.period ;
LinearRegValue = Intercept + LinearRegSlope * (lr.period-1);
It is returning the linear regression value as a "direct" return, but it also changes the "passed by reference" LinearRegSlope so that it receives the exact value of the slope (slope is given as a bar-to-bar slope not as a "total" slope" - you have to multiply it with the period-1 to get the "total" slope) so maybe this one is what are you looking for. Will make a version with one additional parameter (the "price") and that way it will become independent of any other working buffer and will post it here when done
Angles on a time series can be calculated only as an approximation. Did you see this indicator :https://c.mql5.com/forextsd/forum/108/angle_of_average.mq4 from this post https://www.mql5.com/en/forum/general of the elite indicators thread?
As promised, this is a "standalone" (no buffers allocated to it before the call to it) version for linear regression value and slope.
double iLRValue(double tprice, double& LinearRegSlope, int lr.period, int i, int instanceNo=0)
if (ArrayRange(lrPrices,0)!=Bars) ArrayResize(lrPrices,Bars); i = Bars-i-1;
double lr.sumX = lr.period * (lr.period-1) / 2;
double lr.sumXSqr = lr.period * (lr.period-1) * (2 * lr.period - 1) / 6;
double lr.divisor = MathPow(lr.sumX,2) - lr.period * lr.sumXSqr;
lrPrices = tprice;
for (int k=0; k<lr.period; k++)
double price = lrPrices;
SumXY += k*price;
example of call would be like this
after this call, both value and slope are assigned their according values. You can use any values instead of the Close (value of some other indicator, for example)
Thank you for considering and then solving. I'm sure I can work with the * lr period solution, but did you intend to include a new version of the indicator?
A new version of exactly which indicator?
You said above, "As promised, this is a "standalone" (no buffers allocated to it before the call to it) version for linear regression value and slope."
I did not know if 'version' meant a new indicator or snippet to incorporate into existing indicator. I just wanted to know if you meant to attach anything to the last post as I did not see a file attachment. I haven't taken the time to understand the call, but will look through it and incorporate as able. Thanks.
Previous version of the function "assumed" that there is a buffer called "prices" and that it is filled in with values before you call it. This version takes care of arrays needed for calculation and is enough to call it the proposed way and it will calculate the needed. That is what I meant when I said the "standalone". It can simply be copied and used without a need to add any other code to the "basic" code. Also, if you wish to use multiple instances calculation, it is already ready for that and all that is needed to be changed is the second dimension of the lrPrices array to desired number of instances
Anyway, glad that it is sorted out. Sometimes I tell too much, an sometimes to little (like probably in the post where I posted the function )