LSMA - A Fast And Simple Alternative Calculation


At the start of 2019 i published my first post "Approximating A Least Square Moving Average In Pine", who aimed to provide alternatives calculation of the least squares moving average ( LSMA ), a moving average who aim to estimate the underlying trend in the price without excessive lag.

The LSMA has the form of a linear regression ax + b where x is a linear sequence 1.2.3..N and with time varying a and b, the exact formula of the LSMA is as follows :

a = stdev(close,length)/stdev(bar_index,length) * correlation(close,bar_index,length)
b = sma (close,length) - a*sma(bar_index,length)
lsma = a*bar_index + b

Such calculation allow to forecast future values however such forecast is rarely accurate and the LSMA is mostly used as a smoother. In this post an alternative calculation is proposed, such calculation is incredibly simple and allow for an extremely efficient computation of the LSMA .


The LSMA is a FIR low-pass filter with the following impulse response :

The impulse response of a FIR filter gives us the weight of the filter, as we can see the weights of the LSMA are a linearly decreasing sequence of values, however unlike the linearly weighted moving average ( WMA ) the weights of the LSMA take on negative values, this is necessary in order to provide a better fit to the data. Based on such impulse response we know that the WMA can help calculate the LSMA , since both have weights representing a linearly decreasing sequence of values, however the WMA doesn't have negative weights, so the process here is to fit the WMA impulse response to the impulse response of the LSMA .

Based on such negative values we know that we must subtract the impulse response of the WMA by a constant value and multiply the result, such constant value can be given by the impulse response of a simple moving average , we must now make sure that the impulse response of the WMA and SMA cross at a precise point, the point where the impulse response of the LSMA is equal to 0.

We can see that 3WMA and 2SMA are equal at a certain point, and that the impulse response of the LSMA is equal to 0 at that point, if we proceed to subtraction we obtain :

Therefore :

LSMA = 3WMA - 2SMA = WMA + 2( WMA - SMA )


On a graph the difference isn't visible, subtracting the proposed calculation with a regular LSMA of the same period gives :

the error is 0.0000000...and certainly go on even further, therefore we can assume that the error is due to rounding errors.


This post provided a different calculation of the LSMA , it is shown that the LSMA can be made from the linear combination of a WMA and a SMA : 3WMA + -2SMA. I encourage peoples to use impulse responses in order to estimate other moving averages, since some are extremely heavy to compute.

Thanks for reading !


Become a Patreon and get access to exclusive technical indicators!

You can also check out some of the indicators I made for luxalgo :
오픈 소스 스크립트

이 스크립트의 오써는 참된 트레이딩뷰의 스피릿으로 이 스크립트를 오픈소스로 퍼블리쉬하여 트레이더들로 하여금 이해 및 검증할 수 있도록 하였습니다. 오써를 응원합니다! 스크립트를 무료로 쓸 수 있지만, 다른 퍼블리케이션에서 이 코드를 재사용하는 것은 하우스룰을 따릅니다. 님은 즐겨찾기로 이 스크립트를 차트에서 쓸 수 있습니다.


이 정보와 게시물은 TradingView에서 제공하거나 보증하는 금융, 투자, 거래 또는 기타 유형의 조언이나 권고 사항을 의미하거나 구성하지 않습니다. 자세한 내용은 이용 약관을 참고하세요.

차트에 이 스크립트를 사용하시겠습니까?