scubamut
10/16/2014 - 1:38 PM

## Turning Point Oscillator

Turning Point Oscillator

``````def create_tposcillator(s, peaks, troughs):

tps = sorted(peaks + troughs)
TPOscillator = []
index = []

for i in range(len(s)):
if i < min(min(peaks), min(troughs)) or i > max(max(peaks), max(troughs)):
TPOsc = 999     # TPOsc undefined
elif i in troughs:
TPOsc = 0.
elif i in peaks:
TPOsc = 1.
else:
idx_left = max([idx for idx in tps  if idx < i])
idx_right = min([idx for idx in tps  if idx > i])
if idx_left in peaks:
Pt = s[idx_left]
Tt = s[idx_right]
else :
Tt = s[idx_left]
Pt = s[idx_right]

TPOsc = (s[i] - Tt) / (Pt - Tt)

if TPOsc < 0. or TPOsc > 1.:
print (s.index[i],'TPOsc=',TPOsc,'s[i]=',s[i],'idx_left=',idx_left, 'idx_right=',idx_right, 'Pt=',Pt, 'Tt=',Tt)

if TPOsc != 999:
#print (i, TPOsc)
TPOscillator.append(TPOsc)
index.append(s.index[i])

return pd.Series(TPOscillator, index=index)``````

Deﬁnition 4: Turning point oscillator(TPOscillator) Let \$X\$ be a price sequence and let \$A(X)\$ be its alternating pivots sequence(that is, \$A(x)\$ is the list of turning point times in \$X\$). The TPOscillator is a mapping \$Γ: N → [0, 1]\$, such that: \$Γ(t)= 0\$ if \$t\$ is a trough, \$1\$ if it is a peak and \$x_t − P_t / P_t − T_t\$ otherwise, where \$P_t\$ and \$T_t\$ are the values of the timeseries at the nearest peak and trough located on opposite sides of time \$t\$.