Triple 3 Inside Bars Indicator and Scanner for ThinkorSwim

Is there a way to change the color of the bars easily, and is there also a study or scan for the Bearish side? Thanks
Sure, to change the colors of the bars, just search for "createColor" near the bottom. There are 4 occurances of the RGB colors in parentheses. You can find other RGB color codes using google or just replace it with the built in colors code like Color.GREEN
I have't converted it to bearish yet, but I probably will at some point and post here if nobody beats me to it. Could be a while though
 
Just updated the 3 and 4 Bar Play above to version 1.2
Changes:
individual lookback customization, ignitor bar height now includes wicks, can now customize pause bars minimum low (was ignitor midpoint),
non-uptrend and no resistance requirements can be disabled, better uptrend detection, inputs more consistent, tweaks, fixes, more comments
Does the script work for when going short?
 
@BenTen I tested this on a custom time frame and the results look promising. Is it possible to get a Bearish version of this indicator ? Is it possible to scan for both bullish and bearish version of this pattern on ToS on a custom time frame that is not in the list on the scanner ?
 
Thanks for the idea. I wanted to try to add the 4 bar play too, and tried to follow the criteria that Live Traders mentions in that video. This is my result. It seems to match the pattern pretty well. The only issue is I've found very few matches now in my overnight scans and clicking through stocks. Maybe it'll do better during trading hours, or the criteria is just too strict (it is configurable), though if I loosen up I get results that don't quite match the pattern. Or maybe I made a mistake somewhere. Well here's what I came up with
6/17/20 updated to v1.5

ocLsc5x.png


Code:
# Bullish 3 Bar Play & 4 Bar Play v1.5 by Len20
# based on Live Traders video https://www.youtube.com/watch?v=xEjUd82NVVg

# v1.1 fixed small mistake
# v1.2 individual lookback customization, ignitor bar height now includes wicks, can now customize pause bars minimum low (was ignitor midpoint),
#      non-uptrend and no resistance requirements can be disabled, better uptrend detection, inputs more consistent, tweaks, fixes, more comments
# v1.3 trigger bar need not be green = more potential pattern matches
# v1.4 "Show Potential" now includes possible pattern setups during middle ("pause") bars, bug fix, trigger bar min low can now be same as pause bars min low ("Relaxed"), instead of pause bars actual low (official)
# v1.5 "Show potential" now includes ignitor bar. Can now color bars. Background color change on signals. Pattern will signal when forming live, disappears if it fails. Uptrend detection lookback now won't overlap pre-market, reg hours, or afterhours time zones. Recoded some logic. Other fixes, tweaks.

# Magenta arrow = potential pattern forming
# White arrow   = confirmed (trigger bar high broke the high of ignitor and pause bars)

# Official Criteria:
# 1st bar ("ignitor") spike in price, range, maybe volume & 1st or 2nd bar of a move
# 1st bar not in middle of an uptrend
# 1st bar should be above resistance (closes above recent high)
# middle bar/bars ("pause") low is above midpoint of 1st bar
# middle bar/bars high is near 1st bar high
# middle bar/bars can be green or red
# trigger bar (potential) low is greater than low of middle bar/bars
# trigger bar (confirmed) high is above the high of the ingnitor and middle bars

input Show_Arrows_Potential = yes;         # ignitor and pause bars match pattern, trigger has potential
input Show_Arrows_Confirmed = yes;         # trigger bar successfully crossed previous bars high
input Color_Bars_Potential  = yes;         # ignitor and pause bars match pattern, trigger has potential
input Color_Bars_Confirmed  = yes;         # trigger bar successfully crossed previous bars high
input Flash_Background_Start = {default "Off", "Ignitor", "Pause Bars", "Trigger"};   # BG color change starting with selected bar match
input trigger_Bar_Low_Min = {default "Official", "Relaxed"};   # Trigger bar low min based on pause bars low (official), or pause bars minimum
input Show_During_Uptrend = yes;           # Strict pattern not supposed to be in middle of uptrend
input uptrend_Limit_Perc_Inc = 1.0;        # Only used if Show_During_Uptrend = no (Still signal if uptrend is below % entered)
input uptrend_LookBack = 10;               # Only used if Show_During_Uptrend = no
input prev_High_LookBack = 5;              # Ignitor bar must break previous period high
input avg_Vol_LookBack = 10;               # for qualifying ignitor bar
input avg_Range_LookBack = 10;             # for qualifying ignitor bar
input ignitor_Range_Spike_Perc = 200;      # Minimum ignitor range % relative to avg range (200% = 2x avg range)
input ignitor_Vol_Spike_Perc = 100;        # Minimum volume % relative to avg volume
input pause_Low_Min_Perc  = 45;            # Pause bars low min % of ignitor bar range (50% = middle of ingitor bar)
input pause_High_Min_Perc = 80;            # Pause bars high min % of ignitor bar range
input pause_High_max_Perc = 110;           # Pause bars high max % of ignitor bar range

Assert(prev_High_LookBack >= 1, "prev_High_LookBack must be greater than zero");
Assert(uptrend_LookBack >= 1, "uptrend_LookBack must be greater than zero");
Assert(avg_Vol_LookBack >= 1, "avg_Vol_LookBack must be greater than zero");
Assert(avg_Range_LookBack >= 1, "avg_Range_LookBack must be greater than zero");
Assert(ignitor_Range_Spike_Perc >= 110, "ignitor_Range_Spike_Perc must be greater than 110%");
Assert(pause_Low_Min_Perc >= 0, "pause_Low_Min_Perc must be greater than zero");
Assert(pause_High_Min_Perc >= pause_Low_Min_Perc, "pause_High_Min_Perc must be greater than pause_Low_Min_Perc");
Assert(pause_High_max_Perc >= 100, "pause_High_max_Perc must be greater than or equal to 100%");

def triggerMode;
switch (trigger_Bar_Low_Min) {
case "Official": triggerMode = 1;
case "Relaxed": triggerMode = 2; }

def flashBGMode;
switch (Flash_Background_Start) {
case "Off": flashBGMode = 1;
case "Ignitor": flashBGMode = 2;
case "Pause Bars": flashBGMode = 3;
case "Trigger": flashBGMode = 4; }

def start = 0930;
def end = 1600;
def pre = secondsTillTime(start) > 0;
def regHrs = secondsfromtime(start) >= 0 and secondsTillTime(end) > 0;
def AH =  secondsfromtime(end) >= 0;
def utLookback = max(1, rounddown(uptrend_LookBack / 2, 0));
def utLookbackRecent = max(1, rounddown(uptrend_LookBack / 4, 0));
def uptrendLimMult = 1 + (uptrend_Limit_Perc_Inc * .01);
def h = high;
def l = low;
def o = open;
def c = close;
def v = volume;
def liveBar = isNaN(c[-1]);
def upBar = o < c;
def range = h - l;
def avgRange = ATR(avg_Range_LookBack);
def avgVol = Average(v, avg_Vol_LookBack);
def hh = Highest(h, prev_High_LookBack);

def movAvg = MovingAverage(AverageType.SIMPLE, c, utLookback);
def movAvgRecent = MovingAverage(AverageType.SIMPLE, c, utLookbackRecent);

def diffTimeZone1 = (pre and !pre[utLookback * 2]) or (regHrs and !regHrs[utLookback * 2]) or (AH and !AH[utLookback * 2]);
def diffTimeZone2 = (pre and !pre[utLookbackRecent * 2]) or (regHrs and !regHrs[utLookbackRecent * 2]) or (AH and !AH[utLookbackRecent * 2]);

def notUptrend1 = diffTimeZone1 or (movAvg <= movAvg[utLookback] * uptrendLimMult);
def notUptrend2 = diffTimeZone2 or (movAvgRecent <= movAvgRecent[utLookbackRecent] * uptrendLimMult);
def notUptrend = Show_During_Uptrend or (notUptrend1 and notUptrend2);

def ignitorMinHigh = max(hh[1] , h[1] + (range[1] * (ignitor_Range_Spike_Perc - 100) * .01 * .7));
def ignitor_bar = upBar and notUptrend[1] and h >= ignitorMinHigh and range > range[1] and range >= avgRange[1] * ignitor_Range_Spike_Perc * .01 and v >= avgVol[1] * ignitor_Vol_Spike_Perc *.01;

def pauseLowMin = l + (range * pause_Low_Min_Perc * .01);
def pauseHighMin = l + (range * pause_High_Min_Perc * .01);
def pauseHighMax = l + (range * pause_High_max_Perc * .01);
def pause_bar1 = ignitor_bar[1] and l >= pauseLowMin[1] and h <= pauseHighMax[1] and h >= pauseHighMin[1];
def pause_bar2 =  pause_bar1[1] and l >= pauseLowMin[2] and h <= pauseHighMax[2] and h >= pauseHighMin[2];

def potential_3BP = pause_bar1[1] and range > 0 and if triggerMode == 1 then l >= l[1] else l >= pauseLowMin[2];
def confirmed_3BP = potential_3BP and h > Max(h[1], h[2]);
def potential_4BP = pause_bar2[1] and range > 0 and if triggerMode == 1 then l >= min(l[1], l[2]) else l >= pauseLowMin[3];
def confirmed_4BP = potential_4BP and h > Max(Max(h[1], h[2]), h[3]);

# The 3rd bar can be both pause_bar2 and 3BP trigger bar at same time

def show_confirmed = confirmed_3BP or confirmed_4BP;
def show_potential = (potential_3BP or potential_4BP) and liveBar;
#def show_pause2  = pause_bar2 and !potential_3BP and !confirmed_3BP and (if liveBar then 1 else (potential_4BP[-1] and liveBar[-1]) or confirmed_4BP[-1]);
def show_pause2  = pause_bar2 and (if liveBar then 1 else (potential_4BP[-1] and liveBar[-1]) or confirmed_4BP[-1]);
def show_pause1  = pause_bar1 and (if liveBar then 1 else show_pause2[-1] or (potential_3BP[-1] and liveBar[-1]) or confirmed_3BP[-1]);
def show_ignitor = ignitor_bar and (if liveBar then 1 else show_pause1[-1]);

plot confirmed_arrows = Show_Arrows_Confirmed and show_confirmed;
plot potential_arrows = Show_Arrows_Potential and (show_ignitor or show_pause1 or show_pause2 or show_potential);

def paintPotential = Color_Bars_Potential and (show_ignitor or show_pause1 or show_pause2 or show_potential);
def paintConfirmed = Color_Bars_Confirmed and show_confirmed;

def flashBG = if flashBGMode == 2 then (show_ignitor or show_pause1 or show_pause2 or show_potential or show_confirmed) else
              if flashBGMode == 3 then (show_pause1 or show_pause2 or show_potential or show_confirmed) else
              if flashBGMode == 4 then (show_potential or show_confirmed) else 0;

# STYLE #
confirmed_arrows.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
confirmed_arrows.SetDefaultColor(Color.WHITE);
confirmed_arrows.SetLineWeight(3);

potential_arrows.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
potential_arrows.SetDefaultColor(Color.MAGENTA);
potential_arrows.SetLineWeight(3);

assignPriceColor(if paintPotential then if c < o then createColor(255,0,20) else createColor(200,255,20) else color.CURRENT);
assignPriceColor(if paintConfirmed then if c < o then createColor(255,0,20) else createColor(200,255,20) else color.CURRENT);

assignBackgroundColor(if flashBG then color.LIGHT_GRAY else color.current);

and here is the scan
Code:
# Bullish 3 Bar Play & 4 Bar Play SCAN v1.5 by Len20
# based on Live Traders video https://www.youtube.com/watch?v=xEjUd82NVVg

# v1.1 fixed small mistake
# v1.2 individual lookback customization, ignitor bar height now includes wicks, can now customize pause bars minimum low (was ignitor midpoint),
#      non-uptrend and no resistance requirements can be disabled, better uptrend detection, inputs more consistent, tweaks, fixes, more comments
# v1.3 trigger bar need not be green = more potential pattern matches
# v1.4 "Show Potential" now includes possible pattern setups during middle ("pause") bars, bug fix, trigger bar min low can now be same as pause bars min low ("Relaxed"), instead of pause bars actual low (official)
# v1.5 "Show potential" now includes ignitor bar. Can now color bars. Background color change on signals. Pattern will signal when forming live, disappears if it fails. Uptrend detection lookback now won't overlap pre-market, reg hours, or afterhours time zones. Recoded some logic. Other fixes, tweaks.

# Magenta arrow = potential pattern forming
# White arrow   = confirmed (trigger bar high broke the high of ignitor and pause bars)

# Official Criteria:
# 1st bar ("ignitor") spike in price, range, maybe volume & 1st or 2nd bar of a move
# 1st bar not in middle of an uptrend
# 1st bar should be above resistance (closes above recent high)
# middle bar/bars ("pause") low is above midpoint of 1st bar
# middle bar/bars high is near 1st bar high
# middle bar/bars can be green or red
# trigger bar (potential) low is greater than low of middle bar/bars
# trigger bar (confirmed) high is above the high of the ingnitor and middle bars

input Show_Arrows_Potential = yes;         # ignitor and pause bars match pattern, trigger has potential
input Show_Arrows_Confirmed = yes;         # trigger bar successfully crossed previous bars high
input Color_Bars_Potential  = yes;         # ignitor and pause bars match pattern, trigger has potential
input Color_Bars_Confirmed  = yes;         # trigger bar successfully crossed previous bars high
input Flash_Background_Start = {default "Off", "Ignitor", "Pause Bars", "Trigger"};   # BG color change starting with selected bar match
input trigger_Bar_Low_Min = {default "Official", "Relaxed"};   # Trigger bar low min based on pause bars low (official), or pause bars minimum
input Show_During_Uptrend = yes;           # Strict pattern not supposed to be in middle of uptrend
input uptrend_Limit_Perc_Inc = 1.0;        # Only used if Show_During_Uptrend = no (Still signal if uptrend is below % entered)
input uptrend_LookBack = 10;               # Only used if Show_During_Uptrend = no
input prev_High_LookBack = 5;              # Ignitor bar must break previous period high
input avg_Vol_LookBack = 10;               # for qualifying ignitor bar
input avg_Range_LookBack = 10;             # for qualifying ignitor bar
input ignitor_Range_Spike_Perc = 200;      # Minimum ignitor range % relative to avg range (200% = 2x avg range)
input ignitor_Vol_Spike_Perc = 100;        # Minimum volume % relative to avg volume
input pause_Low_Min_Perc  = 45;            # Pause bars low min % of ignitor bar range (50% = middle of ingitor bar)
input pause_High_Min_Perc = 80;            # Pause bars high min % of ignitor bar range
input pause_High_max_Perc = 110;           # Pause bars high max % of ignitor bar range

Assert(prev_High_LookBack >= 1, "prev_High_LookBack must be greater than zero");
Assert(uptrend_LookBack >= 1, "uptrend_LookBack must be greater than zero");
Assert(avg_Vol_LookBack >= 1, "avg_Vol_LookBack must be greater than zero");
Assert(avg_Range_LookBack >= 1, "avg_Range_LookBack must be greater than zero");
Assert(ignitor_Range_Spike_Perc >= 110, "ignitor_Range_Spike_Perc must be greater than 110%");
Assert(pause_Low_Min_Perc >= 0, "pause_Low_Min_Perc must be greater than zero");
Assert(pause_High_Min_Perc >= pause_Low_Min_Perc, "pause_High_Min_Perc must be greater than pause_Low_Min_Perc");
Assert(pause_High_max_Perc >= 100, "pause_High_max_Perc must be greater than or equal to 100%");

def triggerMode;
switch (trigger_Bar_Low_Min) {
case "Official": triggerMode = 1;
case "Relaxed": triggerMode = 2; }

def flashBGMode;
switch (Flash_Background_Start) {
case "Off": flashBGMode = 1;
case "Ignitor": flashBGMode = 2;
case "Pause Bars": flashBGMode = 3;
case "Trigger": flashBGMode = 4; }

def start = 0930;
def end = 1600;
def pre = secondsTillTime(start) > 0;
def regHrs = secondsfromtime(start) >= 0 and secondsTillTime(end) > 0;
def AH =  secondsfromtime(end) >= 0;
def utLookback = max(1, rounddown(uptrend_LookBack / 2, 0));
def utLookbackRecent = max(1, rounddown(uptrend_LookBack / 4, 0));
def uptrendLimMult = 1 + (uptrend_Limit_Perc_Inc * .01);
def h = high;
def l = low;
def o = open;
def c = close;
def v = volume;
def liveBar = isNaN(c[-1]);
def upBar = o < c;
def range = h - l;
def avgRange = ATR(avg_Range_LookBack);
def avgVol = Average(v, avg_Vol_LookBack);
def hh = Highest(h, prev_High_LookBack);

def movAvg = MovingAverage(AverageType.SIMPLE, c, utLookback);
def movAvgRecent = MovingAverage(AverageType.SIMPLE, c, utLookbackRecent);

def diffTimeZone1 = (pre and !pre[utLookback * 2]) or (regHrs and !regHrs[utLookback * 2]) or (AH and !AH[utLookback * 2]);
def diffTimeZone2 = (pre and !pre[utLookbackRecent * 2]) or (regHrs and !regHrs[utLookbackRecent * 2]) or (AH and !AH[utLookbackRecent * 2]);

def notUptrend1 = diffTimeZone1 or (movAvg <= movAvg[utLookback] * uptrendLimMult);
def notUptrend2 = diffTimeZone2 or (movAvgRecent <= movAvgRecent[utLookbackRecent] * uptrendLimMult);
def notUptrend = Show_During_Uptrend or (notUptrend1 and notUptrend2);

def ignitorMinHigh = max(hh[1] , h[1] + (range[1] * (ignitor_Range_Spike_Perc - 100) * .01 * .7));
def ignitor_bar = upBar and notUptrend[1] and h >= ignitorMinHigh and range > range[1] and range >= avgRange[1] * ignitor_Range_Spike_Perc * .01 and v >= avgVol[1] * ignitor_Vol_Spike_Perc *.01;

def pauseLowMin = l + (range * pause_Low_Min_Perc * .01);
def pauseHighMin = l + (range * pause_High_Min_Perc * .01);
def pauseHighMax = l + (range * pause_High_max_Perc * .01);
def pause_bar1 = ignitor_bar[1] and l >= pauseLowMin[1] and h <= pauseHighMax[1] and h >= pauseHighMin[1];
def pause_bar2 =  pause_bar1[1] and l >= pauseLowMin[2] and h <= pauseHighMax[2] and h >= pauseHighMin[2];

def potential_3BP = pause_bar1[1] and range > 0 and if triggerMode == 1 then l >= l[1] else l >= pauseLowMin[2];
def confirmed_3BP = potential_3BP and h > Max(h[1], h[2]);
def potential_4BP = pause_bar2[1] and range > 0 and if triggerMode == 1 then l >= min(l[1], l[2]) else l >= pauseLowMin[3];
def confirmed_4BP = potential_4BP and h > Max(Max(h[1], h[2]), h[3]);

# The 3rd bar can be both pause_bar2 and 3BP trigger bar at same time

def show_confirmed = confirmed_3BP or confirmed_4BP;
def show_potential = (potential_3BP or potential_4BP) and liveBar;
#def show_pause2  = pause_bar2 and !potential_3BP and !confirmed_3BP and (if liveBar then 1 else (potential_4BP[-1] and liveBar[-1]) or confirmed_4BP[-1]);
def show_pause2  = pause_bar2 and (if liveBar then 1 else (potential_4BP[-1] and liveBar[-1]) or confirmed_4BP[-1]);
def show_pause1  = pause_bar1 and (if liveBar then 1 else show_pause2[-1] or (potential_3BP[-1] and liveBar[-1]) or confirmed_3BP[-1]);
def show_ignitor = ignitor_bar and (if liveBar then 1 else show_pause1[-1]);

def confirmed_arrows = Show_Arrows_Confirmed and show_confirmed;
def potential_arrows = Show_Arrows_Potential and (show_ignitor or show_pause1 or show_pause2 or show_potential);

plot scan = (confirmed_arrows or potential_arrows) within 3 bars;

@BenTen This one
 
@TopDog I don't know about that indicator. Not sure why they only have the bullish script and scanner.
 
@Len20 Were you able to build the bearish version of this study ? Bullish version looks like it's working on momentum trades. Just wondering..
 
I was only able to make the bullish version so far. I will probably convert it to bearish at some point but I'm pretty slow at coding and making it work (not a coder in real life), and I haven't had the time to work on it recently. When I do get it done, I will definitely post it here. I'd say a week or two at least
 
Last edited:
Updated my code on page 1 (HERE) to V 1.6. Now includes bullish and bearish indicator and scans.
Adding bearish mode made the code "complex" so the bullish and bearish scans had to be separate, but the indicator is combined and configurable. The scan can be configured to look for at minimum the ignitor bar, the pause bar/s, or the trigger bar.
 
Its been talked about alot and is supposed to be accurate and profitable. The only thing I dont understand is how do they find a 3 Bar Play ? Is there a scanner or a indicator ? All the stocks how do you find a 3 Bar Play LOL ?

This site is great but many assume everyone is a coder and tell what to do such as convert a script to a scanner instead of showing or simply posting the conversion. This might help

https://usethinkscript.com/threads/3-bar-play-pattern-scan.1765/
 
Remember there is more to the 3/4 bar play than developing the indicator, as per Jarret Live traders. His concept works most of the time. I played with some coding, i'm no expert, but I tinkered with the basic concept and had trouble with meeting some of the Official criteria such as the 1st "above avg" wide bar not being in the middle of a trend. If you can get this to work with the SwingArms - bingo.
 
@zbostick I don't know anything about coding for TradingView unfortunately. This code is for Thinkorswim by TD Ameritrade
@Len20 Yeah I downloaded ThinkorSwim, but for some reason I cannot get it to work. I dont know if should show past results or not, but working on it now. I don't know if you could get me the rundown on where to paste each section of code or not, would be awesome if you have the time to do so! If not, I will keep tinkering!
 
Last edited:
@zbostick
For the indicator on the chart, go to Studies, Edit studies..., "Create" button, Thinkscript editor tab, erase the default line of code and paste in the desired code, click OK.
For the scan, go to scanner tab, add filter, Study, change study to "Custom...", choose thinkscript Editor tab, erase existing line and paste scanner code in there, click OK, add whatever other filters you like. Click scan
For more details, I believe there are some tutorials on this site
 
@Len20, how effective are your scans with Futures?
Would the following be the only settings I have to adjust?
Code:
def start = 0000;
def end = 2359;

I generally trade in the 5 minute time frame.
Would I have to enable EXT hours for the 5 min?
 
@luicius I honestly know nothing about futures but I think the scan would still work the same as stocks. The start and end times are only used in determining if there is an uptrend/downtrend. The lookback for the trend won't go beyond the start or end time.

-If you still want results even during an uptrend, just set Show_During_Uptrend = yes and the times are not even used (or Show_During_Dntrend or Show_During_Trend)
-If you want to set it to no to hide patterns during a trend, just change the times to the opening hours and closing hours for the futures.
-If futures are 24hrs ( I have no clue lol), just change the 2 lines defining the variables diffTimeZone1 and diffTimeZone2 to
Code:
def diffTimeZone1 = 0;
def diffTimeZone2 = 0;

That should solve it
 
Last edited:
@Len20 Futures are very similar to stocks. Main difference is they trade virtually 23 hours from Sunday 6PM ~ Friday 5PM.
Futures stop trading each weekeday at 5PM for an hour for maintenance. The tricky part of your scan is the EXT toggle. I will continue backtesting your scan for Futures.
 

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

Similar threads

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

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