Angle Attack / Follow Line Lower

barbaros

Administrator
Staff member
Platform
  1. Thinkorswim
This is a companion indicator to Follow Line indicator converted by @bigboss and enhanced by @NPTechs here: https://b4indicators.com/threads/follow-line-indicator.143/

It is a lower indicator where it shows the long/short entries and opportunities to add/reduce (label text of Red is short for reduce) your position.

X7aq4uv.png


Code:
# Angle Attack / Follow Line for b4indicators.com
# Free for use. Header credits must be included when any form of the code included in this package is used.
# v1.0 - barbaros - converted for b4indicators.com

declare lower;

input BBperiod = 21;
input BBdeviations = 1.00;
input UseATRfilter = yes;
input ATRperiod = 5;

def BBUpper = SimpleMovingAvg(close, BBperiod) + stdev(close, BBperiod) * BBdeviations;
def BBLower = SimpleMovingAvg(close, BBperiod) - stdev(close, BBperiod) * BBdeviations;
def BBSignal = if close > BBUpper then 1 else if close < BBLower then -1 else 0;
def Range = ATR(ATRperiod);

def TrendLine = if BarNumber() == 1 then close
                else if BBSignal == 1 and UseATRfilter then
                    if low - Range < TrendLine[1] then TrendLine[1]
                    else low - Range
                else if BBSignal == -1 and UseATRfilter then
                    if high + Range > TrendLine[1] then TrendLine[1]
                    else high + Range
                else if BBSignal == 0 and UseATRfilter then
                    TrendLine[1]
                else if BBSignal == 1 and !UseATRfilter then
                    if low < TrendLine[1] then TrendLine[1]
                    else low
                else if BBSignal == -1 and !UseATRfilter then
                    if high > TrendLine[1] then TrendLine[1]
                    else high
                else if BBSignal == 0 and !UseATRfilter then
                    TrendLine[1]
                else TrendLine[1];

def iTrend = if BarNumber() == 1 then 0
             else if TrendLine > TrendLine[1] then 1
             else if TrendLine < TrendLine[1] then -1
             else iTrend[1];

### ANGLE FL

input i_lookback = 8;
input i_atrPeriod = 10;

def _angle_fl = (180 / 3.14159265359) * ATan((TrendLine - Trendline[i_lookback]) / ATR(i_atrPeriod));

### Buy/Sell

input Max_level_1 = 40;
input Max_level_2 = 65;
input Min_level_1 = -40;
input Min_level_2 = -65;

def buy_0 = iTrend[1] < 0 and iTrend > 0;
def sell_0 = iTrend[1] > 0 and iTrend < 0;

def add_buy_1 = _angle_fl [2] > 0 and _angle_fl [1] == 0 and _angle_fl == 0 and iTrend > 0;
def add_sell_1 = _angle_fl [2] < 0 and _angle_fl [1] == 0 and _angle_fl == 0 and iTrend < 0;
def add_buy_2 = _angle_fl [5] > 0 and _angle_fl [4] == 0 and _angle_fl[3] == 0 and _angle_fl[2] == 0 and _angle_fl[1] == 0 and _angle_fl == 0 and iTrend > 0;
def add_sell_2 = _angle_fl [5] < 0 and _angle_fl [4] == 0 and _angle_fl[3] == 0 and _angle_fl[2] == 0 and _angle_fl[1] == 0 and _angle_fl == 0 and iTrend < 0;
def add_buy_3 = _angle_fl [8] > 0 and _angle_fl [7] == 0 and _angle_fl[6] == 0 and _angle_fl[5] == 0 and _angle_fl[4] == 0 and _angle_fl[3] == 0 and _angle_fl[2] == 0 and _angle_fl[1] == 0 and _angle_fl == 0 and iTrend > 0;
def add_sell_3 = _angle_fl [8] < 0 and _angle_fl [7] == 0 and _angle_fl[6] == 0 and _angle_fl[5] == 0 and _angle_fl[4] == 0 and _angle_fl[3] == 0 and _angle_fl[2] == 0 and _angle_fl[1] == 0 and _angle_fl == 0 and iTrend < 0;

def redu_buy_1 = _angle_fl [1] < Max_level_1 and _angle_fl > Max_level_1;
def redu_buy_2 = _angle_fl [1] < Max_level_2 and _angle_fl > Max_level_2;
def redu_buy_3 = _angle_fl [2] < Max_level_2 and _angle_fl [1] > Max_level_2 and _angle_fl > Max_level_2;
def redu_buy_4 = _angle_fl [3] < Max_level_2 and _angle_fl [2] > Max_level_2 and _angle_fl [1] > Max_level_2 and _angle_fl > Max_level_2;
def redu_buy_5 = _angle_fl [4] < Max_level_2 and _angle_fl [3] > Max_level_2 and _angle_fl [2] > Max_level_2 and _angle_fl [1] > Max_level_2 and _angle_fl > Max_level_2;

def redu_sell_1 = _angle_fl [1] > Min_level_1 and _angle_fl < Min_level_1;
def redu_sell_2 = _angle_fl [1] > Min_level_2 and _angle_fl < Min_level_2;
def redu_sell_3 = _angle_fl [2] > Min_level_2 and _angle_fl [1] < Min_level_2 and _angle_fl < Min_level_2;
def redu_sell_4 = _angle_fl [3] > Min_level_2 and _angle_fl [2] < Min_level_2 and _angle_fl [1] < Min_level_2 and _angle_fl < Min_level_2;
def redu_sell_5 = _angle_fl [4] > Min_level_2 and _angle_fl [3] < Min_level_2 and _angle_fl [2] < Min_level_2 and _angle_fl [1] < Min_level_2 and _angle_fl < Min_level_2;

plot AngleLine = _angle_fl;
AngleLine.AssignValueColor(if iTrend > 0 then Color.GREEN else Color.RED);

AddCloud(0, if _angle_fl > 0 then AngleLine else Double.NaN, Color.GREEN, Color.GREEN);
AddCloud(0, if _angle_fl < 0 then AngleLine else Double.NaN, Color.RED, Color.RED);

plot H1 = Max_level_1;
plot H2 = Max_level_2;
plot L1 = Min_level_1;
plot L2 = Min_level_2;

AddChartBubble(buy_0, 0, "Buy", Color.GREEN, no);
AddChartBubble(add_buy_1, 0, "Add", Color.GREEN, no);
AddChartBubble(redu_buy_1 or redu_buy_2 or redu_buy_3, _angle_fl, "Red", Color.YELLOW, no);

AddChartBubble(sell_0, 0, "Sell", Color.RED, yes);
AddChartBubble(add_sell_1, 0, "Add", Color.RED, yes);
AddChartBubble(redu_sell_1 or redu_sell_2 or redu_sell_3, _angle_fl, "Red", Color.RED, yes);
 
Top