Guys here is a filter for ya v2015 just received it:
# TS_YA V2015
#
Http://www.yellowarrows.ru
#
Admin@thinkswimindicator.com
# Last Update 18 Apr 2015
input ShowTodayOnly = no;
input ShowExtraDays = 0;
input ArrowsOn = yes;
input TracerLinesOn = no;
input stdevLength = 5;
input avgOfStdevLength = 10;
input DYMILength = 7;
input DYMILengthLowerLimit = 3;
input DYMILengthUpperLimit = 30;
input length = 8;
input price = close;
input filterOutSignalsBelow = 7;
assert (DYMILengthLowerLimit> 0, "'dymi length lower limit' must be positive:" + DYMILengthLowerLimit);
assert (DYMILength between DYMILengthLowerLimit and DYMILengthUpperLimit, "'dymi length' must be between lower and upper limit:" + DYMILength);
def Today = if! ShowTodayOnly then 1 else if GetDay () + ShowExtraDays> = GetLastDay () && GetYear () == GetLastYear () then 1 else 0;
input ArrowSpace = .233;
def space = Average (high - low) * ArrowSpace;
def std = stdev (price, stdevLength);
def ratio = std / Average (std, avgOfStdevLength);
def dynamicLength = Floor (DYMILength / ratio);
def limitedLength = if dynamicLength between DYMILengthLowerLimit and DYMILengthUpperLimit then dynamicLength else 0;
def sf = 5 / (limitedLength + 1);
def bn = Max (barNumber (), 0);
def body = AbsValue (open-close);
def larger = if low [1]> high [-1] and body> body [1] and body> body [2] and body> body [3] then 1 else 0;
# 10 ^ -5 precision for ema multiplier
def expIndex = if limitedLength == 0 then 1 else max (1, bn - ceil (-5 / lg (1 - sf)));
def fromIndex = if isNan (expIndex) then 1 else expIndex; def chg = price - price [1];
def absChg = AbsValue (chg);
def netChgAvg = fold indexN = fromIndex to bn + 1 with accuN do sf * (if isnan (getValue (chg, bn - indexN)) then 0 else getValue (chg, bn - indexN)) + (1 - sf) * accuN;
def totChgAvg = fold indexT = fromIndex to bn + 1 with accuT do sf * (if isnan (getValue (absChg, bn - indexT)) then 0 else getValue (absChg, bn - indexT)) + (1 - sf) * accuT;
def RSI = if totChgAvg! = 0 and limitedLength! = 0 then 50 * (netChgAvg / totChgAvg + 1) else RSI [1];
def DYMI = RSI;
def OverBought = 95;
def OverSold = 5;
def VarP = round (length / 5);
def VarA = Highest (high, VarP) - Lowest (low, VarP);
def VarR1 = if VarA == 0 and VarP == 1 then AbsValue (close - close [VarP]) else VarA;
def VarB = Highest (high, VarP) [VarP + 1] - Lowest (low, VarP) [VarP];
def VarR2 = If VarB == 0 and VarP == 1 then AbsValue (close [VarP] - close [VarP * 2]) else VarB;
def VarC = Highest (high, VarP) [VarP * 2] - Lowest (low, VarP) [VarP * 2];
def VarR3 = If VarC == 0 and VarP == 1 then AbsValue (close [VarP * 2] - close [VarP * 3]) else VarC;
def VarD = Highest (high, VarP) [VarP * 3] - Lowest (low, VarP) [VarP * 3];
def VarR4 = If VarD == 0 and VarP == 1 then AbsValue (close [VarP * 3] - close [VarP * 4]) else VarD;
def VarE = Highest (high, VarP) [VarP * 4] - Lowest (low, VarP) [VarP * 4];
def VarR5 = If VarE == 0 and VarP == 1 then AbsValue (close [VarP * 4] - close [VarP * 5]) else VarE;
def VarF = Highest (high, VarP) [VarP * 5] - Lowest (Low, VarP) [VarP * 5];
def VarR6 = If VarF == 0 and VarP == 1 then AbsValue (close [VarP * 5] - close [VarP * 6])
else VarF;
def VarG = Highest (high, VarP) [VarP * 6] - Lowest (Low, VarP) [VarP * 6];
def VarR7 = If VarG == 0 and VarP == 1 then AbsValue (close [VarP * 6] - close [VarP * 7])
else VarG;
def VarH = Highest (high, VarP) [VarP * 7] - Lowest (Low, VarP) [VarP * 7];
def VarR8 = If VarH == 0 and VarP == 1 then AbsValue (close [VarP * 7] - close [VarP * 8])
else VarH;
def VarI = Highest (high, VarP) [VarP * 8] - Lowest (Low, VarP) [VarP * 8];
def VarR9 = If VarI == 0 and VarP == 1 then AbsValue (close [VarP * 8] - close [VarP * 9])
else VarI;
def VarJ = Highest (high, VarP) [VarP * 9] - Lowest (Low, VarP) [VarP * 9];
def VarR10 = If VarJ == 0 and VarP == 1 then AbsValue (close [VarP * 9] - close [VarP * 10])
else VarJ;
def VarK = Highest (high, VarP) [VarP * 10] - Lowest (Low, VarP) [VarP * 10];
def VarR11 = If VarK == 0 and VarP == 1 then AbsValue (close [VarP * 10] - close [VarP * 11])
else VarK;
def VarL = Highest (high, VarP) [VarP * 11] - Lowest (Low, VarP) [VarP * 11];
def VarR12 = If VarL == 0 and VarP == 1 then AbsValue (close [VarP * 11] - close [VarP * 12])
else VarL;
def LRange = ((VarR1 + VarR2 + VarR3 + VarR4 + VarR5 + VarR6 + VarR7 + VarR8 + VarR9 + VarR10 + VarR11 + VarR12) / 12) * 0.2;
def Var0 = if AbsValue (close - close [1])> (high - low) then AbsValue (close - close [1]) else (high - low);
def LRange2 = if high == low then Average (AbsValue (close - close [1]) 1) * 0.2 else Average (Var0, 1) * 0.2;
def range = high + low;
def delta = high - low;
def median = range / 2;
def floatingAxis = Average (median, length);
def dynamicVolatilityUnit = if length <= 9 then LRange2 else LRange;
def relativeHigh = (high - floatingAxis) / dynamicVolatilityUnit;
def relativeLow = (low - floatingAxis) / dynamicVolatilityUnit;
def relativeOpen = (open - floatingAxis) / dynamicVolatilityUnit;
def relativeClose = (close - floatingAxis) / dynamicVolatilityUnit;
def h = relativeHigh;
def l = relativeLow;
def sellDivergence = if high> high [1] and relativeHigh <relativeHigh [1] and relativeHigh [1]> filterOutSignalsBelow then 1 else 0;
def buyDivergence = if low <low [1] and relativeLow> relativeLow [1] and relativeLow [1] <-filterOutSignalsBelow then 1 else 0;
def BuyIt = PPS (). buysignal;
def SellIt = PPS (). sellsignal;
def hiddenDivergenceUp = if low> low [1] and relativeLow <relativeLow [1] then 1 else 0;
def hiddenDivergenceDown = if high <high [1] and relativeHigh> relativeHigh [1] then 1 else 0;
rec PriceAtBuy = if barNumber () == 1 then close else if! IsNaN (BuyIt [0]) then open [0] else PriceAtBuy [1];
rec PriceAtSell = if barNumber () == 1 then close else if! IsNaN (SellIt [0]) then open [0] else PriceAtSell [1];
rec trigger = if PriceAtBuy <> PriceAtBuy [1] then -1 else if PriceAtSell <> PriceAtSell [1] then 1 else trigger [1];
plot upArrow = DYMI <= OverSold AND if buyDivergence then low else double.nan AND if! Today or! ArrowsOn then Double.NaN else BuyIt - space AND if TracerLinesOn && trigger == -1 then PriceAtBuy else Double.NaN and if high [1] <low [-1] and body> body [1] and body> body [2] and body> body [3] then 1 else 0;
upArrow.SetPaintingStrategy (
paintingStrategy.BOOLEAN_ARROW_UP);
upArrow.SetD