| On TOS they have call Thinker Script. Do not know whether this will be useful to you. 
 This is MACD
 
 #
 # TD Ameritrade IP Company, Inc. (c) 2007-2017
 #
 
 declare lower;
 
 input fastLength = 12;
 input slowLength = 26;
 input MACDLength = 9;
 input averageType = AverageType.EXPONENTIAL;
 input showBreakoutSignals = no;
 
 plot Value = MovingAverage(averageType, close, fastLength) - MovingAverage(averageType, close, slowLength);
 plot Avg = MovingAverage(averageType, Value, MACDLength);
 
 plot Diff = Value - Avg;
 plot ZeroLine = 0;
 
 plot UpSignal = if Diff crosses above ZeroLine then ZeroLine else Double.NaN;
 plot DownSignal = if Diff crosses below ZeroLine then ZeroLine else Double.NaN;
 
 UpSignal.SetHiding(!showBreakoutSignals);
 DownSignal.SetHiding(!showBreakoutSignals);
 
 Value.SetDefaultColor(GetColor(1));
 Avg.SetDefaultColor(GetColor(8));
 Diff.SetDefaultColor(GetColor(5));
 Diff.SetPaintingStrategy(PaintingStrategy.HISTOGRAM);
 Diff.SetLineWeight(3);
 Diff.DefineColor("Positive and Up", Color.GREEN);
 Diff.DefineColor("Positive and Down", Color.DARK_GREEN);
 Diff.DefineColor("Negative and Down", Color.RED);
 Diff.DefineColor("Negative and Up", Color.DARK_RED);
 Diff.AssignValueColor(if Diff >= 0 then if Diff > Diff[1] then Diff.color("Positive and Up") else Diff.color("Positive and Down") else if Diff < Diff[1] then Diff.color("Negative and Down") else Diff.color("Negative and Up"));
 ZeroLine.SetDefaultColor(GetColor(0));
 UpSignal.SetDefaultColor(Color.UPTICK);
 UpSignal.SetPaintingStrategy(PaintingStrategy.ARROW_UP);
 DownSignal.SetDefaultColor(Color.DOWNTICK);
 DownSignal.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
 |