On this page you will find our ever-growing collection of Thinkscript® studies you may find useful. Happy trading!
Impulse MACD
An upgrade to traditional MACD which helps identify flat trading areas.
# study("Impulse MACD", shorttitle="IMACD", overlay=false)
declare lower;
input BarColor = no;#input(false, title="Enable bar colors")
input lengthMA = 34;
input lengthSignal = 9;
input src = hlc3;
def na = Double.NaN;
#calc_smma(src, len) =>
script calc_smma {
input src = close;
input len = 34;
def smma = if isNaN(smma[1]) then SimpleMovingAvg(src, len) else (smma[1] * (len - 1) + src) / len;
plot return = smma;
}
#calc_zlema(src, length) =>
script calc_zlema {
input src = close;
input length = 34;
def ema1 = ExpAverage(src, length);
def ema2 = ExpAverage(ema1, length);
def d = ema1-ema2;
def zelma = ema1+d;
plot return = zelma;
}
def hi=calc_smma(high, lengthMA);
def lo=calc_smma(low, lengthMA);
def mi=calc_zlema(src, lengthMA);
def md = if (mi>hi)then (mi-hi) else if (mi<lo) then (mi - lo) else 0;
def sb = SimpleMovingAvg(md, lengthSignal);
def sh=md-sb;
def mdc = if src>mi then if src>hi then 2 else 1 else if src<lo then -2 else -1;
#--- PLots
plot ImpulseSignal = sb;
ImpulseSignal.SetDefaultColor(Color.WHITE);
ImpulseSignal.SetLineWeight(2);
plot ImpulseHisto = sh;
ImpulseHisto.SetPaintingStrategy(PaintingStrategy.SQUARED_HISTOGRAM);
ImpulseHisto.SetDefaultColor(Color.BLUE);
plot ImpulseMACD = md;
ImpulseMACD.SetPaintingStrategy(PaintingStrategy.LINE);
ImpulseMACD.AssignValueColor(if mdc==2 then Color.GREEN else
if mdc==1 then Color.DARK_GREEN else
if mdc==-2 then Color.RED else Color.DARK_RED);
plot "0" = if isNaN(close) then na else 0;
"0".SetDefaultColor(Color.DARK_GRAY);
#--- Bar Color
AssignPriceColor(if !BarColor then Color.CURRENT else
if mdc==2 then Color.GREEN else
if mdc==1 then Color.DARK_GREEN else
if mdc==-2 then Color.RED else Color.DARK_RED);
#--- END Code
Futures indicator
Adds a neat indicator with tick price, size, lot equivalent and risk per one futures contract.
# Futures contract information
Declare upper;
input Label_Color_Choice = {default "magenta", "green", "pink", "cyan", "orange", "red", "blue", "gray", "violet"};
def multiplier = TickValue() * (1 / TickSize());
AddLabel(1, "Tick Size = " + TickSize() + " ... Tick Value = " + AsDollars(TickValue()) + " ... 1-lot share equivalent = " + multiplier + " shares" + " ... Risk in 1 futures contract = " + AsDollars(close *multiplier), GetColor(Label_Color_Choice));