#Impulse modified to use RMO Short Term and Long Term in confluence
#ImpulseRMOLST by Tradebyday
#==============
# Mid and Short term waves - They create buy and sell signals
# translated from a Metastock script by rhouser
# set show RMO = no
input length = 2;
input rmoLength = 81;
input swingTrdLen = 30;
input showRMO = no;
def mva01 = MovingAverage( AverageType.SIMPLE, close, length );
def mva02 = MovingAverage( AverageType.SIMPLE, mva01, length );
def mva03 = MovingAverage( AverageType.SIMPLE, mva02, length );
def mva04 = MovingAverage( AverageType.SIMPLE, mva03, length );
def mva05 = MovingAverage( AverageType.SIMPLE, mva04, length );
def mva06 = MovingAverage( AverageType.SIMPLE, mva05, length );
def mva07 = MovingAverage( AverageType.SIMPLE, mva06, length );
def mva08 = MovingAverage( AverageType.SIMPLE, mva07, length );
def mva09 = MovingAverage( AverageType.SIMPLE, mva08, length );
def mva10 = MovingAverage( AverageType.SIMPLE, mva09, length );
def RMO = ( close - ( ( mva01 + mva02 + mva03 + mva04 + mva05 + mva06 + mva07 + mva08 + mva09 + mva10 ) / 10 ) ) / ( Highest( close, 10 ) - Lowest( close, 10 ) );
def Swingtrade = MovingAverage( AverageType.EXPONENTIAL, RMO, rmoLength );
def SwingTrd2 = MovingAverage( AverageType.EXPONENTIAL, RMO, swingTrdLen );
def SwingTrd3 = MovingAverage( AverageType.EXPONENTIAL, SwingTrd2, swingTrdLen );
def ZeroLine = 0;
# buy and sell conditions
def buy = if SwingTrd2 crosses above SwingTrd3 and SwingTrd3[0] > SwingTrd3[1] and SwingTrd3 > 0 then 1
else if SwingTrd3 crosses above 0 and SwingTrd3[0] > SwingTrd3[1] and SwingTrd3 > 0 then 1
else if SwingTrd2 crosses above 0 and SwingTrd3[0] > SwingTrd3[1] and SwingTrd3 > 0 then 1
else Double.NaN;
def sell = if SwingTrd2 crosses below SwingTrd3 and Swingtrade < 0 and Swingtrade[0] < Swingtrade[1] and low[0] < low[1] then 1
else if SwingTrd3 crosses below 0 and Swingtrade < 0 and Swingtrade[0] < Swingtrade[1] and low[0] < low[1] then 1
else if SwingTrd2 crosses below 0 and Swingtrade < 0 and Swingtrade[0] < Swingtrade[1] and low[0] < low[1] then 1
else Double.NaN;
#==============
#==============
# Long term wave - This shows the trend
def RMO2 = 100 * (close - ((Average(close, 2) +
Average(Average(close, 2), 2) +
Average(Average(Average(close, 2), 2), 2) +
Average(Average(Average(Average(close, 2), 2), 2), 2) +
Average(Average(Average(Average(Average(close, 2), 2), 2), 2), 2) +
Average(Average(Average(Average(Average(Average(close, 2), 2), 2), 2), 2), 2) +
Average(Average(Average(Average(Average(Average(Average(close, 2), 2), 2), 2), 2), 2), 2) +
Average(Average(Average(Average(Average(Average(Average(Average(close, 2), 2), 2), 2), 2), 2), 2), 2) +
Average(Average(Average(Average(Average(Average(Average(Average(Average(close, 2), 2), 2), 2), 2), 2), 2), 2), 2) +
Average(Average(Average(Average(Average(Average(Average(Average(Average(Average(close, 2), 2), 2), 2), 2), 2), 2), 2), 2), 2)) / 10)) /
(Highest(close, 10) - Lowest(close, 10));
def swingtrade4 = ExpAverage(RMO, 81);
#==============
def GreenPrice = Swingtrd2 > 0 and swingtrade4 > 0;
def RedPrice = Swingtrd2 < 0 and swingtrade4 < 0;
plot Bullish = GreenPrice;
plot Neutral = !GreenPrice and !RedPrice;
plot Bearish = RedPrice;
Bullish.SetDefaultColor(Color.UPTICK);
Bullish.SetPaintingStrategy(PaintingStrategy.BOOLEAN_POINTS);
Bullish.SetLineWeight(3);
Bullish.Hide();
Neutral.SetDefaultColor(Color.BLUE);
Neutral.SetPaintingStrategy(PaintingStrategy.BOOLEAN_POINTS);
Neutral.SetLineWeight(3);
Neutral.Hide();
Bearish.SetDefaultColor(Color.DOWNTICK);
Bearish.SetPaintingStrategy(PaintingStrategy.BOOLEAN_POINTS);
Bearish.SetLineWeight(3);
Bearish.Hide();
DefineGlobalColor("Bullish", Color.UPTICK);
DefineGlobalColor("Neutral", Color.BLUE);
DefineGlobalColor("Bearish", Color.DOWNTICK);
AssignPriceColor(if GreenPrice then GlobalColor("Bullish") else if RedPrice then GlobalColor("Bearish") else GlobalColor("Neutral"));