# Courtesy of Hahn-Tech, LLC
# https://www.youtube.com/watch?v=VOJwH9U0aL0
# macd scan
input fastLength = 12;
input slowLength = 26;
input MACDLength = 9;
input averageTypeMACD = AverageType.EXPONENTIAL;
input showBreakoutSignals = no;
def Value = MovingAverage(averageTypeMACD, close, fastLength) - MovingAverage(averageTypeMACD, close, slowLength);
def Avg = MovingAverage(averageTypeMACD, Value, MACDLength);
def Diff = Value - Avg;
# stochastic slow scan
input over_bought = 80;
input over_sold = 20;
input KPeriod = 14;
input DPeriod = 7;
input priceH = high;
input priceL = low;
input priceC = close;
input averageTypeStoch = AverageType.SIMPLE;
input showBreakoutSignalsStoch = {default "No", "On SlowK", "On SlowD", "On SlowK & SlowD"};
def SlowK = reference StochasticFull(over_bought,over_sold,KPeriod,DPeriod,priceH,priceL,priceC,3,averageTypeStoch).FullK;
def SlowD = reference StochasticFull(over_bought,over_sold,KPeriod,DPeriod,priceH,priceL,priceC,3,averageTypeStoch).FullD;;
# Establish crossover of slowd (SMA) above slowk (high/low prices period)
plot Scan = (SlowK[1] < SlowD[1]) and (SlowK > SlowD)
# Only look at slowk value under oversold value of 20
and (lowest(SlowK[1], 3) < 20)
# Macd should be rising
and (Diff[1] > Diff[2]);