Extend vwap bands from prior time period

chechen

New member
Plus
Hello everyone,

I've searched extensively, but I haven't come across a suitable solution for this yet. I'm in search of a straightforward study that can extend a horizontal line representing +/- 1 standard deviation from the VWAP of a specific time period. Ideally, I would prefer the ability to adjust the aggregation period on the client side as well.

Does any one know if this is possible?

Thanks!
 
Solution
Perfect! You rocked this @SleepyZ, works perfectly now man, thanks so much.

Also, one small add, would it be possible to include quarterly and yearly timeframe aggregations?

Thanks!

The quarterly and year have been added.
Added ability to hide the plot of the basic vwap so that only the extensions will show.
The image has studies for all of the timeframes. As there are not enough days (180) set for the chart timeframe, the yearly lines do not appear.

Screenshot 2023-11-30 161910.png

Code:
#
# TD Ameritrade IP Company, Inc. (c) 2011-2023
# Prior Lookback Timeframe lines extended to Next Timeframe

input lookback      = 1;
input showtodayonly = yes;
input hide_vwap     = yes;

input numDevDn = -1.0;
input numDevUp = 1.0;
input timeFrame =...
Hello everyone,

I've searched extensively, but I haven't come across a suitable solution for this yet. I'm in search of a straightforward study that can extend a horizontal line representing +/- 1 standard deviation from the VWAP of a specific time period. Ideally, I would prefer the ability to adjust the aggregation period on the client side as well.

Does any one know if this is possible?

Thanks!

This will extend the plot of the lines (full, limited curve and full curve), allow multiple timeframe inputs, bubbles, and clouds.

The image includes a standard vwap set at the same timeframe for comparison

Screenshot 2023-11-29 144812.png
Code:
input timeFrame = {MINUTE, MIN2, MIN3, MIN5, MIN10, MIN15, MIN20, MIN30, MIN45, HOUR, TWOHOUR, FOURHOUR, default DAY, WEEK, MONTH, CHART};
input num1stDevUp = 1.0;
def num1stDevDn   = -num1stDevUp;
input multiplier  = 1;#Hint multiplier: Change to +/- number of "Days", "Weeks", etc
input lines       = {limited_curve, default limited_horizontal, full_curve};

def cap = GetAggregationPeriod();
def errorInAggregation =
    timeFrame == timeFrame.DAY and cap >= AggregationPeriod.WEEK or
    timeFrame == timeFrame.WEEK and cap >= AggregationPeriod.MONTH;
Assert(!errorInAggregation, "vwap timeFrame should be not less than current chart aggregation period");

def yyyyMmDd = GetYYYYMMDD();
def periodIndx;
def seconds = SecondsFromTime(0);
def day_number = DaysFromDate(First(yyyyMmDd)) + GetDayOfWeek(First(yyyyMmDd));
switch (timeFrame) {
case MINUTE:
    periodIndx = Floor(seconds / 60 + day_number * 24 * 60);
case MIN2:
    periodIndx = Floor(seconds / 120 + day_number * 24);
case MIN3:
    periodIndx = Floor(seconds / 180 + day_number * 24);
case MIN5:
    periodIndx = Floor(seconds / 300 + day_number * 24);
case MIN10:
    periodIndx = Floor(seconds / 600 + day_number * 24);
case MIN15:
    periodIndx = Floor(seconds / 900 + day_number * 24);
case MIN20:
    periodIndx = Floor(seconds / 1200 + day_number * 24);
case MIN30:
    periodIndx = Floor(seconds / 1800 + day_number * 24);
case MIN45:
    periodIndx = Floor(seconds / 2700 + day_number * 24);
case HOUR:
    periodIndx = Floor(seconds / 3600 + day_number * 24);
case TWOHOUR:
    periodIndx = Floor(seconds / 7200 + day_number * 24);
case FOURHOUR:
    periodIndx = Floor(seconds / 14400 + day_number * 24);
case DAY:
    periodIndx = CountTradingDays(Min(First(yyyyMmDd), yyyyMmDd), yyyyMmDd) - 1;
case WEEK:
    periodIndx = Floor((DaysFromDate(First(yyyyMmDd)) + GetDayOfWeek(First(yyyyMmDd))) / 7);
case MONTH:
    periodIndx = RoundDown(yyyyMmDd / 100, 0);
case CHART:
    periodIndx = 0;
}
def countindx = CompoundValue(1, if periodIndx != periodIndx[1] then (countindx[1] + periodIndx - periodIndx[1]) % multiplier else countindx[1], 0);
def isPeriodRolled = countindx < countindx[1] + periodIndx - periodIndx[1];
#def isPeriodRolled = CompoundValue(1, periodIndx != periodIndx[1], yes);

input num_vwap_displayed = 1;
def Count = num_vwap_displayed;
def cond = if isPeriodRolled
           then 1
           else Double.NaN;
def dataCount = CompoundValue(1, if !IsNaN(cond)
                                 then dataCount[1] + 1
                                 else dataCount[1], 0);

rec volumeSum;
rec volumeVwapSum;
rec volumeVwap2Sum;

if (isPeriodRolled) {
    volumeSum = volume;
    volumeVwapSum = volume * vwap;
    volumeVwap2Sum = volume * Sqr(vwap);
} else {
    volumeSum = CompoundValue(1, volumeSum[1] + volume, volume);
    volumeVwapSum = CompoundValue(1, volumeVwapSum[1] + volume * vwap, volume * vwap);
    volumeVwap2Sum = CompoundValue(1, volumeVwap2Sum[1] + volume * Sqr(vwap), volume * Sqr(vwap));
}
def price = volumeVwapSum / volumeSum;
def deviation = Sqrt(Max(volumeVwap2Sum / volumeSum - Sqr(price), 0));

rec v  = if IsNaN(vwap) then v[1] else price;
rec v1 = if IsNaN(vwap) then v1[1] else price + num1stDevUp * deviation;
rec v2 = if IsNaN(vwap) then v2[1] else price - num1stDevUp * deviation;

plot VWAP;
plot FirstUpperBand;
plot FirstLowerBand;

input showlineinchartlength = 31;
input showlines = yes;
if (!errorInAggregation) and
    lines == lines.limited_curve {
    VWAP =  if IsNaN(close[-showlineinchartlength]) and
                              HighestAll(dataCount) - dataCount <= Count - 1
                      then v
                      else Double.NaN ;
    FirstUpperBand  = if IsNaN(close[-showlineinchartlength]) and
                         HighestAll(dataCount) - dataCount <= Count - 1
                      then v1
                      else Double.NaN ;
    FirstLowerBand  = if IsNaN(close[-showlineinchartlength]) and
                         HighestAll(dataCount) - dataCount <= Count - 1
                      then v2
                      else Double.NaN ;

} else if (!errorInAggregation) and
           lines == lines.full_curve {
    VWAP =            v;
    FirstUpperBand  = v1;
    FirstLowerBand  = v2;

} else if (!errorInAggregation) and
           lines == lines.limited_horizontal and IsNaN(close[-showlineinchartlength]) {
    VWAP = HighestAll(if IsNaN(close) then v else Double.NaN );
    FirstUpperBand  = HighestAll(if IsNaN(close) then v1 else Double.NaN );
    FirstLowerBand  = HighestAll(if IsNaN(close) then v2 else Double.NaN );

} else {
    VWAP = Double.NaN;
    FirstUpperBand  = Double.NaN;
    FirstLowerBand  = Double.NaN;
}

VWAP.SetDefaultColor(Color.magenta);
FirstUpperBand.SetDefaultColor(Color.cyan);
FirstLowerBand.SetDefaultColor(Color.cyan);

VWAP.SetPaintingStrategy(PaintingStrategy.LINE);
FirstUpperBand.SetStyle(Curve.SHORT_DASH);
FirstLowerBand.SetStyle(Curve.SHORT_DASH);

VWAP.SetLineWeight(2);
FirstUpperBand.SetLineWeight(1);
FirstLowerBand.SetLineWeight(1);

VWAP.HideBubble();
FirstUpperBand.HideBubble();
FirstLowerBand.HideBubble();

FirstUpperBand.sethiding(!showlines);
FirstLowerBand.sethiding(!showlines);

input showbubblesLine = yes;
input showbubblesVSTD = yes;
input bubblemoverVWAP_Labels = 15;#Hint bubblemoverVWAP_Labels: Number of Spaces bubble offset in expansion area
def n = bubblemoverVWAP_Labels;
def n1 = n + 1;

AddChartBubble(showbubblesLine and IsNaN(close[n]) and !IsNaN(close[n1]) ,
               price[n1] ,
              "V:" + Round(price[n1] , 2),
               Color.ORANGE);
AddChartBubble(showbubblesLine and IsNaN(close[n]) and !IsNaN(close[n1]) ,
               price[n1] + num1stDevUp * deviation[n1] ,
              "V1:" + Round((price[n1] + num1stDevUp * deviation[n1]), 2),
               Color.GREEN);
AddChartBubble(showbubblesLine and IsNaN(close[n]) and !IsNaN(close[n1]) ,
               price[n1] + num1stDevDn * deviation[n1] ,
              "V1:" + Round(price[n1] + num1stDevDn * deviation[n1], 2),
               Color.RED);

input showclouds = yes;
def green = if close > VWAP
            then 1
            else if green[1] == 1 and high >= VWAP
            then 1
            else 0;
def g = green;

AddCloud(if showclouds and g
         then FirstUpperBand
         else Double.NaN,
         VWAP,
         Color.Light_green, Color.Light_green);

AddCloud(if showclouds and g
         then FirstUpperBand
         else Double.NaN,
         VWAP,
         Color.Light_green, Color.Light_green);
AddCloud(if showclouds and !g
         then VWAP
         else Double.NaN,
         FirstLowerBand,
         Color.PINK, Color.PINK);
 

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

This will extend the plot of the lines (full, limited curve and full curve), allow multiple timeframe inputs, bubbles, and clouds.

The image includes a standard vwap set at the same timeframe for comparison

Appreciate the work here @SleepyZ, however, this seems to just extend lines from the current period's vwap and standard deviations. I would like to be able to extend the lines from the previous period if possible.

Thanks!
 
Appreciate the work here @SleepyZ, however, this seems to just extend lines from the current period's vwap and standard deviations. I would like to be able to extend the lines from the previous period if possible.

Thanks!

This should do that. The image is set to optionally only display the extension from the last previous day's lines onto today.

Screenshot 2023-11-30 064204.png
Code:
#
# TD Ameritrade IP Company, Inc. (c) 2011-2023
# Yesterday's lines extended to next day

input numDevDn = -1.0;
input numDevUp = 1.0;
input timeFrame = {default DAY, WEEK, MONTH};

def cap = getAggregationPeriod();
def errorInAggregation =
    timeFrame == timeFrame.DAY and cap >= AggregationPeriod.WEEK or
    timeFrame == timeFrame.WEEK and cap >= AggregationPeriod.MONTH;
assert(!errorInAggregation, "timeFrame should be not less than current chart aggregation period");

def yyyyMmDd = getYyyyMmDd();
def periodIndx;
switch (timeFrame) {
case DAY:
    periodIndx = yyyyMmDd;
case WEEK:
    periodIndx = Floor((daysFromDate(first(yyyyMmDd)) + getDayOfWeek(first(yyyyMmDd))) / 7);
case MONTH:
    periodIndx = roundDown(yyyyMmDd / 100, 0);
}
def isPeriodRolled = compoundValue(1, periodIndx != periodIndx[1], yes);

def volumeSum;
def volumeVwapSum;
def volumeVwap2Sum;

if (isPeriodRolled) {
    volumeSum = volume;
    volumeVwapSum = volume * vwap;
    volumeVwap2Sum = volume * Sqr(vwap);
} else {
    volumeSum = compoundValue(1, volumeSum[1] + volume, volume);
    volumeVwapSum = compoundValue(1, volumeVwapSum[1] + volume * vwap, volume * vwap);
    volumeVwap2Sum = compoundValue(1, volumeVwap2Sum[1] + volume * Sqr(vwap), volume * Sqr(vwap));
}
def price = volumeVwapSum / volumeSum;
def deviation = Sqrt(Max(volumeVwap2Sum / volumeSum - Sqr(price), 0));

plot VWAP = price;
plot UpperBand = price + numDevUp * deviation;
plot LowerBand = price + numDevDn * deviation;

VWAP.setDefaultColor(getColor(0));
UpperBand.setDefaultColor(getColor(2));
LowerBand.setDefaultColor(getColor(4));

input showtodayonly = yes;

def yesterday =  getyyyYMMDD()!=getyyyYMMDD()[1];
def vw1 = if showtodayonly and getday()!=getlastday() then double.nan else if yesterday then vwap[1] else vw1[1];
plot vwap1 = vw1;
def ub1 = if showtodayonly and getday()!=getlastday() then double.nan else if yesterday then upperband[1] else ub1[1];
plot upperband1 = ub1;
def lb1 = if showtodayonly and getday()!=getlastday() then double.nan else if yesterday then lowerband[1] else lb1[1];
plot lowerband1 = lb1;
 
This should do that. The image is set to optionally only display the extension from the last previous day's lines onto today.

Hey @SleepyZ,

Thanks for this, super close. It nearly aligns with the requirements, but doesn't behave as anticipated. When choosing timeframes other than "day," the projections are inaccurate.

For instance, if we opt for "week" or "month," the standard deviations should project forward and extend from the close of the selected period. E.g., the when the week finishes, last weeks projections extend froward onto this week (same w/ month when selected). Currently, when these are selected, the standard deviations are being projected from the prior days session.

Any idea how to resolve this?

Thanks!
 
Hey @SleepyZ,

Thanks for this, super close. It nearly aligns with the requirements, but doesn't behave as anticipated. When choosing timeframes other than "day," the projections are inaccurate.

For instance, if we opt for "week" or "month," the standard deviations should project forward and extend from the close of the selected period. E.g., the when the week finishes, last weeks projections extend froward onto this week (same w/ month when selected). Currently, when these are selected, the standard deviations are being projected from the prior days session.

Any idea how to resolve this?

Thanks!

This should now do what you want. You can now also enter the lookback to find a prior timeframe to use.
Make sure your chart timeframe has enough days to cover the timeframe selected.


Screenshot 2023-11-30 105736.png
Code:
#
# TD Ameritrade IP Company, Inc. (c) 2011-2023
# Prior Lookback Timeframe lines extended to Next Timeframe

input lookback      = 1;
input showtodayonly = yes;

input numDevDn = -1.0;
input numDevUp = 1.0;
input timeFrame = {default DAY, WEEK, MONTH};

def cap = getAggregationPeriod();
def errorInAggregation =
    timeFrame == timeFrame.DAY and cap >= AggregationPeriod.WEEK or
    timeFrame == timeFrame.WEEK and cap >= AggregationPeriod.MONTH;
assert(!errorInAggregation, "timeFrame should be not less than current chart aggregation period");

def yyyyMmDd = getYyyyMmDd();
def periodIndx;
switch (timeFrame) {
case DAY:
    periodIndx = yyyyMmDd;
case WEEK:
    periodIndx = Floor((daysFromDate(first(yyyyMmDd)) + getDayOfWeek(first(yyyyMmDd))) / 7);
case MONTH:
    periodIndx = roundDown(yyyyMmDd / 100, 0);
}
def isPeriodRolled = compoundValue(1, periodIndx != periodIndx[1], yes);

def volumeSum;
def volumeVwapSum;
def volumeVwap2Sum;

if (isPeriodRolled) {
    volumeSum = volume;
    volumeVwapSum = volume * vwap;
    volumeVwap2Sum = volume * Sqr(vwap);
} else {
    volumeSum = compoundValue(1, volumeSum[1] + volume, volume);
    volumeVwapSum = compoundValue(1, volumeVwapSum[1] + volume * vwap, volume * vwap);
    volumeVwap2Sum = compoundValue(1, volumeVwap2Sum[1] + volume * Sqr(vwap), volume * Sqr(vwap));
}
def price = if isnan(close) then price[1] else volumeVwapSum / volumeSum;
def deviation = Sqrt(Max(volumeVwap2Sum / volumeSum - Sqr(price), 0));

plot VWAP = price;
plot UpperBand = price + numDevUp * deviation;
plot LowerBand = price + numDevDn * deviation;

VWAP.setDefaultColor(getColor(0));
UpperBand.setDefaultColor(getColor(2));
LowerBand.setDefaultColor(getColor(4));


def count = if periodIndx != periodIndx[1] and !isnan(close) then count[1] +1 else count[1];
def thiscount = highestall(count)-count + 1;
addverticalLine(isperiodrolled!=isperiodrolled[1],"");

def vw1 = if thiscount[1]==lookback+1 and thiscount==lookback then vwap[1] else vw1[1];
plot vwap1 =  if showtodayonly and getday()!=getlastday() then double.nan else vw1;

def ub1 = if thiscount[1]==lookback+1 and thiscount==lookback then upperband[1] else ub1[1];
plot upperband1 =  if showtodayonly and getday()!=getlastday() then double.nan else ub1;

def lb1 = if thiscount[1]==lookback+1 and thiscount==lookback then lowerband[1] else lb1[1];
plot lowerband1 =  if showtodayonly and getday()!=getlastday() then double.nan else lb1;

input showbubbles = yes;
def bn=barnumber();

addchartBubble(showbubbles and bn==highestall(bn), vwap1,
if timeframe==timeframe.day then "D-VW1"
else if timeframe==timeframe.week then "W-VW1"
else "M-VW1", vwap1.takevalueColor());

addchartBubble(showbubbles and bn==highestall(bn), upperband1,
if timeframe==timeframe.day then "D-UB1"
else if timeframe==timeframe.week then "W-UB1"
else "M-Ub1", upperband1.takevalueColor());

addchartBubble(showbubbles and bn==highestall(bn), lowerband1,
if timeframe==timeframe.day then "D-LB1"
else if timeframe==timeframe.week then "W-LB1"
else "M-Lb1", lowerband1.takevalueColor());
 
This should now do what you want. You can now also enter the lookback to find a prior timeframe to use.
Make sure your chart timeframe has enough days to cover the timeframe selected.

Perfect! You rocked this @SleepyZ, works perfectly now man, thanks so much.

Also, one small add, would it be possible to include quarterly and yearly timeframe aggregations?

Thanks!
 
Perfect! You rocked this @SleepyZ, works perfectly now man, thanks so much.

Also, one small add, would it be possible to include quarterly and yearly timeframe aggregations?

Thanks!

The quarterly and year have been added.
Added ability to hide the plot of the basic vwap so that only the extensions will show.
The image has studies for all of the timeframes. As there are not enough days (180) set for the chart timeframe, the yearly lines do not appear.

Screenshot 2023-11-30 161910.png

Code:
#
# TD Ameritrade IP Company, Inc. (c) 2011-2023
# Prior Lookback Timeframe lines extended to Next Timeframe

input lookback      = 1;
input showtodayonly = yes;
input hide_vwap     = yes;

input numDevDn = -1.0;
input numDevUp = 1.0;
input timeFrame = {default DAY, WEEK, MONTH, Quarter, Year};

def cap = GetAggregationPeriod();
def errorInAggregation =
    timeFrame == timeFrame.DAY and cap >= AggregationPeriod.WEEK or
    timeFrame == timeFrame.WEEK and cap >= AggregationPeriod.MONTH;
Assert(!errorInAggregation, "timeFrame should be not less than current chart aggregation period");

def yyyyMmDd = GetYYYYMMDD();
def qtr = (GetMonth() - 1) % 3;
def newQtr = qtr == 0 and qtr[1] == 2;
def year = GetYear();
def periodIndx;

switch (timeFrame) {
case DAY:
    periodIndx = yyyyMmDd;
case WEEK:
    periodIndx = Floor((DaysFromDate(First(yyyyMmDd)) + GetDayOfWeek(First(yyyyMmDd))) / 7);
case MONTH:
    periodIndx = RoundDown(yyyyMmDd / 100, 0);
case Quarter:
    periodIndx = newQtr[1] == 1 and newQtr == 0;
case Year:
    periodIndx = Floor(year - First(year));
}
def isPeriodRolled = CompoundValue(1, periodIndx != periodIndx[1], yes);

def volumeSum;
def volumeVwapSum;
def volumeVwap2Sum;

if (isPeriodRolled) {
    volumeSum = volume;
    volumeVwapSum = volume * vwap;
    volumeVwap2Sum = volume * Sqr(vwap);
} else {
    volumeSum = CompoundValue(1, volumeSum[1] + volume, volume);
    volumeVwapSum = CompoundValue(1, volumeVwapSum[1] + volume * vwap, volume * vwap);
    volumeVwap2Sum = CompoundValue(1, volumeVwap2Sum[1] + volume * Sqr(vwap), volume * Sqr(vwap));
}
def price = if IsNaN(close) then price[1] else volumeVwapSum / volumeSum;
def deviation = Sqrt(Max(volumeVwap2Sum / volumeSum - Sqr(price), 0));

plot VWAP = price;
plot UpperBand = price + numDevUp * deviation;
plot LowerBand = price + numDevDn * deviation;

VWAP.SetDefaultColor(GetColor(0));
UpperBand.SetDefaultColor(GetColor(2));
LowerBand.SetDefaultColor(GetColor(4));
VWAP.sethiding(hide_vwap);
UpperBand.sethiding(hide_vwap);
LowerBand.sethiding(hide_vwap);

def count = if periodIndx != periodIndx[1] and !IsNaN(close) then count[1] + 1 else count[1];
def thiscount = HighestAll(count) - count + 1;

AddVerticalLine(periodIndx != periodIndx[1], "");
#AddChartBubble(1, high, periodindx);


def vw1 = if thiscount[1] == lookback + 1 and thiscount == lookback
          then
                if timeFrame == timeFrame.Quarter then VWAP[2]
                else VWAP[1]
          else vw1[1];
plot vwap1 =  if showtodayonly and GetDay() < GetLastDay() then Double.NaN else vw1;
vwap1.setpaintingStrategy(paintingStrategy.HORIZONTAL);

def ub1 = if thiscount[1] == lookback + 1 and thiscount == lookback
          then
              if timeFrame == timeFrame.Quarter then UpperBand[2]
              else UpperBand[1]
          else ub1[1];
plot upperband1 =  if showtodayonly and GetDay() < GetLastDay() then Double.NaN else ub1;
upperband1.setpaintingStrategy(paintingStrategy.HORIZONTAL);

def lb1 = if thiscount[1] == lookback + 1 and thiscount == lookback
          then
                if timeFrame == timeFrame.Quarter then LowerBand[2]
                else LowerBand[1]
          else lb1[1];
plot lowerband1 =  if showtodayonly and GetDay() < GetLastDay() then Double.NaN else lb1;
lowerband1.setpaintingStrategy(paintingStrategy.HORIZONTAL);

input showbubbles = yes;
def bn = BarNumber();

AddChartBubble(showbubbles and bn == HighestAll(bn), vwap1,
if timeFrame == timeFrame.DAY then "D-V1"
else if timeFrame == timeFrame.WEEK then "W-V1"
else if timeFrame == timeFrame.MONTH then "M-V1"
else if timeFrame == timeFrame.Quarter then "Q-V1"
else "Y-V1", vwap1.TakeValueColor());

AddChartBubble(showbubbles and bn == HighestAll(bn), upperband1,
if timeFrame == timeFrame.DAY then "D-U1"
else if timeFrame == timeFrame.WEEK then "W-U1"
else if timeFrame == timeFrame.MONTH then "M-U1"
else if timeFrame == timeFrame.Quarter then "Q-U1"
else "Y-U1", upperband1.TakeValueColor());

AddChartBubble(showbubbles and bn == HighestAll(bn), lowerband1,
if timeFrame == timeFrame.DAY then "D-L1"
else if timeFrame == timeFrame.WEEK then "W-L1"
else if timeFrame == timeFrame.MONTH then "M-L1"
else if timeFrame == timeFrame.Quarter then "Q-L1"
else "Y-L1", lowerband1.TakeValueColor());
 
Solution
hey sleepyZ! nice job on this script, it was almost exactly what i was looking for. i just added a few more deviations built off of what you had already made; and deleted the bubble scripting as it wasnt needed for my visual pleasure. I just wanted to thank you and show appreciation for your work and effort. thanks!
 

Similar threads

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

87k+ Posts
420 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