Switch Case Problems

jpmcewen

Member
I'm hoping someone can help. I have tried this in the form posted and by trying to turn all of the enums to strings but I keep getting the error Invalid statement: switch at 7:1. I think the real problem is with VWMA. Any thoughts would be appreciated.

Code:
input selectAvg1 = {Exponential, Hull, default Simple, VWAP, "VWMA", Weighted, Wilders};
input price1 = {default close, high, low, open};
input length1 = 0;
input displace1 = 0;

plot avg1;
switch (selectAvg1) {
case Exponential:
  avg1 = MovingAverage(selectAvg1,price1[displace1],length1);
case Hull:
  avg1 = MovingAverage(selectAvg1,price1[displace1],length1);
case Simple:
  avg1 = MovingAverage(selectAvg1,price1[displace1],length1);
case VWAP:
  avg1 = vwap(price1)[displace1] / length1;
case "VWMA":
  avg1 = Average((Sum(volume * close) / Sum(volume))[displace1], length1) / length1;
case Weighted:
  avg1 = MovingAverage(selectAvg1,price1[displace1],length1);
case Wilders:
  avg1 = MovingAverage(selectAvg1,price1[displace1],length1);
}
 
I'm hoping for some help. For learning and fun, I wanted to build a multiple moving average indicator using a mix of what's already available in Tos and an expanding list of moving average formulas. I have toyed around with switch statements and now conditionals but I can't seem to get this to work. Depending on what tactic I use it appears the issue is with either VWAP or VWMA. Can anyone look at this (latest iteration) and provide some feed back? I appreciate it.
Code:
input selectAvg1 = {"Exponential", "Hull", default "Simple", "VWAP", "VWMA", "Weighted", "Wilders"};
input price1 = {default close, high, low, open};
input length1 = 0;
input displace1 = 0;

plot avgData1;
if selectAvg1 == "Exponential" or "Hull" or "Simple" or "Weighted" or "Wilders"
then {
    avgData1 = MovingAverage(selectAvg1, price1, length1);
} else if selectAvg1 == "VWAP"
then {
    avgData1 = ((vwap(price1)) / length1);
} else {
    avgData1 = (Average((Sum(volume * close) / Sum(volume)), length1) / length1);
}
 
Last edited:
Went back to the switch statement and still have issues. I'm at a dead-end. @BenTen I know you're busy but any thoughts? Where am I off, I'm not seeing it? Thank you ahead of time.
Code:
input selectAvg1 = {"ExponentialMA", "HullMA", default "SimpleMA", "VolWeightedAvgPrice", "VolWeightedMA", "WeightedMA", "WildersMA"};
input price1 = {default close, high, low, open};
input length1 = 0;
input displace1 = 0;

plot avg1;
switch (selectAvg1) {
case "ExponentialMA":
  avg1 = MovingAverage(AverageType.Exponential,price1[displace1],length1);
case "HullMA":
  avg1 = MovingAverage(AverageType.Hull,price1[displace1],length1);
case "SimpleMA":
  avg1 = MovingAverage(AverageType.Simple,price1[displace1],length1);
case "VolWeightedAvgPrice:
  avg1 = (vwap(price1)[displace1]) / length1;
case "VolWeightedMA":
  avg1 = Average((Sum(volume * price1) / Sum(volume))[displace1], length1) / length1;
case "WeightedMA":
  avg1 = MovingAverage(AverageType.Weighted,price1[displace1],length1);
case "WildersMA":
  avg1 = MovingAverage(AverageType.Wilders,price1[displace1],length1);
}
 
Hi @jpmcewen ...

Looks like the makings of a potentially elegant solution. With that said, sometimes simple gets the job done. In that spirit, I offer you a Multiple Moving Average script. While it lacks VWAP and VWMA, it does have the other ingredients that should work right out of the box...

Code:
def price1 = close;
def length1 = 20;
def displace1 = 0;
input averageType1 = AverageType.SIMPLE;

plot MA1 = MovingAverage(averageType1, price1[-displace1], length1);
MA1.SetDefaultColor(Color.GREEN);
MA1.SetPaintingStrategy(PaintingStrategy.LINE);
MA1.SetLineWeight(3);
MA1.DefineColor("Up", Color.GREEN);
MA1.DefineColor("Down", Color.RED);
MA1.AssignValueColor(if MA1 > MA1[1] then MA1.Color("Up") else MA1.Color("Down"));
MA1.HideTitle();
#MA1.hide();


def price2 = close;
def length2 = 50;
def displace2 = 0;
input averageType2 = AverageType.EXPONENTIAL;

plot MA2 = MovingAverage(averageType2, price2[-displace2], length2);
MA2.SetDefaultColor(Color.YELLOW);
MA2.SetStyle(Curve.LONG_DASH);
MA2.SetLineWeight(3);
MA2.DefineColor("Up", Color.YELLOW);
MA2.DefineColor("Down", Color.ORANGE);
MA2.AssignValueColor(if MA2 > MA2[1] then MA2.Color("Up") else MA2.Color("Down"));
MA2.HideTitle();
#MA2.hide();


def price3 = close;
def length3 = 200;
def displace3 = 0;
input averageType3 = AverageType.HULL;

plot MA3 = MovingAverage(averageType3, price3[-displace3], length3);
MA3.SetDefaultColor(Color.RED);
MA3.SetLineWeight(3);
MA3.SetStyle(Curve.MEDIUM_DASH);
MA3.DefineColor("Up", Color.DARK_GREEN);
MA3.DefineColor("Down", Color.DARK_RED);
MA3.AssignValueColor(if MA3 > MA3[1] then MA3.Color("Up") else MA3.Color("Down"));
MA3.HideTitle();
#MA3.hide();

Hope this helps...

Good Luck and Good Trading :cool:
 
@BenTen and @netarchitech Hey Guys. Gonna be honest, the links above left me with more confusion than answers. I'd like to post the full code so you can see the "plan". I'm thinking it has to do with value conversion (I have tried defining var and even setting them to a starting value) but I can't confirm any of the issue I'm running into. I have also tried (based on either switch or conditional - can't remember) in 'The Universe' where I assign values to another variable to be converted for use but still issues. There is something I don't understand/misunderstand and I'm not catching it.

Here is the full code. I would like the ability to choose from multiple moving averages for the multiple averages I may want to paint. Does this help you help/point me in another direction?

Edit: cleaned up some simple mistakes and now I'm getting somewhere...a new error indexing of price1. Looking into this.
Edit2: got it! No errors. Now to test it.
Code:
#Future Averages to Add:
#  Tos:
#    MovAvgAdaptive
#    MovAvgEnvelope
#    MovAvgExponential
#    MovAvgExpRibbon
#    MovAvgTriangular
#    MovAvgTwoLines
#    MovAvgWeighted
#    SimpleMovingAvg
#    RainbowAverage
#    Average
#    ExpAverage
#    MovingAverage
#    WildersAverage
#  TradingVIew:
#    https://docs.google.com/document/d/14f0FMSO9vQsEu79p6ccnOwFIJt2V6UNMS5gAON_QLF8/edit

#========================================
# 1st Grouping of Moving Averages
#========================================

input selectAvg1 = {"ExponentialMA", "HullMA", default "SimpleMA", "VolWeightedAvgPrice", "VolWeightedMA", "WeightedMA", "WildersMA"};
input price1 = {default close, high, low, open};
input length1 = 0;
input displace1 = 0;

plot avg1;
switch (selectAvg1) {
case "ExponentialMA":
    avg1 = MovingAverage(AverageType.EXPONENTIAL, price1, length1)[-displace1];
case "HullMA":
    avg1 = MovingAverage(AverageType.HULL, price1, length1)[-displace1];
case "SimpleMA":
    avg1 = MovingAverage(AverageType.SIMPLE, price1, length1)[-displace1];
case "VolWeightedAvgPrice":
    avg1 = (vwap(price1)[-displace1]) / length1;
case "VolWeightedMA":
    avg1 = (Average(Sum((volume * price1) / Sum(volume), length1))[-displace1]) / length1;
case "WeightedMA":
    avg1 = MovingAverage(AverageType.WEIGHTED, price1, length1)[-displace1];
case "WildersMA":
    avg1 = MovingAverage(AverageType.WILDERS, price1, length1)[-displace1];
}


#========================================
# 2nd Grouping of Moving Averages
#========================================
input selectAvg2 = {"Exponential", "Hull", default "Simple", "VWAP", "VWMA", "Weighted", "Wilders"};
input price2 = {default close, high, low, open};
input length2 = 0;
input displace2 = 0;

plot avg2;
switch (selectAvg1) {
case "ExponentialMA":
    avg2 = MovingAverage(AverageType.EXPONENTIAL, price2, length2)[-displace2];
case "HullMA":
    avg2 = MovingAverage(AverageType.HULL, price2, length2)[-displace2];
case "SimpleMA":
    avg2 = MovingAverage(AverageType.SIMPLE, price2, length2)[-displace2];
case "VolWeightedAvgPrice":
    avg2 = (vwap(price2)[-displace2]) / length2;
case "VolWeightedMA":
    avg2 = (Average(Sum((volume * price2) / Sum(volume), length2))[-displace2]) / length2;
case "WeightedMA":
    avg2 = MovingAverage(AverageType.WEIGHTED, price2, length2)[-displace2];
case "WildersMA":
    avg2 = MovingAverage(AverageType.WILDERS, price2, length2)[-displace2];
}


#========================================
# 3rd Grouping of Moving Averages
#========================================
input selectAvg3 = {"Exponential", "Hull", default "Simple", "VWAP", "VWMA", "Weighted", "Wilders"};
input price3 = {default close, high, low, open};
input length3 = 0;
input displace3 = 0;

plot avg3;
switch (selectAvg1) {
case "ExponentialMA":
    avg3 = MovingAverage(AverageType.EXPONENTIAL, price3, length3)[-displace3];
case "HullMA":
    avg3 = MovingAverage(AverageType.HULL, price3, length3)[-displace3];
case "SimpleMA":
    avg3 = MovingAverage(AverageType.SIMPLE, price3, length3)[-displace3];
case "VolWeightedAvgPrice":
    avg3 = (vwap(price3)[-displace3]) / length3;
case "VolWeightedMA":
    avg3 = (Average(Sum((volume * price3) / Sum(volume), length3))[-displace3]) / length3;
case "WeightedMA":
    avg3 = MovingAverage(AverageType.WEIGHTED, price3, length3)[-displace3];
case "WildersMA":
    avg3 = MovingAverage(AverageType.WILDERS, price3, length3)[-displace3];
}


#========================================
# 4th Grouping of Moving Averages
#========================================
input selectAvg4 = {"Exponential", "Hull", default "Simple", "VWAP", "VWMA", "Weighted", "Wilders"};
input price4 = {default close, high, low, open};
input length4 = 0;
input displace4 = 0;

plot avg4;
switch (selectAvg1) {
case "ExponentialMA":
    avg4 = MovingAverage(AverageType.EXPONENTIAL, price4, length4)[-displace4];
case "HullMA":
    avg4 = MovingAverage(AverageType.HULL, price1, length4)[-displace4];
case "SimpleMA":
    avg4 = MovingAverage(AverageType.SIMPLE, price1, length4)[-displace4];
case "VolWeightedAvgPrice":
    avg4 = (vwap(price4)[-displace4]) / length4;
case "VolWeightedMA":
    avg4 = (Average(Sum((volume * price4) / Sum(volume), length4))[-displace4]) / length4;
case "WeightedMA":
    avg4 = MovingAverage(AverageType.WEIGHTED, price4, length4)[-displace4];
case "WildersMA":
    avg4 = MovingAverage(AverageType.WILDERS, price4, length4)[-displace4];
}
#END OF CODE====================
 
Last edited:
@BenTen I spoke too soon, once I cleared up stupid syntax mistakes, the links you provided came in handy. Thank you. I am stumped on a new issue. Any thoughts are appreciated.

When I comment out everything related to Enhanced VWAP, the indicator plots. Uncomment Enhanced VWAP and it fails. Code looks good to me right now. Thoughts?

EDIT: I should mention that the comment/uncomment are with the:
  • input selectAvg1
  • script enhVWAP
  • case "Enhanced VWAP"

Code:
declare upper;


#========================================
# 1st Grouping of Moving Averages
#========================================
#input selectAvg1 = {"ExponentialMA", "HullMA", default "SimpleMA", "Enhanced VWAP", "VolWeightedMA", "WeightedMA", "WildersMA"};
input selectAvg1 = {"ExponentialMA", "HullMA", default "SimpleMA", "VolWeightedMA", "WeightedMA", "WildersMA"};
#hint selectAvg1 : The following are only found in the 1st indicator: <li>VWAP</li>
input price1 = {default "close_", "high_", "low_", "open_"};
input length1 = 0;
input displace1 = 0;
def vPrice1;
def avg1;

#script enhVWAP {
#  # Inspired by VWAP with period - Assembled by BenTen at useThinkScript.com
#  # Found at: https://usethinkscript.com/threads/enhanced-vwap-indicator-for-thinkorswim.806/
#  input vwapLength = 0;
#  def h = high;
#  def l = low;
#  def c = close;
#  def typicalPrice = (h + l + c) / 3;
#  def typicalPriceVolume = typicalPrice * volume;
#  def cumulativeTypicalPriceVolume = Sum(typicalPriceVolume, vwapLength);
#  def cumulativeVolume = Sum(volume, vwapLength);
#  def vwapValue = cumulativeTypicalPriceVolume / cumulativeVolume;
#  plot warp = vwapValue;
#  }

switch (price1) {
  case "close_":
   vPrice1 = close;
  case "high_":
   vPrice1 = high;
  case "low_":
   vPrice1 = low;
  case "open_":
   vPrice1 = open;
}

switch (selectAvg1) {
  case "ExponentialMA":
    avg1 = MovingAverage(AverageType.EXPONENTIAL, vPrice1, length1);
  case "HullMA":
    avg1 = MovingAverage(AverageType.HULL, vPrice1, length1);
  case "SimpleMA":
    avg1 = MovingAverage(AverageType.SIMPLE, vPrice1, length1);
#  case "Enhanced VWAP":
#    avg1 = enhVWAP(length1) / length1;
  case "VolWeightedMA":
    avg1 = Average(Sum((volume * vPrice1) / Sum(volume), length1));
#or is it?:     avg1 = Sum(volume * price1, length1) / Sum(volume, length1)[-displace1];
  case "WeightedMA":
    avg1 = MovingAverage(AverageType.WEIGHTED, vPrice1, length1);
  case "WildersMA":
    avg1 = MovingAverage(AverageType.WILDERS, vPrice1, length1);
}

plot indicator1 = avg1[-displace1];
 
THINK I GOT IT!!! Thank you guys for your help. My first iteration was way off.

@BenTen I used your Enhanced VWAP but I've never used VWAP before. Would you mind giving it a look over, I'm not sure it is plotting properly? If not, no worries.



Code:
#Four Independent Indicators with the Choice of 7 Moving Averages + VWAP
# VWAP only available for Indicator1 (ind1)

#==GLOBAL ====================
declare upper;
input aggPeriod = AggregationPeriod.DAY;
def nan = double.NaN;

#==INDICATOR 1-4 INPUTS====================
input selectAvg1 = {default "Select_an_Indicator1", "ExponentialMA", "HullMA", "SimpleMA", "TriangularMA", "VolWeightedMA", "VWAPenhanced", "WeightedMA", "WildersMA"};
#hint selectAvg1 : The following are only found in the 1st indicator: <li>VWAP</li>
input price1     = {default "Select_a_Price1", "close_", "high_", "low_", "open_"};
input length1    = 0;
input displace1  = 0;

input selectAvg2 = {default "Select an Indicator1", "ExponentialMA", "HullMA", "SimpleMA", "TriangularMA", "VolWeightedMA", "WeightedMA", "WildersMA"};
input price2     = {default "close_", "high_", "low_", "open_"};
input length2    = 0;
input displace2  = 0;

input selectAvg3 = {default "Select an Indicator1", "ExponentialMA", "HullMA", "SimpleMA", "TriangularMA", "VolWeightedMA", "WeightedMA", "WildersMA"};
input price3     = {default "close_", "high_", "low_", "open_"};
input length3    = 0;
input displace3  = 0;

input selectAvg4 = {default "Select an Indicator1", "ExponentialMA", "HullMA", "SimpleMA", "TriangularMA", "VolWeightedMA", "WeightedMA", "WildersMA"};
input price4     = {default "close_", "high_", "low_", "open_"};
input length4    = 0;
input displace4  = 0;

#==INDICATOR 1-4 DEFINED VARIABLES====================
def vPrice1;
def avg1;

def vPrice2;
def avg2;

def vPrice3;
def avg3;

def vPrice4;
def avg4;

#==INDICATOR 1-4 PLOTS====================
plot ind1 = avg1;
plot ind2 = avg2;
plot ind3 = avg3;
plot ind4 = avg4;

#==SETTING PRICE====================
if (price1 == price1.close_) {
  vPrice1 = close;
} else {
  if price1 == price1.high_ {
    vPrice1 = high;
  } else {
    if price1 == price1.low_ {
      vPrice1 = low;
    } else {
      if price1 == price1.open_ {
        vPrice1 = open;
      } else {
        vPrice1 = nan;
      }}}}

if (price2 == price2.close_) {
  vPrice2 = close;
} else {
  if price2 == price2.high_ {
    vPrice2 = high;
  } else {
    if price2 == price2.low_ {
      vPrice2 = low;
    } else {
      if price2 == price2.open_ {
        vPrice2 = open;
      } else {
        vPrice2 = nan;
      }}}}

if (price3 == price3.close_) {
  vPrice3 = close;
} else {
  if price3 == price3.high_ {
    vPrice3 = high;
  } else {
    if price3 == price3.low_ {
      vPrice3 = low;
    } else {
      if price3 == price3.open_ {
        vPrice3 = open;
      } else {
        vPrice3 = nan;
      }}}}

if (price4 == price4.close_) {
  vPrice4 = close;
} else {
  if price4 == price4.high_ {
    vPrice4 = high;
  } else {
    if price4 == price4.low_ {
      vPrice4 = low;
    } else {
      if price4 == price4.open_ {
        vPrice4 = open;
      } else {
        vPrice4 = nan;
      }}}}

#==SCRIPTS====================
script enhVWAP {
  # Inspiration: VWAP with period - Assembled by BenTen at useThinkScript.com
  # Found at:    https://usethinkscript.com/threads/enhanced-vwap-indicator-for-thinkorswim.806/
  input vwapLength = 0;
  def vhigh = high;
  def vlow = low;
  def vclose = close;
  def typicalPrice = (vhigh + vlow + vclose) / 3;
  def typicalPriceVolume = typicalPrice * volume;
  def cumulativeTypicalPriceVolume = Sum(typicalPriceVolume, vwapLength);
  def cumulativeVolume = Sum(volume, vwapLength);
  def vwapValue = cumulativeTypicalPriceVolume / cumulativeVolume;
  plot warp = vwapValue;
  }

#==CONDITIONALS====================
if selectAvg1 == selectAvg1.ExponentialMA {
#  plot ind1 = MovingAverage(AverageType.EXPONENTIAL, Fundamental(vPrice1[-displace1], period=aggPeriod), length=length1);
  avg1 = MovAvgExponential(price=vPrice1, length=length1, displace=displace1);
} else {
  if selectAvg1 == selectAvg1.VWAPenhanced {
    avg1 = enhVWAP(length1) / length1;
  } else {
    if selectAvg1 == selectAvg1.SimpleMA {
      avg1 = SimpleMovingAvg(price=vPrice1, length=length1, displace=displace1);
    } else {
      if selectAvg1 == selectAvg1.HullMA {
          avg1 = HullMovingAvg(price=vPrice1, length=length1, displace=displace1);
        } else {
          if selectAvg1 == selectAvg1.WeightedMA {
            avg1 = MovAvgWeighted(price=vPrice1, length=length1, displace=displace1);
          } else {
            if selectAvg1 == selectAvg1.WildersMA {
              avg1 = WildersAverage(data=vPrice1[-displace1], length=length1);
            } else {
              if selectAvg1 == selectAvg1.TriangularMA {
                avg1 = MovAvgTriangular(price=vPrice1[-displace1], length=length1, displace=displace1);
              } else {
                if selectAvg1 == selectAvg1.VolWeightedMA {
                  avg1 = Sum(data=(volume * vPrice1[-displace1]), length=length1) / Sum(data=volume[-displace1], length=length1);
                } else {
                  avg1 = nan;
              }}}}}}}}

if selectAvg2 == selectAvg2.ExponentialMA {
  avg2 = MovAvgExponential(price=vPrice2, length=length2, displace=displace2);
} else {
  if selectAvg2 == selectAvg2.SimpleMA {
    avg2 = SimpleMovingAvg(price=vPrice2, length=length2, displace=displace2);
  } else {
    if selectAvg2 == selectAvg2.HullMA {
        avg2 = HullMovingAvg(price=vPrice2, length=length2, displace=displace2);
      } else {
        if selectAvg2 == selectAvg2.WeightedMA {
          avg2 = MovAvgWeighted(price=vPrice2, length=length2, displace=displace2);
        } else {
          if selectAvg2 == selectAvg2.WildersMA {
            avg2 = WildersAverage(data=vPrice2[-displace2], length=length2);
          } else {
            if selectAvg2 == selectAvg2.TriangularMA {
              avg2 = MovAvgTriangular(price=vPrice2[-displace2], length=length2, displace=displace2);
            } else {
              if selectAvg2 == selectAvg2.VolWeightedMA {
                avg2 = Sum(data=(volume * vPrice2[-displace2]), length=length2) / Sum(data=volume[-displace2], length=length2);
              } else {
                avg2 = nan;
              }}}}}}}

if selectAvg3 == selectAvg3.ExponentialMA {
  avg3 = MovAvgExponential(price=vPrice3, length=length3, displace=displace3);
} else {
  if selectAvg3 == selectAvg3.SimpleMA {
    avg3 = SimpleMovingAvg(price=vPrice3, length=length3, displace=displace3);
  } else {
    if selectAvg3 == selectAvg3.HullMA {
        avg3 = HullMovingAvg(price=vPrice3, length=length3, displace=displace3);
      } else {
        if selectAvg3 == selectAvg3.WeightedMA {
          avg3 = MovAvgWeighted(price=vPrice3, length=length3, displace=displace3);
        } else {
          if selectAvg3 == selectAvg3.WildersMA {
            avg3 = WildersAverage(data=vPrice3[-displace3], length=length3);
          } else {
            if selectAvg3 == selectAvg3.TriangularMA {
              avg3 = MovAvgTriangular(price=vPrice3[-displace3], length=length3, displace=displace3);
            } else {
              if selectAvg3 == selectAvg3.VolWeightedMA {
                avg3 = Sum(data=(volume * vPrice3[-displace3]), length=length3) / Sum(data=volume[-displace3], length=length3);
              } else {
                avg3 = nan;
              }}}}}}}

if selectAvg4 == selectAvg4.ExponentialMA {
  avg4 = MovAvgExponential(price=vPrice4, length=length4, displace=displace4);
} else {
  if selectAvg4 == selectAvg4.SimpleMA {
    avg4 = SimpleMovingAvg(price=vPrice4, length=length4, displace=displace4);
  } else {
    if selectAvg4 == selectAvg4.HullMA {
        avg4 = HullMovingAvg(price=vPrice4, length=length4, displace=displace4);
      } else {
        if selectAvg4 == selectAvg4.WeightedMA {
          avg4 = MovAvgWeighted(price=vPrice4, length=length4, displace=displace4);
        } else {
          if selectAvg4 == selectAvg4.WildersMA {
            avg4 = WildersAverage(data=vPrice4[-displace4], length=length4);
          } else {
            if selectAvg4 == selectAvg4.TriangularMA {
              avg4 = MovAvgTriangular(price=vPrice4[-displace4], length=length4, displace=displace4);
            } else {
              if selectAvg4 == selectAvg4.VolWeightedMA {
                avg4 = Sum(data=(volume * vPrice4[-displace4]), length=length4) / Sum(data=volume[-displace4], length=length4);
              } else {
                avg4 = nan;
              }}}}}}}

#==END====================
 
Last edited:

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