Help for internal function IsAscending/isDescending

pupu

Member
Hi guys,

I am wondering what is the actual code for internal function isAscending() and isDescending().

I am trying to create functions to use it, but without totally know the exact code used to create the function, I will not be able to predict how my study will behave.

Some of the thinkscript internal function's code are provided, for example: AccumDist:
https://tlc.thinkorswim.com/center/reference/thinkScript/Functions/Tech-Analysis/AccumDist

Code:
Example
script AccumDistTS {
    input high = high;
    input close = close;
    input low = low;
    input open = open;
    input volume = volume;
    plot AccumDistTS = TotalSum(if high - low > 0 then (close - open) / (high - low) * volume else 0);
}

But not for IsAscending()
https://tlc.thinkorswim.com/center/reference/thinkScript/Functions/Tech-Analysis/IsAscending

Thank you so much!
 
Solution
Hi guys,

I am wondering what is the actual code for internal function isAscending() and isDescending().

I am trying to create functions to use it, but without totally know the exact code used to create the function, I will not be able to predict how my study will behave.

Some of the thinkscript internal function's code are provided, for example: AccumDist:
https://tlc.thinkorswim.com/center/reference/thinkScript/Functions/Tech-Analysis/AccumDist

Code:
Example
script AccumDistTS {
    input high = high;
    input close = close;
    input low = low;
    input open = open;
    input volume = volume;
    plot AccumDistTS = TotalSum(if high - low > 0 then (close - open) / (high - low) * volume else 0);
}

But not for...
I've wondered this myself, and I generally avoid these functions for the same reason. I've written various scripts to paint bars in more detail and try to make heads or tails out of them. I am sure I've deleted these, but I can say I've never been satisfied with the results. Your best option would really be to just come up with your own method that you can trust.
 

Join useThinkScript to post your question to a community of 21,000+ developers and traders.

Hi guys,

I am wondering what is the actual code for internal function isAscending() and isDescending().

I am trying to create functions to use it, but without totally know the exact code used to create the function, I will not be able to predict how my study will behave.

Some of the thinkscript internal function's code are provided, for example: AccumDist:
https://tlc.thinkorswim.com/center/reference/thinkScript/Functions/Tech-Analysis/AccumDist

Code:
Example
script AccumDistTS {
    input high = high;
    input close = close;
    input low = low;
    input open = open;
    input volume = volume;
    plot AccumDistTS = TotalSum(if high - low > 0 then (close - open) / (high - low) * volume else 0);
}

But not for IsAscending()
https://tlc.thinkorswim.com/center/reference/thinkScript/Functions/Tech-Analysis/IsAscending

Thank you so much!

EDIT---------------- this visual example only calculates isascending on the last bar.
to be a true replacement for isascending, it needs to be changed so it calculates values on all bars

-----------------------------------

after reading the description of IsAscending several times, i believe this study mimics the built in function.
if finds the average slope of many lines, and determines if it is > 0 or < 0.

https://tlc.thinkorswim.com/center/reference/thinkScript/Functions/Tech-Analysis/IsAscending
Tests if the trend is ascending by calculating the average slope coefficient of trendlines whose start points are MidBodyVal for a specified number of bars and end points are value for current bar. If the slope is positive then the trend is considered ascending.


the first part of my study calculates 'isascending' for any quantity of bars entered.
the second part plots up to 5 lines to show what data is used. ( the last x bars on the chart)

when calculating the average slope of many lines, it is important to remember to use the price difference from one bar to the next, not from the end points.

Ruby:
# ascending_01a

# find the average slope , of len lines, that go to the last bar
#  identify a range of bars that are within len bars from the last bar
#  diff = last bar close - current midbody
#  slope = diff / (qty of bars current bar is away from last bar) ($ chg bar to bar)
#  add up the slopes and divide by len, to get an avg slope


# https://usethinkscript.com/threads/help-for-internal-function-isascending-isdescending.11609/#post-100660
#Help for internal function IsAscending/isDescending


# IsAscending
# Tests if the trend is ascending by calculating the average slope coefficient of trendlines whose start points are MidBodyVal for a specified number of bars and end points are value for current bar. If the slope is positive then the trend is considered ascending.


# calc avg slope , for all the bars that are within len bars from last bar

def bn = barnumber();
def na = double.nan;

input len = 5;
input price = close;
def mid = midbodyval();

def lastbn = highestall(if !isnan(close) then bn else 0);
def lastcls = highestall(if lastbn == bn then close else 0);

def first = ( !isnan(close[-len]) and isnan(close[-(len+1)]));
def firstbn = if first then bn else firstbn[1];

def last_off = lastbn - bn;

# range of bars,  len + last bar
def rng = (!isnan(close[0]) and isnan(close[-(len+1)]));

# range of 'len' bars before last bar
def rng_lines = ( !isnan(close[-1]) and isnan(close[-(len+1)]));

#--------------------------
# built in study
input show_builtin_function = yes;
def isas = isascending(price, len);
addlabel(show_builtin_function, " ", color.black);
#addlabel(show_builtin_function, "isascending , length: " + len, (if isas then color.green else color.red));
addlabel(show_builtin_function, "isascending function " + isas, (if isas then color.green else color.red));


#------------------
# find avg slope of  'len'  lines
def slope_total;
if bn == 1 then {
 slope_total = 0;
} else if bn == lastbn then {
 slope_total = fold i = 1 to (len+1)
 with p
 do p + ((lastcls - getvalue(mid, i))/i);
} else {
 slope_total = slope_total[1];
}

def slope_avg = slope_total/len;
def isslopeup = if slope_avg > 0 then 1 else 0;

input show_calc_function = yes;
addlabel(1, " ", color.black);
addlabel(1, "calc isascending " + isslopeup, ( if isslopeup then color.green else color.red));

input show_compare_label = yes;
addlabel(show_compare_label, " ", color.black);
# compare
addlabel(show_compare_label, (if (isas == isslopeup) then "same" else "different"), (if (isas == isslopeup) then color.cyan else color.yellow));


#----------------------------
# plot up to 5 lines

def b01 = if len >= 1 and (!isnan(close[-1]) and isnan(close[-(1+1)])) then 1 else 0;
def b02 = if len >= 2 and (!isnan(close[-2]) and isnan(close[-(2+1)])) then 1 else 0;
def b03 = if len >= 3 and (!isnan(close[-3]) and isnan(close[-(3+1)])) then 1 else 0;
def b04 = if len >= 4 and (!isnan(close[-4]) and isnan(close[-(4+1)])) then 1 else 0;
def b05 = if len >= 5 and (!isnan(close[-5]) and isnan(close[-(5+1)])) then 1 else 0;

def mid01 = if (bn == 1 or len < 1) then na else if b01 then mid else mid01[1];
def mid02 = if (bn == 1 or len < 2) then na else if b02 then mid else mid02[1];
def mid03 = if (bn == 1 or len < 3) then na else if b03 then mid else mid03[1];
def mid04 = if (bn == 1 or len < 4) then na else if b04 then mid else mid04[1];
def mid05 = if (bn == 1 or len < 5) then na else if b05 then mid else mid05[1];

def slope01 = (lastcls - mid01)/1;
def slope02 = (lastcls - mid02)/2;
def slope03 = (lastcls - mid03)/3;
def slope04 = (lastcls - mid04)/4;
def slope05 = (lastcls - mid05)/5;


def line01 = if b01 then mid01
 else if rng then line01[1] + slope01
 else na;

def line02 = if b02 then mid02
 else if rng then line02[1] + slope02
 else na;

def line03 = if b03 then mid03
 else if rng then line03[1] + slope03
 else na;

def line04 = if b04 then mid04
 else if rng then line04[1] + slope04
 else na;

def line05 = if b05 then mid05
 else if rng then line05[1] + slope05
 else na;

plot z1 = line01;
plot z2 = line02;
plot z3 = line03;
plot z4 = line04;
plot z5 = line05;
z1.setdefaultcolor(color.cyan);
z2.setdefaultcolor(color.cyan);
z3.setdefaultcolor(color.cyan);
z4.setdefaultcolor(color.cyan);
z5.setdefaultcolor(color.cyan);

# identify bars within the range
plot q = if rng_lines then high*1.01 else na;
q.SetPaintingStrategy(PaintingStrategy.SQUARES);
q.SetDefaultColor(Color.cyan);
q.setlineweight(3);
q.hidebubble();

# bar offset numbers, from last bar
plot n = if rng_lines then last_off else na;
n.SetPaintingStrategy(PaintingStrategy.VALUES_below);
n.SetDefaultColor(Color.cyan);
n.setlineweight(3);
n.hidebubble();
#


CMCSA DAY len = 5
Y54sarC.jpg
 
Last edited:
Solution
Super awesome! Thank you @halcyonguy

I have put the code into application - The Mobius Volume Wave, which uses build-in IsAscending / IsDescending functions.

However the results seems not good, and I have totally no idea why the volume wave looked so different (even both the IsAscendingTS / IsDescendingTS works just like the buildin function as I have done some tests against some random stocks).
 
Last edited by a moderator:
@rc76

I have updated the code, but it seems the result still not the same. (Lower indicator's bottom one is the updated version. first bottom one is the correct output).

00.png


Code:
# -------------------------------------------------

# Mobius Volume Wave
# V01.2020
# Plots Volume Waves based on trend.

# -------------------------------------------------

declare lower;

input n = 6;

DefineGlobalColor("LabelGreen",  CreateColor(0, 165, 0)) ;

# -------------------------------------------------

script IsAscendingTS {
    input price = close;
    input n = 5;

    def BN = BarNumber();
    def NA = Double.NaN;

    def mid = MidBodyVal();
    # MidBodyVal():
    # - Returns the price corresponding to the middle of the candelstick body.
    #   This price can be calculated as (open + close)/2.

    def lastBN    = HighestAll(if !IsNaN(close) then BN else 0);
    def lastClose = HighestAll(if lastBN == BN then close else 0);

    def first = ( !IsNaN(close[-n]) and IsNaN(close[ -(n+1) ]) );
    def firstBN = if first then BN else firstBN[1];

    def last_off = lastBN - BN;

    # range of bars,  n + last bar
    def rng = (!IsNaN(close[0]) and IsNaN(close[ -(n+1) ]));

    # range of 'n' bars before last bar
    def rng_lines = ( !IsNaN(close[-1]) and IsNaN(close[ -(n+1) ]));

    # -------------------------------------------------
    # find avg slope of  'n'  lines

    def slope_total;

    if BN == 1 then
    {
      slope_total = 0;
    }
    else
    {
      slope_total =
        fold i = 1 to (n + 1)
        with p
        do p + ( (lastClose - getvalue(mid, i)) / i );
    }
    # else if BN == lastBN then
    # {
    #   slope_total =
    #     fold i = 1 to (n + 1)
    #     with p
    #     do p + ( (lastClose - getvalue(mid, i)) / i );
    # }
    # else
    # {
    #   slope_total = slope_total[1];
    # }

    def slope_avg = slope_total/n;

    # -------------------------------------------------
    # output

    plot IsSlopeUp = if slope_avg > 0 then 1 else 0;
}

script IsDescendingTS {
    input price = close;
    input n = 5;

    def BN = BarNumber();
    def NA = Double.NaN;

    def mid = MidBodyVal();
    # MidBodyVal():
    # - Returns the price corresponding to the middle of the candelstick body.
    #   This price can be calculated as (open + close)/2.

    def lastBN    = HighestAll(if !IsNaN(close) then BN else 0);
    def lastClose = HighestAll(if lastBN == BN then close else 0);

    def first = ( !IsNaN(close[-n]) and IsNaN(close[ -(n+1) ]) );
    def firstBN = if first then BN else firstBN[1];

    def last_off = lastBN - BN;

    # range of bars,  n + last bar
    def rng = (!IsNaN(close[0]) and IsNaN(close[ -(n+1) ]));

    # range of 'n' bars before last bar
    def rng_lines = ( !IsNaN(close[-1]) and IsNaN(close[ -(n+1) ]));

    # -------------------------------------------------
    # find avg slope of  'n'  lines

    def slope_total;

    if BN == 1 then
    {
      slope_total = 0;
    }
    else
    {
      slope_total =
        fold i = 1 to (n + 1)
        with p
        do p + ( (lastClose - getvalue(mid, i)) / i );
    }
    # else if BN == lastBN then
    # {
    #   slope_total =
    #     fold i = 1 to (n + 1)
    #     with p
    #     do p + ( (lastClose - getvalue(mid, i)) / i );
    # }
    # else
    # {
    #   slope_total = slope_total[1];
    # }

    def slope_avg = slope_total/n;

    # -------------------------------------------------
    # output

    plot IsSlopeUp = if slope_avg < 0 then 1 else 0;
}

# -------------------------------------------------

def accumulation = isAscendingTS(HL2, n);
def distribution = isDescendingTS(HL2, n);

# -------------------------------------------------

# HL2:
# - Used with Fundamental function to return the arithmetical mean
#   of High and Low prices.

def v = volume;

def w = if accumulation and !accumulation[1]
        then v
        else if distribution and !distribution[1]
        then v
        else w[1] + v;
plot waves = w;
     waves.SetPaintingStrategy(PaintingStrategy.Histogram);
     waves.AssignValueColor(if accumulation
                            then GlobalColor("LabelGreen")
                            else if distribution
                            then color.red
                            else color.yellow);
# End Code Mobius Volume Waves

# -------------------------------------------------
[/QUOTE]

it might work if ,
lastclose is replaced with close

slope_total =
fold i = 1 to (n + 1)
with p
do p + ( (lastClose - getvalue(mid, i)) / i );
}
 
Last edited by a moderator:
@halcyonguy Just tried updating lastClose->Close

The results have improved alot! But still a little bit different.

00.png


Code:
# -------------------------------------------------

# Mobius Volume Wave
# V01.2020
# Plots Volume Waves based on trend.

# -------------------------------------------------

declare lower;

input n = 6;

DefineGlobalColor("LabelGreen",  CreateColor(0, 165, 0)) ;

# -------------------------------------------------

script IsAscendingTS {
    input price = close;
    input n = 5;

    def BN = BarNumber();
    def NA = Double.NaN;

    def mid = MidBodyVal();
    # MidBodyVal():
    # - Returns the price corresponding to the middle of the candelstick body.
    #   This price can be calculated as (open + close)/2.

    def lastBN    = HighestAll(if !IsNaN(close) then BN else 0);
    def lastClose = HighestAll(if lastBN == BN then close else 0);

    def first = ( !IsNaN(close[-n]) and IsNaN(close[ -(n+1) ]) );
    def firstBN = if first then BN else firstBN[1];

    def last_off = lastBN - BN;

    # range of bars,  n + last bar
    def rng = (!IsNaN(close[0]) and IsNaN(close[ -(n+1) ]));

    # range of 'n' bars before last bar
    def rng_lines = ( !IsNaN(close[-1]) and IsNaN(close[ -(n+1) ]));

    # -------------------------------------------------
    # find avg slope of  'n'  lines

    def slope_total;

    if BN == 1 then
    {
      slope_total = 0;
    }
    else
    {
      slope_total =
        fold i = 1 to (n + 1)
        with p
        # do p + ( (lastClose - getvalue(mid, i)) / i );
        do p + ( (close - getvalue(mid, i)) / i );
    }
    # else if BN == lastBN then
    # {
    #   slope_total =
    #     fold i = 1 to (n + 1)
    #     with p
    #     do p + ( (lastClose - getvalue(mid, i)) / i );
    # }
    # else
    # {
    #   slope_total = slope_total[1];
    # }

    def slope_avg = slope_total/n;

    # -------------------------------------------------
    # output

    plot IsSlopeUp = if slope_avg > 0 then 1 else 0;
}

script IsDescendingTS {
    input price = close;
    input n = 5;

    def BN = BarNumber();
    def NA = Double.NaN;

    def mid = MidBodyVal();
    # MidBodyVal():
    # - Returns the price corresponding to the middle of the candelstick body.
    #   This price can be calculated as (open + close)/2.

    def lastBN    = HighestAll(if !IsNaN(close) then BN else 0);
    def lastClose = HighestAll(if lastBN == BN then close else 0);

    def first = ( !IsNaN(close[-n]) and IsNaN(close[ -(n+1) ]) );
    def firstBN = if first then BN else firstBN[1];

    def last_off = lastBN - BN;

    # range of bars,  n + last bar
    def rng = (!IsNaN(close[0]) and IsNaN(close[ -(n+1) ]));

    # range of 'n' bars before last bar
    def rng_lines = ( !IsNaN(close[-1]) and IsNaN(close[ -(n+1) ]));

    # -------------------------------------------------
    # find avg slope of  'n'  lines

    def slope_total;

    if BN == 1 then
    {
      slope_total = 0;
    }
    else
    {
      slope_total =
        fold i = 1 to (n + 1)
        with p
        # do p + ( (lastClose - getvalue(mid, i)) / i );
        do p + ( (close - getvalue(mid, i)) / i );
    }
    # else if BN == lastBN then
    # {
    #   slope_total =
    #     fold i = 1 to (n + 1)
    #     with p
    #     do p + ( (lastClose - getvalue(mid, i)) / i );
    # }
    # else
    # {
    #   slope_total = slope_total[1];
    # }

    def slope_avg = slope_total/n;

    # -------------------------------------------------
    # output

    plot IsSlopeUp = if slope_avg < 0 then 1 else 0;
}

# -------------------------------------------------

def accumulation = isAscendingTS(HL2, n);
def distribution = isDescendingTS(HL2, n);

# -------------------------------------------------

# HL2:
# - Used with Fundamental function to return the arithmetical mean
#   of High and Low prices.

def v = volume;

def w = if accumulation and !accumulation[1]
        then v
        else if distribution and !distribution[1]
        then v
        else w[1] + v;
plot waves = w;
     waves.SetPaintingStrategy(PaintingStrategy.Histogram);
     waves.AssignValueColor(if accumulation
                            then GlobalColor("LabelGreen")
                            else if distribution
                            then color.red
                            else color.yellow);
# End Code Mobius Volume Waves

# -------------------------------------------------
 
that piece of fix code still had lastclose, which was throwing off the values.

--------------------

thanks for trying out my code and helping me realize it needed to be updated.
my original code only calculated isascending on the last bar.

this version calculates an isascending value for each bar, except the first n bars.
in this version of Mobius Volume Wave, the histogram matches the built in isascending() data.

default length is set to 6. (quantity of previous bars to look at)

Ruby:
# vol_wave_mobius_mod_isascend_0b

# https://usethinkscript.com/threads/help-for-internal-function-isascending-isdescending.11609/#post-101870
# -------------------------------------------------
# Mobius Volume Wave
# V01.2020
# Plots Volume Waves based on trend.
# modified my halcyonguy, replace isascending with formula

declare lower;

def bn = BarNumber();
def na = Double.NaN;

input n = 6;
input price = close;
def mid = MidBodyVal();

DefineGlobalColor("LabelGreen",  CreateColor(0, 165, 0)) ;

# mimic isascending() function  
# find avg slope of  'n'  lines
# check if slope is + or -
def slope_total;
  if bn == 1 or bn < n then {
    slope_total = 0;
  } else {
    slope_total =
    fold i = 1 to (n + 1)
    with p
    do p + ( (Close - getvalue(mid, i)) / i );
  }

def slope_avg = slope_total/n;
def IsSlopeUp = if slope_avg > 0 then 1 else 0;
def IsSlopedwn = if slope_avg < 0 then 1 else 0;
def accumulation = IsSlopeup;
def distribution = IsSlopedwn;

def v = volume;
def w = if accumulation and !accumulation[1]
        then v
        else if distribution and !distribution[1]
        then v
        else w[1] + v;
plot waves = w;
     waves.SetPaintingStrategy(PaintingStrategy.Histogram);
     waves.AssignValueColor(if accumulation
                            then GlobalColor("LabelGreen")
                            else if distribution
                            then color.red
                            else color.yellow);

# -------------------------------------------------

addchartbubble(0, 0,
slope_avg + "\n" +
slope_total + "\n" +
IsSlopeUp + " up\n" +
IsSlopedwn + " dwn"
, (if IsSlopeUp then color.green else if IsSlopedwn then color.red else color.gray), no);
#


--------------------------------------

this is a test study, to display isascending() values on each bar, for comparing to the other study.
the default length is set to 6

Code:
# isascend_test

input len = 6;
input price = close;
input show_builtin_function = yes;
def isas = isascending(price, len);

#addlabel(show_builtin_function, " ", color.black);
#addlabel(show_builtin_function, "isascending function " + isas, (if isas then color.green else color.red));

addchartbubble(1, low, isas, (if isas then color.green else color.red), no);
#
 
Thank you so much @halcyonguy for your kind help!

I have put the studies together for visual comparison. It seems it still a little bit different, but it should be okay?

PS: I have added a little labels to easier distinguish the versions used as well as its parameters.

00.png


Top-Chart Study:
- I plotted the isascend_test for referencing, if it helps.

Btm-01: Mobius original VolWave.

Code:
# -------------------------------------------------

# Mobius Volume Wave
# V01.2020
# Plots Volume Waves based on trend.

# -------------------------------------------------

declare lower;

input n = 6;

# -------------------------------------------------

def accumulation = isAscending(HL2, n);
def distribution = isDescending(HL2, n);

# -------------------------------------------------

# HL2:
# - Used with Fundamental function to return the arithmetical mean
#   of High and Low prices.

DefineGlobalColor("LabelGreen",  CreateColor(0, 165, 0)) ;

def v = volume;

def w = if accumulation and !accumulation[1]
        then v
        else if distribution and !distribution[1]
        then v
        else w[1] + v;
plot waves = w;
     waves.SetPaintingStrategy(PaintingStrategy.Histogram);
     waves.AssignValueColor(if accumulation
                            then GlobalColor("LabelGreen")
                            else if distribution
                            then color.red
                            else color.yellow);
# End Code Mobius Volume Waves

# -------------------------------------------------

AddLabel(1, "TOS Default ", Color.CYAN);
AddLabel(1, "n = " + n, Color.CYAN);

# -------------------------------------------------

Btm-02: New code.

Code:
# vol_wave_mobius_mod_isascend_0b

# https://usethinkscript.com/threads/help-for-internal-function-isascending-isdescending.11609/#post-101870
# -------------------------------------------------
# Mobius Volume Wave
# V01.2020
# Plots Volume Waves based on trend.
# modified my halcyonguy, replace isascending with formula

declare lower;

def bn = BarNumber();
def na = Double.NaN;

input n = 6;
input price = close;
def mid = MidBodyVal();

# mimic isascending() function
# find avg slope of  'n'  lines
# check if slope is + or -
def slope_total;
  if bn == 1 or bn < n then {
    slope_total = 0;
  } else {
    slope_total =
    fold i = 1 to (n + 1)
    with p
    do p + ( (Close - getvalue(mid, i)) / i );
  }

def slope_avg = slope_total/n;
def IsSlopeUp = if slope_avg > 0 then 1 else 0;
def IsSlopedwn = if slope_avg < 0 then 1 else 0;
def accumulation = IsSlopeup;
def distribution = IsSlopedwn;

# -------------------------------------------------
# Mobius' original vol-wave segment:

DefineGlobalColor("LabelGreen",  CreateColor(0, 165, 0)) ;
def v = volume;
def w = if accumulation and !accumulation[1]
        then v
        else if distribution and !distribution[1]
        then v
        else w[1] + v;
plot waves = w;
     waves.SetPaintingStrategy(PaintingStrategy.Histogram);
     waves.AssignValueColor(if accumulation
                            then GlobalColor("LabelGreen")
                            else if distribution
                            then color.red
                            else color.yellow);

# -------------------------------------------------

addchartbubble(0, 0,
slope_avg + "\n" +
slope_total + "\n" +
IsSlopeUp + " up\n" +
IsSlopedwn + " dwn"
, (if IsSlopeUp then color.green else if IsSlopedwn then color.red else color.gray), no);

# -------------------------------------------------

AddLabel(1, "vol_wave_mobius_mod_isascend_0b ", Color.CYAN);
AddLabel(1, "n = " + n, Color.CYAN);

# -------------------------------------------------
 

Similar threads

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

87k+ Posts
316 Online
Create Post

Similar threads

Similar threads

The Market Trading Game Changer

Join 2,500+ subscribers inside the useThinkScript VIP Membership Club
  • Exclusive indicators
  • Proven strategies & setups
  • Private Discord community
  • ‘Buy The Dip’ signal alerts
  • Exclusive members-only content
  • Add-ons and resources
  • 1 full year of unlimited support

Frequently Asked Questions

What is useThinkScript?

useThinkScript is the #1 community of stock market investors using indicators and other tools to power their trading strategies. Traders of all skill levels use our forums to learn about scripting and indicators, help each other, and discover new ways to gain an edge in the markets.

How do I get started?

We get it. Our forum can be intimidating, if not overwhelming. With thousands of topics, tens of thousands of posts, our community has created an incredibly deep knowledge base for stock traders. No one can ever exhaust every resource provided on our site.

If you are new, or just looking for guidance, here are some helpful links to get you started.

What are the benefits of VIP Membership?
VIP members get exclusive access to these proven and tested premium indicators: Buy the Dip, Advanced Market Moves 2.0, Take Profit, and Volatility Trading Range. In addition, VIP members get access to over 50 VIP-only custom indicators, add-ons, and strategies, private VIP-only forums, private Discord channel to discuss trades and strategies in real-time, customer support, trade alerts, and much more. Learn all about VIP membership here.
How can I access the premium indicators?
To access the premium indicators, which are plug and play ready, sign up for VIP membership here.
Back
Top