I need the service of a coder who understands both MQL5 and Pinescript Languages. I already have the source code for the indicator I want to create in Pinescript. I only need it to be translated to MQL5 so that I can use it on MetatTrader 5. The indicator is a combination of Apirine Slow RSI and a moving average which plots the average values of the Slow RSI. I have the standalone Apirine Slow RSI indicator which I downloaded from the market section of MT5 but I've tried adding the moving average to it on my charts but the plotting of the moving average isn't consistent across different zoom levels. So I thought adding the moving average in the source code should solve the problem.
NB: If possible, write the code for the moving average in such a way that it has three modes - Simple, Exponential and Smoothed.
Below is the Pinescript code for the indicator (I call it Trend Catcher) I want to create:
//@version=4
study("Trend Catcher", shorttitle="Trend_Catcher", overlay=false)
// Input variables
smaPeriod = input(20, title="SMA Period", minval=1)
oversoldLevel = input(20, title="Oversold Level", minval=0, maxval=100)
midLevel = input(50, title="Middle Level", minval=0, maxval=100)
overboughtLevel = input(80, title="Overbought Level", minval=0, maxval=100)
// Slow RSI Calculation
smooth = input(14, title="RSI Period Length", minval=1, maxval=100)
price = close
fn(src, length) =>
MA_s = 0.0
MA_s := (src + nz(MA_s[1]) * (length - 1)) / length
MA_s
r1 = ema(price, 5)
r2 = iff(price > r1, price - r1, 0)
r3 = iff(price < r1, r1 - price, 0)
r4 = fn(r2, smooth)
r5 = fn(r3, smooth)
slowRSI = iff(r5 == 0, 100, 100 - (100 / (1 + (r4 / r5))))
// Simple Moving Average Calculation
sma = sma(slowRSI, smaPeriod)
// Plotting the indicators
plot(slowRSI, title="Slow RSI", color=color.blue, linewidth=1)
plot(sma, title="SMA", color=color.red, linewidth=1, style=plot.style_circles)
// Plotting the Oversold, Middle, and Overbought levels
hline(oversoldLevel, "Oversold", color=color.green)
hline(midLevel, "Middle", color=color.orange)
hline(overboughtLevel, "Overbought", color=color.red)