Four Moving Average Crossovers For ThinkOrSwim

Huddy1955

New member
FJXbxPf.png

I've been using TOS for quite awhile, and I like to see MA cross overs on the chart...but it seemed a bit bulky to keep adding MA's then the crossovers for each.

Here's what, I think, is a bit of a short cut and allows for 4 different MA's to be plotted (using simple, exponential, weighted, and hull types) with the ability to
allow any of the MA's to show arrows when there is a MA cross.

It's one script instead of multiple.
I'd like to submit it to the useThinkScript community as a thank you for everyone else's much better work, and I hope it has enough value to be added to the great list of useable scripts.

mod note:
Benefits:
Moving average crossovers in day trading offer the benefit of simplifying trend identification and generating potential trading signals. By observing how shorter-term moving averages cross longer-term moving averages, traders can get a quick visual representation of market direction and potential trend changes, aiding in decision-making.

Dangers:
When you see moving averages bunched up close together on your chart, it's generally a signal to be cautious, as trend-following strategies are less effective and whipsaws are common. Wait for the moving averages to start separating and sloping in the same direction.



Code:
# Dual MA Crossover Arrows with Organized Plot Window

input price = close;

# --- MA Inputs ---
input length1 = 9;
input averageType1 = AverageType.Simple;

input length2 = 21;
input averageType2 = AverageType.Exponential;

input length3 = 50;
input averageType3 = AverageType.Weighted;

input length4 = 200;
input averageType4 = AverageType.Hull;

# --- MA Calculations ---
def MA1 = MovingAverage(averageType1, price, length1);
def MA2 = MovingAverage(averageType2, price, length2);
def MA3 = MovingAverage(averageType3, price, length3);
def MA4 = MovingAverage(averageType4, price, length4);

# --- Plot Moving Averages First ---
plot PlotMA1 = MA1;
PlotMA1.SetDefaultColor(Color.CYAN);
PlotMA1.SetLineWeight(2);
PlotMA1.SetStyle(Curve.FIRM);

plot PlotMA2 = MA2;
PlotMA2.SetDefaultColor(Color.MAGENTA);
PlotMA2.SetLineWeight(2);
PlotMA2.SetStyle(Curve.SHORT_DASH);

plot PlotMA3 = MA3;
PlotMA3.SetDefaultColor(Color.YELLOW);
PlotMA3.SetLineWeight(2);
PlotMA3.SetStyle(Curve.LONG_DASH);

plot PlotMA4 = MA4;
PlotMA4.SetDefaultColor(Color.WHITE);
PlotMA4.SetLineWeight(2);
PlotMA4.SetStyle(Curve.MEDIUM_DASH);

# --- MA Pair A Selection ---
input maX_A = {default "MA1", "MA2", "MA3", "MA4"};
input maY_A = {default "MA2", "MA3", "MA4", "MA1"};

# --- MA Pair B Selection ---
input maX_B = {default "MA1", "MA2", "MA3", "MA4"};
input maY_B = {default "MA3", "MA4", "MA1", "MA2"};

# --- Resolve MA Values for Crossover Pairs ---
def maXval_A =
if maX_A == maX_A."MA1" then MA1
else if maX_A == maX_A."MA2" then MA2
else if maX_A == maX_A."MA3" then MA3
else MA4;

def maYval_A =
if maY_A == maY_A."MA1" then MA1
else if maY_A == maY_A."MA2" then MA2
else if maY_A == maY_A."MA3" then MA3
else MA4;

def maXval_B =
if maX_B == maX_B."MA1" then MA1
else if maX_B == maX_B."MA2" then MA2
else if maX_B == maX_B."MA3" then MA3
else MA4;

def maYval_B =
if maY_B == maY_B."MA1" then MA1
else if maY_B == maY_B."MA2" then MA2
else if maY_B == maY_B."MA3" then MA3
else MA4;

# --- Crossover Logic ---
def crossAbove_A = Crosses(maXval_A, maYval_A, CrossingDirection.ABOVE);
def crossBelow_A = Crosses(maXval_A, maYval_A, CrossingDirection.BELOW);

def crossAbove_B = Crosses(maXval_B, maYval_B, CrossingDirection.ABOVE);
def crossBelow_B = Crosses(maXval_B, maYval_B, CrossingDirection.BELOW);

# --- Plot Crossover Arrows After MAs ---
plot UpArrowA = crossAbove_A;
UpArrowA.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
UpArrowA.SetDefaultColor(Color.GREEN);
UpArrowA.SetLineWeight(2);

plot DownArrowA = crossBelow_A;
DownArrowA.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
DownArrowA.SetDefaultColor(Color.RED);
DownArrowA.SetLineWeight(2);

plot UpArrowB = crossAbove_B;
UpArrowB.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
UpArrowB.SetDefaultColor(Color.LIGHT_GREEN);
UpArrowB.SetLineWeight(2);

plot DownArrowB = crossBelow_B;
DownArrowB.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
DownArrowB.SetDefaultColor(Color.PINK);
DownArrowB.SetLineWeight(2);

Shortcut to add to TOS:
http://tos.mx/!P1IPTSTL
 
Last edited by a moderator:
Very cool. My real estate on my charts is kinda precious, so I modified this to a Weighted Matrix MA set at different weights for Day Trader, Swing Traders and Investors. It is a thermal type of single plotted combination of 4 or 5 moving averages weighted in importance (as I see it, you can change the weights)
1KwdNn7.png

Features:
  1. Three strategy presets:
    • Day Trader
    • Swing Trader
    • Investor / Position Trader
  2. Menu toggle to select your preset
  3. Composite moving average line
  4. Color-shifting line:
    • Green when trending up
    • Red when trending down
  5. Crossover alert:
    • Triggered when price crosses the composite
IDEA: What Does the Composite Value Mean?

It gives you a weighted trend signal:
  • If price is above the composite line → likely bullish trend consensus
  • If price is below it → likely bearish
  • It’s smoother than short MAs, but more responsive than long ones
You can even apply:
A signal line to this composite (e.g., EMA of the composite)
A color change on slope (up/down)
Divergence against price (price rising but composite falling = early warning)

Code:
declare upper;

input mode = {default "Swing Trader", "Day Trader", "Investor"};

# Core moving averages
def ema9 = ExpAverage(close, 9);
def ema21 = ExpAverage(close, 21);
def sma50 = Average(close, 50);
def sma100 = Average(close, 100);
def sma200 = Average(close, 200);

# Dynamic weights based on mode
def w9;
def w21;
def w50;
def w100;
def w200;

switch (mode) {
case "Day Trader":
    w9   = 0.40;
    w21  = 0.30;
    w50  = 0.20;
    w100 = 0.10;
    w200 = 0.00;

case "Swing Trader":
    w9   = 0.20;
    w21  = 0.25;
    w50  = 0.25;
    w100 = 0.20;
    w200 = 0.10;

case "Investor":
    w9   = 0.10;
    w21  = 0.10;
    w50  = 0.20;
    w100 = 0.30;
    w200 = 0.40;
}

# Composite MA calculation
def compositeMA = (ema9 * w9) + (ema21 * w21) + (sma50 * w50) + (sma100 * w100) + (sma200 * w200);

# Color shift: Green if rising, Red if falling
def rising = compositeMA > compositeMA[1];
plot TrendMatrix = compositeMA;
TrendMatrix.AssignValueColor(if rising then Color.GREEN else Color.RED);
TrendMatrix.SetLineWeight(2);

# Price crossover alert (up/down)
def bullishCross = close crosses above compositeMA;
def bearishCross = close crosses below compositeMA;

Alert(bullishCross, "Price crossed ABOVE Composite Trend Matrix", Alert.BAR, Sound.Ding);
Alert(bearishCross, "Price crossed BELOW Composite Trend Matrix", Alert.BAR, Sound.Chimes);

# Optional: Add label to confirm active mode
AddLabel(yes, "MA Matrix Mode: " + mode, if rising then Color.GREEN else Color.RED);
https://tos.mx/!VRLLLIZh
 
Last edited by a moderator:
Here is a version I've been using. The shading helps.

1747966445784.png


Code:
input Hprice = high;
input Lprice = low;
input price = close;
#input lengthaa = 25;
input lengtha = 34;
input length = 50;
input length00 = 120;
input length0 = 200;
input displace = 0;
input bands = no;


#plot avgaa = ExpAverage(price[-displace], lengthaa);
#avgaa.setdefaultColor(color.LIGHT_GRAY);
#avgaa.SetLineWeight(1);

plot avga = ExpAverage(price[-displace], lengtha);
avga.setdefaultColor(color.cyan);
avga.SetLineWeight(2);

plot avg = ExpAverage(price[-displace], length);
#avg.AssignValueColor(if avg < avg[1] then Color.RED else (if avg == avg[1] then Color.GREEN else Color.GREEN));
avg.setdefaultcolor(createcolor(51,102,255));
avg.SetLineWeight(2);

plot avg1 = ExpAverage(price[-displace], length00);
avg1.setdefaultcolor(color.orange);
avg1.SetLineWeight(3);

plot avg2 = ExpAverage(price[-displace], length0);
avg2.setdefaultColor(color.dark_orange);
avg2.SetLineWeight(5);

#AddCloud(If(avgaa < Avga, avgaa, Double.NaN), avga, color.gray, color.gray);
#AddCloud(If(avgaa > Avga, avgaa, Double.NaN), avga, color.gray, color.gray);
AddCloud(If(avga > Avg, avga, Double.NaN), avg, createcolor(100,250,200), createcolor(100,250,200));
AddCloud(If(avga < Avg, avga, Double.NaN), Avg, createcolor(255,100,150), createcolor(255,100,150));

AddCloud(If(avg1 > Avg2, avg1, Double.NaN), avg2, color.dark_Green, color.dark_green);
AddCloud(If(avg1 < Avg2, avg1, Double.NaN), Avg2, color.dark_red, color.dark_red);

#   High / Low Band for SES computations---------------------------
#   EMA of HIGHS-----------------------------------------------------------
plot HAvg = if bands then MovAvgExponential(Hprice[-displace], length) else double.nan;

#HAvg.SetDefaultColor(Color.WHITE);
HAvg.SetLineWeight(1);
#HAvg.SetPaintingStrategy(PaintingStrategy.LINE_VS_POINTS);
HAvg.SetStyle(Curve.FIRM);
HAvg.HideBubble();
HAvg.HideTitle();

HAvg.AssignValueColor(if HAvg < HAvg[1] then Color.RED else (if HAvg == HAvg[1] then Color.GREEN else Color.GREEN));

#   EMA of LOWS------------------------------------------------------------
plot LAvg = if bands then MovAvgExponential(Lprice[-displace], length) else double.nan;

LAvg.SetDefaultColor(Color.blue);
LAvg.SetLineWeight(2);
#LAvg.SetPaintingStrategy(PaintingStrategy.LINE_VS_POINTS);
#LAvg.SetStyle(Curve.FIRM);
LAvg.HideBubble();
LAvg.HideTitle();
#LAvg.AssignValueColor(if LAvg < LAvg[1] then Color.RED else (if LAvg == LAvg[1] then Color.GREEN else Color.GREEN));

AddLabel(yes and price > Avg, "200:LONG", Color.Green);
AddLabel(yes  and price < Avg, "200:SHORT", Color.red);

#AddCloud (if Avg < Avg[1] then Havg else double.nan, lavg, color.dark_red);
#AddCloud (if Avg > Avg[1] then Havg else double.nan, lavg, color.dark_green);
 
I've been using TOS for quite awhile, and I like to see MA cross overs on the chart...but it seemed a bit bulky to keep adding MA's then the crossovers for each.

Here's what, I think, is a bit of a short cut and allows for 4 different MA's to be plotted (using simple, exponential, weighted, and hull types) with the ability to
allow any of the MA's to show arrows when there is a MA cross.

It's one script instead of multiple.
I'd like to submit it to the useThinkScript community as a thank you for everyone else's much better work, and I hope it has enough value to be added to the great list of useable scripts.

mod note:
Benefits:
Moving average crossovers in day trading offer the benefit of simplifying trend identification and generating potential trading signals. By observing how shorter-term moving averages cross longer-term moving averages, traders can get a quick visual representation of market direction and potential trend changes, aiding in decision-making.

Dangers:
When you see moving averages bunched up close together on your chart, it's generally a signal to be cautious, as trend-following strategies are less effective and whipsaws are common. Wait for the moving averages to start separating and sloping in the same direction.



Code:
# Dual MA Crossover Arrows with Organized Plot Window

input price = close;

# --- MA Inputs ---
input length1 = 9;
input averageType1 = AverageType.Simple;

input length2 = 21;
input averageType2 = AverageType.Exponential;

input length3 = 50;
input averageType3 = AverageType.Weighted;

input length4 = 200;
input averageType4 = AverageType.Hull;

# --- MA Calculations ---
def MA1 = MovingAverage(averageType1, price, length1);
def MA2 = MovingAverage(averageType2, price, length2);
def MA3 = MovingAverage(averageType3, price, length3);
def MA4 = MovingAverage(averageType4, price, length4);

# --- Plot Moving Averages First ---
plot PlotMA1 = MA1;
PlotMA1.SetDefaultColor(Color.CYAN);
PlotMA1.SetLineWeight(2);
PlotMA1.SetStyle(Curve.FIRM);

plot PlotMA2 = MA2;
PlotMA2.SetDefaultColor(Color.MAGENTA);
PlotMA2.SetLineWeight(2);
PlotMA2.SetStyle(Curve.SHORT_DASH);

plot PlotMA3 = MA3;
PlotMA3.SetDefaultColor(Color.YELLOW);
PlotMA3.SetLineWeight(2);
PlotMA3.SetStyle(Curve.LONG_DASH);

plot PlotMA4 = MA4;
PlotMA4.SetDefaultColor(Color.WHITE);
PlotMA4.SetLineWeight(2);
PlotMA4.SetStyle(Curve.MEDIUM_DASH);

# --- MA Pair A Selection ---
input maX_A = {default "MA1", "MA2", "MA3", "MA4"};
input maY_A = {default "MA2", "MA3", "MA4", "MA1"};

# --- MA Pair B Selection ---
input maX_B = {default "MA1", "MA2", "MA3", "MA4"};
input maY_B = {default "MA3", "MA4", "MA1", "MA2"};

# --- Resolve MA Values for Crossover Pairs ---
def maXval_A =
if maX_A == maX_A."MA1" then MA1
else if maX_A == maX_A."MA2" then MA2
else if maX_A == maX_A."MA3" then MA3
else MA4;

def maYval_A =
if maY_A == maY_A."MA1" then MA1
else if maY_A == maY_A."MA2" then MA2
else if maY_A == maY_A."MA3" then MA3
else MA4;

def maXval_B =
if maX_B == maX_B."MA1" then MA1
else if maX_B == maX_B."MA2" then MA2
else if maX_B == maX_B."MA3" then MA3
else MA4;

def maYval_B =
if maY_B == maY_B."MA1" then MA1
else if maY_B == maY_B."MA2" then MA2
else if maY_B == maY_B."MA3" then MA3
else MA4;

# --- Crossover Logic ---
def crossAbove_A = Crosses(maXval_A, maYval_A, CrossingDirection.ABOVE);
def crossBelow_A = Crosses(maXval_A, maYval_A, CrossingDirection.BELOW);

def crossAbove_B = Crosses(maXval_B, maYval_B, CrossingDirection.ABOVE);
def crossBelow_B = Crosses(maXval_B, maYval_B, CrossingDirection.BELOW);

# --- Plot Crossover Arrows After MAs ---
plot UpArrowA = crossAbove_A;
UpArrowA.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
UpArrowA.SetDefaultColor(Color.GREEN);
UpArrowA.SetLineWeight(2);

plot DownArrowA = crossBelow_A;
DownArrowA.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
DownArrowA.SetDefaultColor(Color.RED);
DownArrowA.SetLineWeight(2);

plot UpArrowB = crossAbove_B;
UpArrowB.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
UpArrowB.SetDefaultColor(Color.LIGHT_GREEN);
UpArrowB.SetLineWeight(2);

plot DownArrowB = crossBelow_B;
DownArrowB.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
DownArrowB.SetDefaultColor(Color.PINK);
DownArrowB.SetLineWeight(2);

Shortcut to add to TOS:
http://tos.mx/!P1IPTSTL

here is a variation to post 1
many colored lines can make a chart hard to read.
this makes the average lines dark gray unless a cross over occurs, then they have a color.
it looks at bars before and after a crossing.
img1.JPG


Code:
#mov_avg_cross_colors

#https://usethinkscript.com/threads/four-moving-average-crossovers-for-thinkorswim.21030/
#Indicators Custom
#Four Moving Average Crossovers For ThinkOrSwim
#Huddy1955  May 11, 2025
#1
#FJXbxPf.png
#I've been using TOS for quite awhile, and I like to see MA cross overs on the chart...but it seemed a bit bulky to keep adding MA's then the crossovers for each.

#Here's what, I think, is a bit of a short cut and allows for 4 different MA's to be plotted (using simple, exponential, weighted, and hull types) with the ability to allow any of the MA's to show arrows when there is a MA cross.

#It's one script instead of multiple.
#I'd like to submit it to the useThinkScript community as a thank you for everyone else's much better work, and I hope it has enough value to be added to the great list of useable scripts.

#mod note:
#Benefits:
#Moving average crossovers in day trading offer the benefit of simplifying trend identification and generating potential trading signals. By observing how shorter-term moving averages cross longer-term moving averages, traders can get a quick visual representation of market direction and potential trend changes, aiding in decision-making.

#Dangers:
#When you see moving averages bunched up close together on your chart, it's generally a signal to be cautious, as trend-following strategies are less effective and whipsaws are common. Wait for the moving averages to start separating and sloping in the same direction.



# Dual MA Crossover Arrows with Organized Plot Window

input price = close;

# --- MA Inputs ---
input length1 = 9;
input averageType1 = AverageType.Simple;

input length2 = 21;
input averageType2 = AverageType.Exponential;

input length3 = 50;
input averageType3 = AverageType.Weighted;

input length4 = 200;
input averageType4 = AverageType.Hull;

# --- MA Calculations ---
def MA1 = MovingAverage(averageType1, price, length1);
def MA2 = MovingAverage(averageType2, price, length2);
def MA3 = MovingAverage(averageType3, price, length3);
def MA4 = MovingAverage(averageType4, price, length4);


def ma1x = ma1 crosses ma2 or ma1 crosses ma3 or ma1 crosses ma4;
def ma1x2 = ma1x[-1] or ma1x or ma1x[1];

def ma2x = ma2 crosses ma1 or ma2 crosses ma3 or ma2 crosses ma4;
def ma2x2 = ma2x[-1] or ma2x or ma2x[1];

def ma3x = ma3 crosses ma1 or ma3 crosses ma2 or ma3 crosses ma4;
def ma3x2 = ma3x[-1] or ma3x or ma3x[1];

def ma4x = ma4 crosses ma1 or ma4 crosses ma2 or ma4 crosses ma3;
def ma4x2 = ma4x[-1] or ma4x or ma4x[1];

addchartbubble(0, low*0.995,
ma1x + "\n" +
ma1x2
, color.yellow, no);



# --- Plot Moving Averages First ---
plot PlotMA1 = MA1;
#PlotMA1.SetDefaultColor(Color.CYAN);
plotma1.AssignValueColor(if ma1x2 then color.cyan else color.dark_gray);
PlotMA1.SetLineWeight(2);
PlotMA1.SetStyle(Curve.FIRM);

plot PlotMA2 = MA2;
#PlotMA2.SetDefaultColor(Color.MAGENTA);
plotma2.AssignValueColor(if ma2x2 then color.magenta else color.dark_gray);
PlotMA2.SetLineWeight(2);
PlotMA2.SetStyle(Curve.SHORT_DASH);

plot PlotMA3 = MA3;
#PlotMA3.SetDefaultColor(Color.YELLOW);
plotma3.AssignValueColor(if ma3x2 then color.yellow else color.dark_gray);
PlotMA3.SetLineWeight(2);
PlotMA3.SetStyle(Curve.LONG_DASH);

plot PlotMA4 = MA4;
#PlotMA4.SetDefaultColor(Color.WHITE);
plotma4.AssignValueColor(if ma4x2 then color.white else color.dark_gray);
PlotMA4.SetLineWeight(2);
PlotMA4.SetStyle(Curve.MEDIUM_DASH);

# --- MA Pair A Selection ---
input maX_A = {default "MA1", "MA2", "MA3", "MA4"};
input maY_A = {default "MA2", "MA3", "MA4", "MA1"};

# --- MA Pair B Selection ---
input maX_B = {default "MA1", "MA2", "MA3", "MA4"};
input maY_B = {default "MA3", "MA4", "MA1", "MA2"};

# --- Resolve MA Values for Crossover Pairs ---
def maXval_A =
if maX_A == maX_A."MA1" then MA1
else if maX_A == maX_A."MA2" then MA2
else if maX_A == maX_A."MA3" then MA3
else MA4;

def maYval_A =
if maY_A == maY_A."MA1" then MA1
else if maY_A == maY_A."MA2" then MA2
else if maY_A == maY_A."MA3" then MA3
else MA4;

def maXval_B =
if maX_B == maX_B."MA1" then MA1
else if maX_B == maX_B."MA2" then MA2
else if maX_B == maX_B."MA3" then MA3
else MA4;

def maYval_B =
if maY_B == maY_B."MA1" then MA1
else if maY_B == maY_B."MA2" then MA2
else if maY_B == maY_B."MA3" then MA3
else MA4;

# --- Crossover Logic ---
def crossAbove_A = Crosses(maXval_A, maYval_A, CrossingDirection.ABOVE);
def crossBelow_A = Crosses(maXval_A, maYval_A, CrossingDirection.BELOW);

def crossAbove_B = Crosses(maXval_B, maYval_B, CrossingDirection.ABOVE);
def crossBelow_B = Crosses(maXval_B, maYval_B, CrossingDirection.BELOW);

# --- Plot Crossover Arrows After MAs ---
plot UpArrowA = crossAbove_A;
UpArrowA.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
UpArrowA.SetDefaultColor(Color.GREEN);
UpArrowA.SetLineWeight(2);

plot DownArrowA = crossBelow_A;
DownArrowA.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
DownArrowA.SetDefaultColor(Color.RED);
DownArrowA.SetLineWeight(2);

plot UpArrowB = crossAbove_B;
UpArrowB.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
UpArrowB.SetDefaultColor(Color.LIGHT_GREEN);
UpArrowB.SetLineWeight(2);

plot DownArrowB = crossBelow_B;
DownArrowB.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
DownArrowB.SetDefaultColor(Color.PINK);
DownArrowB.SetLineWeight(2);
#
 
Last edited by a moderator:

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
381 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