TA-Lib / ta-lib-python

Python wrapper for TA-Lib (http://ta-lib.org/).
http://ta-lib.github.io/ta-lib-python
Other
9.27k stars 1.72k forks source link

Request For True Momentum Oscillator (TMO) #605

Open azimgiant opened 1 year ago

azimgiant commented 1 year ago

First of all thank you for creating this project. It has been a great help. I wanted to request the TMO indicator as it has helped me a lot in my own personal trading. I just started to learn python to backtest my trading strategies, so my knowledge is at a beginner level. I tried using chatgpt to convert the pinescript to python however that wasn't much help. If this could be added in that would be awesome. Thanks!

[https://www.tradingview.com/script/o9BQyaA4-True-Momentum-Oscillator/] Pinescript: // @Version=4 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

// True Momentum Oscillator // by SparkyFlary

study(title="True Momentum Oscillator", overlay=false)

length = input(14, title="Length") calcLength = input(5, title="Calc length") smoothLength = input(3, title="Smooth length") lengthType = input("EMA", title="Length moving average type", options=["EMA", "SMA", "RMA"]) calcLengthType = input("EMA", title="Calc length moving average type", options=["EMA", "SMA", "RMA"]) smoothLengthType = input("EMA", title="Smooth length moving average type", options=["EMA", "SMA", "RMA"])

//function for choosing moving averages f_ma(type, src, len) => float result = 0 if type == "EMA" result := ema(src, len) if type == "SMA" result := sma(src, len) if type == "RMA" result := rma(src, len) result

o = open c = close s = 0 for i = 0 to length s := s + (c > o[i] ? 1 : c < o[i] ? - 1 : 0) data = s

MA = f_ma(lengthType, data, calcLength) Main = f_ma(calcLengthType, MA, smoothLength) Signal = f_ma(smoothLengthType, Main, smoothLength)

ob = hline(round(length .7), title="overbought cutoff line", color=color.gray, linestyle=hline.style_solid) os = hline(-round(length .7), title="oversold cutoff line", color=color.gray, linestyle=hline.style_solid) upper = hline(length, title="upper line", color=color.red, linestyle=hline.style_solid) lower = hline(-length, title="lower line", color=color.green, linestyle=hline.style_solid) zero = hline(0, title="zero line", color=color.gray, linestyle=hline.style_solid)

mainPlot = plot(Main, title="main line", color=Main>Signal?color.green:color.red, linewidth=2) signalPlot = plot(Signal, title="signal line", color=Main>Signal?color.green:color.red) crossPlot = plot(cross(Main,Signal)?Main:na, title="crossover dot", color=Main>Signal?color.green:color.red, style=plot.style_circles, linewidth=3)

fill(mainPlot, signalPlot, title="main and signal area", color=Main>Signal?color.green:color.red) fill(ob, upper, title="overbought zone", color=color.red) fill(os, lower, title="oversold zone", color=color.green)