ArcTan Oscillator

The following indicator is a normalized oscillator making use of the arc tangent sigmoid function (ArcTan), this allows to "squarify" the output result, thus visually filtering out certain variations originally in the oscillator. The magnitude of this effect can be controlled by the user. The indicator contains a gradient that shows the possibility of a reversal, with red colors indicating that a reversal might occur.


  • Length: Period of the oscillator

  • Pre-Gain : Changes the amplitude of the oscillator before passing through the ArcTan function, this allows to amplify/reduce the "squarification" effect introduced by this function. In order to make it easier for the user, the setting is in a (-10,10) range, with negative values reducing the amplitude and positive one increasing it.

  • Src : Source input of the indicator


The oscillator can be used to determine the direction of the trend by looking at its sign, if the oscillator is positive, market is up-trending, else down-trending, based on this usage the user might not be interested to look at every variations produced by the oscillator, this is where the hyperbolic tangent function and pre-gain setting can be useful, by using an high value of pre-gain the user will be able to only focus on the sign of the oscillator.

Here pre-gain is set to 5, we can see that the oscillator is now easier to visualize. However, the use of sigmoid functions remove useful information for a trader that needs to find divergences, this is where using a negative value of the pre-gain setting will result useful.

Here pre-gain is set to -5.

The indicator makes use of a gradient to show potential reversals, this gradient is determined by the correlation between the oscillator and the price (this is a way to measure potential divergences). If the color is closer to red it means that a potential reversal might occur, it is possible to say in which direction price might go by looking at the sign of the oscillator, so if the gradient is red and the oscillator is negative price might rise. The gradient is not affected by the pre-gain setting.


// This source code is subject to the terms of the Mozilla Public License 2.0 at
// © LuxAlgo
study("ArcTan Oscillator","ATO")
length = input(25)
pg = input(0,"Pre-Gain [-10,10]",minval=-10,maxval=10)
src = input(close,"Source")
grad(os) => os < 10 ? #ff1100 : max(os,10) < 20 ? #d12033 :
max(os,20) < 30 ? #bd2649 : max(os,30) < 40 ? #a72d61 :
max(os,40) < 50 ? #913479 : max(os,50) < 60 ? #743d99 :
max(os,60) < 70 ? #5945b6 : max(os,70) < 80 ? #494ac7 :
max(os,80) < 90 ? #3750db : #2157f3
ma = sma(src,length)
z = (ma - sma(ma,length))/stdev(ma,length)
os = atan(z*(pg <= 0 ? exp(pg) : pg*2))
cor = correlation(src,os,length)
plot(os,"Reversal Potential",color = grad((.5*cor+.5)*100)