RSI Laguerre Lines w/Targets

Chuck

Moderator
Staff member
C9NRK7s.png
Code:
#StudyName:     RSI_Laguerre_Lines_wTargets
#Version/Date:  v1 5/30/17                                          
#TOS.mx Link:
#Type:          [Study]                                              
#Description:   RSI in Laguerre Time MTF plotted on Upper chart
#Author:        jcseattle
#Copyright:     Copyright jcseattle/amalia 2016. All rights reserved.
#Copyleft:      This program is free software: you can redistribute it and/or modify
#               it under the terms of the GNU General Public License as published by
#               the Free Software Foundation, either version 3 of the License, or
#               (at your option) any later version. See <http://www.gnu.org/licenses/>
#Requested By:   ""
#History:       Ver  Date        Auth  Change
#First draft    v1   5/30/17     jcseattle - No changes
# Notes           :Based off original script in
#                  RSI in Laguerre Time MTF Option_v3
#                  Mobius
#                  V02.07.2014
#                  translation of J Elher's code
# Annotation      : ""
# Trading Notes   : ""

#                                        Start Code

def na = Double.NaN;
script R {
    input gamma              = .2;
    input usecandletype      = {candle_hybrid, default candle};
    input usehigheraggperiod = {default "Current", "Higher"};
    input outputformat       = {default Rounded, "Not Rounded"};
    ;#Hint outputformat: 'Not Rounded' is used for notes, bonds (eg: 109'110), forex, etc type format.
    input atrlength          = 21;
    input agg                = AggregationPeriod.TWO_MIN;
    input overbought         = .8;
    input oversold           = .2;
    def o;
    def h;
    def l;
    def c;
    def CU1;
    def CU2;
    def CU;
    def CD1;
    def CD2;
    def CD;
    def L0;
    def L1;
    def L2;
    def L3;
    plot RSI;
    plot OS;
    plot OB;
    def error = usehigheraggperiod == usehigheraggperiod."Higher" and GetAggregationPeriod() > agg;
    switch (usehigheraggperiod) {
    case Current:
        if usecandletype == usecandletype.candle_hybrid {
            o = (open + close[1]) / 2;
            h = Max(high, close[1]);
            l = Min(low, close[1]);
            c = (o + h + l + close) / 4;
        } else {
            o = open;
            h = high;
            l = low;
            c = close;
        }
    case Higher:
        if error {
            o = Double.NaN;
            h = Double.NaN;
            l = Double.NaN;
            c = Double.NaN;
        } else {
            if usecandletype == usecandletype.candle_hybrid {
                o = (open(period = agg)     + close(period = agg)[1]) / 2;
                h = Max(high(period = agg)  , close(period = agg)[1]);
                l = Min(low(period = agg)   , close(period = agg)[1]);
                c = ((open(period = agg)    + close(period = agg)[1]) / 2
            + Max(high(period = agg), close(period = agg)[1])
            + Min(low(period = agg) , close(period = agg)[1])
            + close(period = agg)) / 4;
            } else {
                o = open(period = agg);
                h = high(period = agg);
                l = low(period = agg);
                c = close(period = agg);
            }
        }
}
    L0 = (1 – gamma) * c + gamma * L0[1];
    L1 = -gamma * L0 + L0[1] + gamma * L1[1];
    L2 = -gamma * L1 + L1[1] + gamma * L2[1];
    L3 = -gamma * L2 + L2[1] + gamma * L3[1];
    if L0 >= L1
    then {
        CU1 = L0 - L1;
        CD1 = 0;
    } else {
        CD1 = L1 - L0;
        CU1 = 0;
    }
    if L1 >= L2
    then {
        CU2 = CU1 + L1 - L2;
        CD2 = CD1;
    } else {
        CD2 = CD1 + L2 - L1;
        CU2 = CU1;
    }
    if L2 >= L3
    then {
        CU = CU2 + L2 - L3;
        CD = CD2;
    } else {
        CU = CU2;
        CD = CD2 + L3 - L2;
    }

    RSI = if IsNaN(close) then Double.NaN
      else if CU + CD <> 0
      then    CU / (CU + CD) else 0;
    OS  = if IsNaN(close)
      then Double.NaN else oversold;
    OB  = if IsNaN(close)
      then Double.NaN
      else overbought;
    def mid = if IsNaN(close) then Double.NaN else 0.5;
    def lineh = 1.2;
    def linel = -.2;
   
# End Code Basic RSI Laguerre - Author: Mobius

}

def Up = if R() crosses above R().OS then 1 else 0;
def u = if R() crosses above R().OB then 1 else 0;

def Dn = if R() crosses below R().OB then 1 else 0;
def d = if R() crosses below R().OS then 1 else 0;

def Green = if Up
#or u
then low else 0;
def Red = if Dn
#or d
then high else 0;

def showLines = 1;


def trendchange = if Green then low else if Red then high else trendchange[1];

def PL = if !IsNaN(trendchange)
             then trendchange
             else PL[1];

plot pivotLine = if PL > 0
                       then PL
                       else Double.NaN;
pivotLine.SetPaintingStrategy(PaintingStrategy.LINE);
pivotLine.SetHiding(!showLines);

input showArrows = yes;
plot ArrUp = if showArrows and Green then low else 0;
ArrUp.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
ArrUp.SetDefaultColor(Color.GREEN);

plot ArrDn = if showArrows and Red then high else 0;
ArrDn.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
ArrDn.SetDefaultColor(Color.RED);

pivotLine.AssignValueColor(if R() < R().OB then Color.RED else if R() > R().OS then Color.GREEN else Color.BLACK);

input ShowLabels = yes;
#Multipliers for ATR targets
input firsttgt = 1.618;
input secondtgt = 3.447;
input thirdtgt = 4.25;
input ATRLength = 8;#default is 14

def agg = if GetAggregationPeriod() > AggregationPeriod.FIFTEEN_MIN then GetAggregationPeriod() else AggregationPeriod.FIFTEEN_MIN;#You can edit this to just (GetAggregationPeriod())
def ATR = Average(TrueRange(High(period = agg),Close(period = agg),Low(period = agg)),ATRLength);
addlabel(ShowLabels, "ATR = " + Round((ATR) / TickSize(),0)*TickSize(), Color.GRAY);

input showStrategy = yes;
def co = if PL[1] and R()[1] > R().OS[1] then 1 else 0;
def firstlongtarget = if co then (PivotLine + ATR*firsttgt) else 0;
def secondlongtarget = if co then (PivotLine + ATR*secondtgt) else 0;
def thirdlongtarget = if co then (PivotLine + ATR*thirdtgt) else 0;

def sto = if PL and R() < R().OB then 1 else 0;
def firstshorttarget = if sto then (PivotLine - ATR*firsttgt) else 0;
def secondshorttarget = if sto then (PivotLine - ATR*secondtgt) else 0;
def thirdshorttarget = if sto then (PivotLine - ATR*thirdtgt) else 0;


#    Internal Script Reference
#    Author: Mobius

    def LineLimit = 30;
    def Detrend = 0;
    def OnExpansion = yes;
    def data = firstlongtarget;
    def bar = 0;
    def ShowAllPlots = 0;
    def ThisBar = HighestAll(bar) - Detrend;
    def cLine   = if ShowAllPlots == 0
            then if bar == ThisBar
                 then data
                 else Double.NaN
            else data;
    def cond1 = CompoundValue(1, if IsNaN(data)
                                then cond1[1]
                                else data, data);
    def P = if ShowAllPlots == 0
            then if ThisBar - LineLimit <= bar
            then HighestAll(cLine)
            else Double.NaN
            else cLine;
    plot firstLTarget = if OnExpansion and
                     IsNaN(data[-1])
                  then cond1
                  else Double.NaN;
firstLTarget.SetDefaultColor(Color.GREEN);
addlabel(ShowLabels, if R() > R().OS then "Long Target = " + Round((firstLTarget) / TickSize(),0)*TickSize() else "", Color.GREEN);
AddChartBubble(IsNaN(close) and !isNaN(close[1]),
               firstLTarget,
              "First Target = " + Round((firstLTarget) / TickSize(),0)*TickSize(),
               Color.GREEN,
               yes);

def difflongtarget = if close < firstlongtarget then (firstlongtarget - close) else (close - firstlongtarget);
addLabel(ShowLabels, if R() > R().OS then "Diff 1st L tgt = " + (Round((difflongtarget) / TickSize(),0)*TickSize()) else "", Color.LIGHT_GREEN);


    def LineLimit3 = 30;
    def Detrend3 = 0;
    def OnExpansion3 = yes;
    def data3 = secondlongtarget;
    def bar3 = 0;
    def ShowAllPlots3 = 0;
    def ThisBar3 = HighestAll(bar) - Detrend;
    def cLine3   = if ShowAllPlots3 == 0
            then if bar3 == ThisBar3
                 then data3
                 else Double.NaN
            else data3;
    def cond3 = CompoundValue(1, if IsNaN(data3)
                                then cond3[1]
                                else data3, data3);
    def P3 = if ShowAllPlots3 == 0
            then if ThisBar3 - LineLimit3 <= bar3
            then HighestAll(cLine3)
            else Double.NaN
            else cLine3;
    plot secondLTarget = if OnExpansion3 and
                     IsNaN(data3[-1])
                  then cond3
                  else Double.NaN;
secondLTarget.SetDefaultColor(Color.GREEN);
addlabel(ShowLabels, if R() > R().OS then "2nd Long Target = " + Round((secondLTarget) / TickSize(),0)*TickSize() else "", Color.GREEN);
AddChartBubble(IsNaN(close) and !isNaN(close[1]),
               secondLTarget,
              "2nd Long Target = " + Round((secondLTarget) / TickSize(),0)*TickSize(),
               Color.GREEN,
               yes);

def difflongtarget2 = if close < secondlongtarget then (secondlongtarget - close) else (close - secondlongtarget);
addLabel(ShowLabels, if R() > R().OS then "Diff 2nd L tgt = " + Round((difflongtarget2) / TickSize(),0)*TickSize() else "", Color.LIGHT_GREEN);


    def LineLimit9 = 30;
    def Detrend9 = 0;
    def OnExpansion9 = yes;
    def data9 = thirdlongtarget;
    def bar9 = 0;
    def ShowAllPlots9 = 0;
    def ThisBar9 = HighestAll(bar9) - Detrend9;
    def cLine9   = if ShowAllPlots9 == 0
            then if bar9 == ThisBar9
                 then data9
                 else Double.NaN
            else data9;
    def cond9 = CompoundValue(1, if IsNaN(data9)
                                then cond9[1]
                                else data9, data9);
    def P9 = if ShowAllPlots9 == 0
            then if ThisBar9 - LineLimit9 <= bar9
            then HighestAll(cLine9)
            else Double.NaN
            else cLine9;
    plot thirdLTarget = if OnExpansion9 and
                     IsNaN(data9[-1])
                  then cond9
                  else Double.NaN;
thirdLTarget.SetDefaultColor(Color.GREEN);
addlabel(ShowLabels, if R() > R().OS then "3rd Long Target = " + Round((thirdLTarget) / TickSize(),0)*TickSize() else "", Color.GREEN);
AddChartBubble(IsNaN(close) and !isNaN(close[1]),
              thirdLTarget,
            "3rd Long Target = " + Round((thirdLTarget) / TickSize(),0)*TickSize(),
               Color.GREEN,
               yes);

def difflongtarget9 = if close < thirdlongtarget then (thirdlongtarget - close) else (close - thirdlongtarget);
addLabel(ShowLabels, if R() > R().OS then "Diff 3rd L tgt = " + Round((difflongtarget9) / TickSize(),0)*TickSize() else "", Color.LIGHT_GREEN);


    def LineLimit2 = 30;
    def Detrend2 = 0;
    def OnExpansion2 = yes;
    def data2 = firstshorttarget;
    def bar2 = 0;
    def ShowAllPlots2 = 0;
    def ThisBar2 = HighestAll(bar2) - Detrend2;
    def cLine2   = if ShowAllPlots2 == 0
            then if bar2 == ThisBar2
                 then data2
                 else Double.NaN
           else data2;
    def cond2 = CompoundValue(1, if IsNaN(data2)
                                then cond2[1]
                                else data2, data2);
    def P2 = if ShowAllPlots2 == 0
            then if ThisBar2 - LineLimit2 <= bar2
            then HighestAll(cLine2)
            else Double.NaN
            else cLine2;
    plot firstSTarget = if OnExpansion2 and
                     IsNaN(data2[-1])
                  then cond2
                  else Double.NaN;
firstSTarget.SetDefaultColor(Color.RED);
addlabel(ShowLabels, if R() < R().OB then "1st Short Target = " + Round((firstSTarget) / TickSize(),0)*TickSize() else "", Color.RED);
AddChartBubble(IsNaN(close) and !IsNaN(Close[1]),
                firstSTarget,
                "Short Target = " + Round((firstSTarget) / TickSize(),0)*TickSize(),
                Color.RED,
                no);

def diffshorttarget = if close < data2 then (data2 - close) else (close - data2);
addLabel(ShowLabels, if R() < R().OB then "Diff 1st S tgt = " + Round((diffshorttarget) / TickSize(),0)*TickSize() else "", Color.LIGHT_RED);
#

    def LineLimit4 = 30;
    def Detrend4 = 0;
    def OnExpansion4 = yes;
    def data4 = secondshorttarget;
    def bar4 = 0;
    def ShowAllPlots4 = 0;
    def ThisBar4 = HighestAll(bar4) - Detrend4;
    def cLine4   = if ShowAllPlots4 == 0
            then if bar4 == ThisBar4
                 then data4
                 else Double.NaN
           else data4;
    def cond4 = CompoundValue(1, if IsNaN(data4)
                                then cond4[1]
                                else data4, data4);
    def P4 = if ShowAllPlots4 == 0
            then if ThisBar4 - LineLimit4 <= bar4
            then HighestAll(cLine4)
            else Double.NaN
            else cLine4;
    plot secondSTarget = if OnExpansion4 and
                  IsNaN(data4[-1])
                  then cond4 #
                  else Double.NaN;
secondSTarget.SetDefaultColor(Color.RED);
#Round((close + (atr)) / TickSize(), 0) * TickSize()
addlabel(ShowLabels, if R() < R().OB then "2nd Short Target = " + Round((secondSTarget) / TickSize(),0)*TickSize() else "", Color.RED);
AddChartBubble(IsNaN(close) and !IsNaN(Close[1]),
                secondSTarget,
                "2nd Short Target = " + Round((secondSTarget) / TickSize(),0)*TickSize(),
                Color.RED,
                no);

def diffshorttgt2 = if close < secondshorttarget then (secondshorttarget - close) else (close - secondshorttarget);
addLabel(ShowLabels, if R() < R().OB then "Diff 2nd S tgt = " + Round((diffshorttgt2) / TickSize(),0)*TickSize() else "", Color.LIGHT_RED);

    def LineLimit8 = 30;
    def Detrend8 = 0;
    def OnExpansion8 = yes;
    def data8 = thirdshorttarget;
    def bar8 = 0;
    def ShowAllPlots8 = 0;
    def ThisBar8 = HighestAll(bar8) - Detrend8;
    def cLine8  = if ShowAllPlots8 == 0
            then if bar8 == ThisBar8
                 then data8
                 else Double.NaN
            else data8;
    def cond8 = CompoundValue(1, if IsNaN(data8)
                                then cond8[1]
                                else data8, data8);
    def P8 = if ShowAllPlots8 == 0
            then if ThisBar8 - LineLimit8 <= bar8
            then HighestAll(cLine8)
            else Double.NaN
            else cLine8;
    plot thirdSTarget = if OnExpansion8 and
                     IsNaN(data8[-1])
                  then cond8
                  else Double.NaN;
thirdSTarget.SetDefaultColor(Color.RED);
addlabel(ShowLabels, if R() < R().OB then "3rd Short Target = " + Round((thirdSTarget) / TickSize(),0)*TickSize() else "", Color.RED);
AddChartBubble(IsNaN(close) and !isNaN(close[1]),
               thirdSTarget,
              "3rd Short Target = " + Round((thirdSTarget) / TickSize(),0)*TickSize(),
               Color.RED,
               no);

def diffshorttarget3 = if close < thirdshorttarget then (thirdshorttarget - close) else (close - thirdshorttarget);
addLabel(ShowLabels, if R() < R().OB then "Diff 3rd S tgt = " + Round((diffshorttarget3) / TickSize(),0)*TickSize() else "", Color.LIGHT_RED);

#Inputs:
input nFE = 34;#hint nFE: length for Fractal Energy calculation.
input PriceColor = yes;
plot gamma1 = Log(Sum((Max(high, close[1]) - Min(low, close[1])), nFE) /
        (Highest(high, nFE) - Lowest(low, nFE))) / Log(nFE);
gamma1.AssignNormGradientColor(nFE, Color.GREEN, Color.RED);
gamma1.SetLineWeight(2);

addLabel(showlabels, if showlabels and gamma1 < 0.382 then "Trending =" + gamma1 else if gamma1 > 0.618 then "Non-Trending =" + gamma1 else "FE = " + gamma1, if gamma1 < 0.382 then Color.WHITE else if gamma1 > 0.618 then Color.CYAN else Color.GRAY);

AssignPriceColor(if PriceColor and gamma1
#crosses below
<
.382 then Color.WHITE else if PriceColor and  gamma1
#crosses above
>
.618 then Color.CYAN else Color.CURRENT);

#                                        End Code
 
Last edited:
Top