Sensei 5m

barbaros

Administrator
Staff member
Platform
  1. Thinkorswim
Community modification request, by @abhay.

xN15MFt.png


Code:
input ORBegin = 0900;
input OREnd = 1545;
input ShowTodayOnly={"No", default "Yes"};
def s=ShowTodayOnly;
Def ORActive = if secondstilltime(OREnd)>0 AND secondsfromtime(ORBegin)>=0 then 1 else 0;

################################################################
input method = {default average, high_low};
def bubbleoffset = .0005;
def percentamount = .01;
def revAmount = .05;
def atrreversal = 2.0;
def atrlength = 5;
def pricehigh = high;
def pricelow = low;
def averagelength = 5;
def averagetype = AverageType.EXPONENTIAL;

def mah = MovingAverage(averagetype, pricehigh, averagelength);
def mal = MovingAverage(averagetype, pricelow, averagelength);

def priceh = if method == method.high_low then pricehigh else mah;
def pricel = if method == method.high_low then pricelow else mal;

def EI = ZigZagHighLow("price h" = priceh, "price l" = pricel, "percentage reversal" = percentamount, "absolute reversal" = revAmount, "atr length" = atrlength, "atr reversal" = atrreversal);

def reversalAmount = if (close * percentamount / 100) > Max(revAmount < atrreversal * reference ATR(atrlength), revAmount) then (close * percentamount / 100) else if revAmount < atrreversal * reference ATR(atrlength) then atrreversal * reference ATR(atrlength) else revAmount;

rec EISave = if !IsNaN(EI) then EI else GetValue(EISave, 1);

def chg = (if EISave == priceh then priceh else pricel) - GetValue(EISave, 1);
def isUp = chg >= 0;

rec isConf = AbsValue(chg) >= reversalAmount or (IsNaN(GetValue(EI, 1)) and GetValue(isConf, 1));

def EId = if isUp then 1 else 0;

#Price Change between Enhanceds
def xxhigh = if EISave == priceh then priceh else xxhigh[1];
def chghigh = priceh - xxhigh[1];
def xxlow = if EISave == pricel then pricel else xxlow[1];
def chglow = pricel - xxlow[1];
def showBubbleschange = no;

#AddChartBubble(showBubbleschange and !IsNaN(EI) and BarNumber() != 1, if isUp then priceh * (1 + bubbleoffset) else pricel * (1 - bubbleoffset) , "$" + chg , if isUp and chghigh > 0 then Color.GREEN else if isUp and chghigh < 0 then Color.RED else if isUp then Color.YELLOW else if !isUp and chglow > 0 then Color.GREEN else if !isUp and chglow < 0 then Color.RED else Color.YELLOW, isUp);
#Price at High/Low

def showBubblesprice = no;

#AddChartBubble(showBubblesprice and !IsNaN(EI) and BarNumber() != 1, if isUp then priceh * (1 + bubbleoffset) else pricel * (1 - bubbleoffset) , if isUp then "$" + priceh else "$" + pricel , if isUp and chghigh > 0 then Color.GREEN else if isUp and chghigh < 0 then Color.RED else if isUp then Color.YELLOW else if !isUp and chglow > 0 then Color.GREEN else if !isUp and chglow < 0 then Color.RED else Color.YELLOW, isUp);
#Label for Confirmed/Unconfirmed Status of Current Enhanced

#Bar Count between Enhanceds
rec EIcount = if EISave[1] != EISave then 1 else if EISave[1] == EISave then EIcount[1] + 1 else 0;

def EIcounthilo = if EIcounthilo[1] == 0 and (EISave == priceh or EISave == pricel) then 1 else if EISave == priceh or EISave == pricel then EIcounthilo[1] + 1 else EIcounthilo[1];

def EIhilo = if EISave == priceh or EISave == pricel then EIcounthilo else EIcounthilo + 1;

def EIcounthigh = if EISave == priceh then EIcount[1] else Double.NaN;
def EIcountlow = if EISave == pricel then EIcount[1] else Double.NaN;
def showBubblesbarcount = no;

#AddChartBubble(showBubblesbarcount and !IsNaN(EI) and BarNumber() != 1, if isUp then priceh * (1 + bubbleoffset) else pricel * (1 - bubbleoffset) , if EISave == priceh then EIcounthigh else EIcountlow, if isUp and chghigh > 0 then Color.GREEN else if isUp and chghigh < 0 then Color.RED else if isUp then Color.YELLOW else if !isUp and chglow > 0 then Color.GREEN else if !isUp and chglow < 0 then Color.RED else Color.YELLOW, if isUp then yes else no );

#Arrows
def EIL = if !IsNaN(EI) and !isUp then pricel else GetValue(EIL, 1);
def EIH = if !IsNaN(EI) and isUp then priceh else GetValue(EIH, 1);

def dir = CompoundValue(1, if EIL != EIL[1] or pricel == EIL[1] and pricel == EISave then 1 else if EIH != EIH[1] or priceh == EIH[1] and priceh == EISave then -1 else dir[1], 0);

def signal = CompoundValue(1, if dir > 0 and pricel > EIL then if signal[1] <= 0 then 1 else signal[1] else if dir < 0 and priceh < EIH then if signal[1] >= 0 then -1 else signal[1] else signal[1], 0);

def showarrows = yes;

def U1 = showarrows and signal > 0 and signal[1] <= 0;
def D1 = showarrows and signal < 0 and signal[1] >= 0;
def barnumber = BarNumber();

#plot bubblerep = barnumber and U1 and ORActive;
#plot bubblerep2 = barnumber and D1 and ORActive;

plot bubblerep =  U1 and ORActive;
plot bubblerep2 = D1 and ORActive;

bubblerep.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
bubblerep.SetDefaultColor(Color.CYAN);
bubblerep.SetLineWeight(3);

bubblerep2.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
bubblerep2.SetDefaultColor(Color.MAGENTA);
bubblerep2.SetLineWeight(3);

### Added by Barbaros

input filterMALength = 12;
input filterBarCross = 6;

def lastDirection = if bubblerep then 1 else if bubblerep2 then -1 else lastDirection[1];

plot filterEMA = MovAvgExponential(close, filterMALength);

plot bubbleFilterAbove = lastDirection == 1 and close crosses above filterEMA and bubblerep crosses above 0 within filterBarCross bars;
bubbleFilterAbove.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
bubbleFilterAbove.SetDefaultColor(Color.GREEN);
bubbleFilterAbove.SetLineWeight(3);

plot bubbleFilterBelow = lastDirection == -1 and close crosses below filterEMA and bubblerep2 crosses above 0 within filterBarCross bars;
bubbleFilterBelow.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
bubbleFilterBelow.SetDefaultColor(Color.RED);
bubbleFilterBelow.SetLineWeight(3);

### End

#Alerts
def usealerts = Yes;

Alert(U1, "TOS Alerts Sensei BUY SPY-UP 5min @", Alert.BAR, Sound.Chimes);
Alert(D1, "TOS Alerts Sensei SELL SPY-DN 5min @", Alert.BAR, Sound.Chimes);
 
Top