Thinkscript studies

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));