Moving Average Master Strategy for ThinkOrSwim

Made a quick change to the new strategy. Added the "Trading Paper" switch for those using Marco Recorder. Make sure Marco Recorder waits the same amount of time as the chart timeframe after taking a trade.

See post one for the ASAP code.
 
Last edited:

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

I'm beta testing this new strategy if you would like to join me. If there is enough interest, I'll start a new thread.

Ruby:
# Author Dwain Pattillo - 2023

# Q. Why do I share my strategies?
# A. It would be completely and totally silly of me (and you!) to keep them to myself. Who remembers what happen with GameStop? The more people doing the exact same thing at the same time in the market, the more power they have in moving the market in their favor! If we had an army of traders using the same system, oh what power we would have! We (the retail trader) could take the power back from the market makers!

# 1. Adjust the length setting to the best FloatingPL and then let'r rip!

# In most cases, the lower the timeframe of the chart, the lower the length will be .. I trade one minute and a good starting length is 4.
# If you are auto trading 24/5 on the futures or forex, I would suggest turning on the volume filter and optimizing it, otherwise leave it off.
# Don't stop adjusting the length just because the P/L goes down! It's almost like you are tuning the strategy to the Elliot waves of the market.

input BackTestTradeSize = 1;
input ShowBackTestPositions = yes;
input Length = 4;
input UseVolumeAsFilter = no;
input VolumeLength = 600;
input AlertOnSignal = no;

#Average the volume and only open trades when volume is higher than the average.
def VolStrength = lg(volume[1]) - lg(SimpleMovingAvg(volume[1], VolumeLength));

#Add your indicator code here (if you want to use this as a template) :) 
def min_low = Lowest(low, Length+1);
def max_high = Highest(high, Length+1);
def rel_diff = close - (max_high + min_low) / 2;
def range = max_high - min_low;
def avgrel = ExpAverage(ExpAverage(rel_diff, Length), Length);
def avgdiff = ExpAverage(ExpAverage(range, Length), Length);
def SMI = if avgdiff != 0 then avgrel / (avgdiff / 2) * 100 else 0;

#Define the signals
def BuyToOpenSignal   =  SMI > SMI[1] and (if UseVolumeAsFilter then VolStrength>0 else yes);
def SellToCloseSignal = ( SMI < SMI[1] );
def SellToOpenSignal  = SMI < SMI[1]  and (if UseVolumeAsFilter then VolStrength>0 else yes);
def BuyToCloseSignal  = ( SMI > SMI[1] );

#Open the orders on the chart for back testing and optimizing the setting
AddOrder(OrderType.BUY_AUTO, BuyToOpenSignal and ShowBackTestPositions, open[-1], BackTestTradeSize, Color.CYAN, Color.CYAN, "");
AddOrder(OrderType.SELL_AUTO, SellToOpenSignal and ShowBackTestPositions, open[-1], BackTestTradeSize, Color.RED, Color.RED,"");

#Add the signal labels to the chart
def OpenOrders = GetQuantity();
AddLabel(BuyToOpenSignal[1]  and OpenOrders < 1 ,  "     BUY      ", CreateColor(153, 255, 153));
AddLabel(SellToOpenSignal[1]  and OpenOrders > -1, "     SELL     ", CreateColor(255, 102, 102));

#Sound the bell. (If alerts are turn on)
Alert(BuyToOpenSignal[1]  and OpenOrders < 1 and AlertOnSignal, "Buy Open Signal", Alert.Bar, Sound.Ding);
Alert(SellToOpenSignal[1]  and OpenOrders > -1 and AlertOnSignal, "Sell Open Signal", Alert.Bar, Sound.Ding);

#“Make everything as simple as possible, but not simpler.” Albert Einstein.
I will give it a go as well.
 
I will give it a go as well. BTW, the first post script isn't working correctly. The Trend Length isn't plotting. like the older version. I do have the Show Plot checked under Plots/MA. I have made many changes and tests and it isn't showing up.
I fixed the first post ..

The change was this:

input TrendPrice = CLOSE;
 
I'm beta testing this new strategy if you would like to join me. If there is enough interest, I'll start a new thread.

Ruby:
# Author Dwain Pattillo - 2023

# Q. Why do I share my strategies?
# A. It would be completely and totally silly of me (and you!) to keep them to myself. Who remembers what happen with GameStop? The more people doing the exact same thing at the same time in the market, the more power they have in moving the market in their favor! If we had an army of traders using the same system, oh what power we would have! We (the retail trader) could take the power back from the market makers!

# 1. Adjust the length setting to the best FloatingPL and then let'r rip!

# In most cases, the lower the timeframe of the chart, the lower the length will be .. I trade one minute and a good starting length is 4.
# If you are auto trading 24/5 on the futures or forex, I would suggest turning on the volume filter and optimizing it, otherwise leave it off.
# Don't stop adjusting the length just because the P/L goes down! It's almost like you are tuning the strategy to the Elliot waves of the market.

input BackTestTradeSize = 1;
input ShowBackTestPositions = yes;
input Length = 4;
input UseVolumeAsFilter = no;
input VolumeLength = 600;
input AlertOnSignal = no;

#Average the volume and only open trades when volume is higher than the average.
def VolStrength = lg(volume[1]) - lg(SimpleMovingAvg(volume[1], VolumeLength));

#Add your indicator code here (if you want to use this as a template) :)  
def min_low = Lowest(low, Length+1);
def max_high = Highest(high, Length+1);
def rel_diff = close - (max_high + min_low) / 2;
def range = max_high - min_low;
def avgrel = ExpAverage(ExpAverage(rel_diff, Length), Length);
def avgdiff = ExpAverage(ExpAverage(range, Length), Length);
def SMI = if avgdiff != 0 then avgrel / (avgdiff / 2) * 100 else 0;

#Define the signals
def BuyToOpenSignal   =  SMI > SMI[1] and (if UseVolumeAsFilter then VolStrength>0 else yes);
def SellToCloseSignal = ( SMI < SMI[1] );
def SellToOpenSignal  = SMI < SMI[1]  and (if UseVolumeAsFilter then VolStrength>0 else yes);
def BuyToCloseSignal  = ( SMI > SMI[1] );

#Open the orders on the chart for back testing and optimizing the setting
AddOrder(OrderType.BUY_AUTO, BuyToOpenSignal and ShowBackTestPositions, open[-1], BackTestTradeSize, Color.CYAN, Color.CYAN, "");
AddOrder(OrderType.SELL_AUTO, SellToOpenSignal and ShowBackTestPositions, open[-1], BackTestTradeSize, Color.RED, Color.RED,"");

#Add the signal labels to the chart
def OpenOrders = GetQuantity();
AddLabel(BuyToOpenSignal[1]  and OpenOrders < 1 ,  "     BUY      ", CreateColor(153, 255, 153));
AddLabel(SellToOpenSignal[1]  and OpenOrders > -1, "     SELL     ", CreateColor(255, 102, 102));

#Sound the bell. (If alerts are turn on)
Alert(BuyToOpenSignal[1]  and OpenOrders < 1 and AlertOnSignal, "Buy Open Signal", Alert.Bar, Sound.Ding);
Alert(SellToOpenSignal[1]  and OpenOrders > -1 and AlertOnSignal, "Sell Open Signal", Alert.Bar, Sound.Ding);

#“Make everything as simple as possible, but not simpler.” Albert Einstein.
Looking forward to testing, thanks!!
 
Did a quick optimization of the new ASAP code length parameter for SPY in pre-market today (1/12) for various timeframes:
1 day L=12
30m 20
15m 8
10m 17
5m 13
3m 51
1m 18

Not sure what was up with the 3 minute. On most of them, I only ran up to about L=36 and picked the best. On the 3 minute chart, nothing in that range looked good, so I kept going. Don't know if the others would have gotten good results up in the higher range, too.

Also, I like to be able to see what an indicator actually looks like, so I pulled out the SMI part of the ASAP code and created a lower indicator so I could see it. Here's my chart setup for that: http://tos.mx/SWtnDkA

(Probably a good idea to spin off a new thread for the ASAP discussions)

Edit: I should point out that I did the above optimization using the maximum amount of data that ToS would show at each timeframe (e.g., 180 days for 5 min chart). After reducing the number of days shown on my chart, I realized that it pretty drastically changed the answer for the best length. As an example, I changed to a 2d/5m chart and had to change the ASAP length parameter to 39. Guess that reflects the changing nature of the market - the values above give a good long term result, but the near term market may need different lengths to get the best results.
 
Last edited:
Did a quick optimization of the new ASAP code length parameter for SPY in pre-market today (1/12) for various timeframes:
1 day L=12
30m 20
15m 8
10m 17
5m 13
3m 51
1m 18

Not sure what was up with the 3 minute. On most of them, I only ran up to about L=36 and picked the best. On the 3 minute chart, nothing in that range looked good, so I kept going. Don't know if the others would have gotten good results up in the higher range, too.

Also, I like to be able to see what an indicator actually looks like, so I pulled out the SMI part of the ASAP code and created a lower indicator so I could see it. Here's my chart setup for that: http://tos.mx/SWtnDkA

(Probably a good idea to spin off a new thread for the ASAP discussions)

Edit: I should point out that I did the above optimization using the maximum amount of data that ToS would show at each timeframe (e.g., 180 days for 5 min chart). After reducing the number of days shown on my chart, I realized that it pretty drastically changed the answer for the best length. As an example, I changed to a 2d/5m chart and had to change the ASAP length parameter to 39. Guess that reflects the changing nature of the market - the values above give a good long term result, but the near term market may need different lengths to get the best results.

@Zetta_wow .. Great analysis! Thank you for your interest! Yes, a larger data set will give you the set-and-forget settings. I like to set mine to 1D-1Min so that I'm optimizing on the most recent market moves. Also, when running thru the optimization, look for a setting that has "protection" on either side of the length. In other words, you don't want to see a drastic change in the P/L when you move the length one up or one down.
 
Did a quick optimization of the new ASAP code length parameter for SPY in pre-market today (1/12) for various timeframes:
1 day L=12
30m 20
15m 8
10m 17
5m 13
3m 51
1m 18

Not sure what was up with the 3 minute. On most of them, I only ran up to about L=36 and picked the best. On the 3 minute chart, nothing in that range looked good, so I kept going. Don't know if the others would have gotten good results up in the higher range, too.

Also, I like to be able to see what an indicator actually looks like, so I pulled out the SMI part of the ASAP code and created a lower indicator so I could see it. Here's my chart setup for that: http://tos.mx/SWtnDkA

(Probably a good idea to spin off a new thread for the ASAP discussions)

Edit: I should point out that I did the above optimization using the maximum amount of data that ToS would show at each timeframe (e.g., 180 days for 5 min chart). After reducing the number of days shown on my chart, I realized that it pretty drastically changed the answer for the best length. As an example, I changed to a 2d/5m chart and had to change the ASAP length parameter to 39. Guess that reflects the changing nature of the market - the values above give a good long-term result, but the near-term market may need different lengths to get the best results.
@Zetta_wow did you manually walk through the optimization for each time or is there some kind of strategy input parameter optimization function somewhere? If not, I was thinking it might be possible to use Macro Recorder to automate changing the length input and time and copying the P/L to a spreadsheet. First post, been lurking for a while.
 
@Zetta_wow did you manually walk through the optimization for each time or is there some kind of strategy input parameter optimization function somewhere? If not, I was thinking it might be possible to use Macro Recorder to automate changing the length input and time and copying the P/L to a spreadsheet. First post, been lurking for a while.
Just manually changing the length and watching the FloatPL results. Tedious, but it's what's available in ToS. I do have a spreadsheet with VBA functions that I've built for similar optimizations of other trading systems, but I haven't implemented this one yet. It's fairly slow, so I wouldn't want to use it intraday, but it would be fine for pre-market setup each day. I'm also working on a VB.NET version of the spreadsheet, hoping it will be faster.
 
Just manually changing the length and watching the FloatPL results. Tedious, but it's what's available in ToS. I do have a spreadsheet with VBA functions that I've built for similar optimizations of other trading systems, but I haven't implemented this one yet. It's fairly slow, so I wouldn't want to use it intraday, but it would be fine for pre-market setup each day. I'm also working on a VB.NET version of the spreadsheet, hoping it will be faster.
Care to expand on using VB to optimize settings for a strategy/study?

Are you using a function that determines all possible combinations of given variables or something of that nature?
 
Very nice work here!! I can't find time frame or smoothing on the inputs and options. Help wanted.



Thanks,

Bill
 
@dap711 - this is some killer work sir ! Thank you kindly for sharing :)

Been back testing it a bit over the weekend on solely SPY. Time frames include 1 to 30 days, with countless variations to find some consistency and P/L optimization. (also looked for minimum DD)

So far in my back test I've found the below to be most fruitful for anyone trading SPY. Ideal time frame is 3 min.

https://prnt.sc/ka0d4rL8_1YH

Added:
https://usethinkscript.com/threads/...acktesting-data-utility-for-thinkorswim.1624/
trade count and P/L ratio to backtest as well via code from another study. (far from coder unfortunately) Attached below if anyone wants to add it to theirs.

Keep up the great work and please do share if you continue to advance the study. Macro Reader is next on the learning docket.

All the best

_______________________________________
# https://usethinkscript.com/threads/...acktesting-data-utility-for-thinkorswim.1624/
#Globals
def nan = Double.NaN;
def bn = if !IsNaN(open) and !IsNaN(open[1]) and !IsNaN(open[-1]) then BarNumber() else bn[1];


#Inputs
input fplTargetWinLoss = .50;
#hint fplTargetWinLoss: sets the target winlossRatio (in percent) which determines display colors of the W/L label.


input fplTargetWinRate = 1;
#hint fplTargetWinRate: sets the target winRate (float) which determines display colors of the WinRate label;


input fplHidePrice = no;
#hint fplHidePrice: hide's the underlying price graph. \nDefault is no.


input fplHideFPL = yes;
#hint fplHideFPL: hide's the underlying P&L graph.\nDefault is yes.


#temp input var references
def targetWinLoss = fplTargetWinLoss;
def targetWinRate = fplTargetWinRate;
def hidePrice = fplHidePrice;
def hideFPL = fplHideFPL;


#hide chart candles
HidePricePlot(hidePrice);


#Plot default Floating P&L
plot FPL = FPL();
FPL.SetPaintingStrategy(PaintingStrategy.SQUARED_HISTOGRAM);
FPL.DefineColor("Positive and Up", Color.GREEN);
FPL.DefineColor("Positive and Down", Color.DARK_GREEN);
FPL.DefineColor("Negative and Down", Color.RED);
FPL.DefineColor("Negative and Up", Color.DARK_RED);
FPL.AssignValueColor(if FPL >= 0
then if FPL > FPL[1]
then FPL.Color("Positive and Up")
else FPL.Color("Positive and Down")
else if FPL < FPL[1]
then FPL.Color("Negative and Down")
else FPL.Color("Negative and Up"));
FPL.SetHiding(hideFPL);


plot ZeroLine = if IsNaN(close)
then nan
else 0;
ZeroLine.SetDefaultColor(Color.GRAY);
ZeroLine.SetHiding(hideFPL);


#Global Scripts
script incrementValue {
input condition = yes;
input increment = 1;
input startingValue = 0;


def _value = CompoundValue(1,
if condition
then _value[1] + increment
else _value[1], startingValue);


plot incrementValue = _value;
}
;


# Entry Calculations. Note: Only parses on a Strategy Chart
def entry = EntryPrice();


def entryPrice = if !IsNaN(entry)
then entry
else entryPrice[1];


def hasEntry = !IsNaN(entry);


def isNewEntry = entryPrice != entryPrice[1];


#is active trade
def highFPL = HighestAll(FPL);
def lowFPL = LowestAll(FPL);


def fplreturn = (FPL - FPL[1]) / FPL[1];
def cumsum = Sum(fplreturn);


def highBarNumber = CompoundValue(1, if FPL == highFPL
then bn
else highBarNumber[1], 0);


def lowBarNumber = CompoundValue(1, if FPL == lowFPL
then bn
else lowBarNumber[1], 0);


#Win/Loss ratios
def entryBarsTemp = if hasEntry
then bn
else nan;


def entryBarNum = if hasEntry and isNewEntry
then bn
else entryBarNum[1];


def isEntryBar = entryBarNum != entryBarNum[1];


def entryBarPL = if isEntryBar
then FPL
else entryBarPL[1];


def exitBarsTemp = if !hasEntry
and bn > entryBarsTemp[1]
then bn
else nan;


def exitBarNum = if !hasEntry and !IsNaN(exitBarsTemp[1])
then bn
else exitBarNum[1];


def isExitBar = exitBarNum != exitBarNum[1];


def exitBarPL = if isExitBar
then FPL
else exitBarPL[1];


def entryReturn = if isExitBar then exitBarPL - exitBarPL[1] else entryReturn[1];
def isWin = if isExitBar and entryReturn >= 0 then 1 else 0;
def isLoss = if isExitBar and entryReturn < 0 then 1 else 0;
def entryReturnWin = if isWin then entryReturn else entryReturnWin[1];
def entryReturnLoss = if isLoss then entryReturn else entryReturnLoss[1];
def entryFPLWins = if isWin then entryReturn else 0;
def entryFPLLosses = if isLoss then entryReturn else 0;
def entryFPLAll = if isLoss or isWin then entryReturn else 0;


#Counts
def entryCount = incrementValue(entryFPLAll);
def winCount = incrementValue(isWin);
def lossCount = incrementValue(isLoss);


def highestReturn = if entryReturnWin[1] > highestReturn[1]
then entryReturnWin[1]
else highestReturn[1];


def lowestReturn = if entryReturnLoss[1] < lowestReturn[1]
then entryReturnLoss[1]
else lowestReturn[1];




def winRate = winCount / lossCount;
def winLossRatio = winCount / entryCount;
def avgReturn = TotalSum(entryFPLAll) / entryCount;
def avgWin = TotalSum(entryFPLWins) / winCount;
def avgLoss = TotalSum(entryFPLLosses) / lossCount;



#Labels


AddLabel(yes,
text = "Total Trades: " + entryCount,
color = Color.WHITE
);


AddLabel(yes,
text = "WinCount: " + winCount +
" | LossCount: " + lossCount +
" | WinRate: " + winRate,
color = if winRate >= targetWinRate
then Color.CYAN
else Color.MAGENTA
);


AddLabel(yes,
text = "W/L: " + AsPercent(winLossRatio),
color = if winLossRatio > targetWinLoss
then Color.CYAN
else Color.MAGENTA
);


AddLabel(yes,
text = "AvgReturn: " + AsDollars(avgReturn) +
" | AvgWin: " + AsDollars(avgWin) +
" | AvgLoss: " + AsDollars(avgLoss),
color = if avgReturn >= 0
then Color.CYAN
else Color.MAGENTA
);


AddLabel(yes,
text = "Total Profit: " + AsDollars(FPL),
color = if FPL > 0
then Color.CYAN
else Color.MAGENTA
);
 
Last edited by a moderator:
@dap711 Have you tried just a simple Hull Moving average strategy. I do not think this repaint. Would you consider implementing one with just Hull with length options etc.. It seems that buying when line turns blue and selling when it turns pink is extremely effective.
 
@dap711 Have you tried just a simple Hull Moving average strategy. I do not think this repaint. Would you consider implementing one with just Hull with length options etc.. It seems that buying when line turns blue and selling when it turns pink is extremely effective.
@METAL If you weren’t thinkin you wouldn’t-a’ thought that.
 
@dap711 Have you tried just a simple Hull Moving average strategy. I do not think this repaint. Would you consider implementing one with just Hull with length options etc.. It seems that buying when line turns blue and selling when it turns pink is extremely effective.
Eazy-Peezy:

Ruby:
declare upper;
input HMA_Length = 2;
input HMA_Displace = 2;
input ShowBackTestPositions = yes;
input BackTestTradeSize = 1;
input StartTrading = 0927;
input StopTrading = 1457;

def OkToTrade = secondsFromTime(StartTrading) > 0 and secondsFromTime(StopTrading)<0;
def HMA = HullMovingAvg(price = close, length = HMA_Length);
def BuyToOpenSignal=   HMA > HMA[HMA_Displace];
def SellToOpenSignal=  HMA < HMA[HMA_Displace];

AddOrder(OrderType.BUY_AUTO, BuyToOpenSignal and ShowBackTestPositions and OkToTrade,   open[-1], BackTestTradeSize, Color.CYAN, Color.CYAN, "");
AddOrder(OrderType.SELL_AUTO, SellToOpenSignal and ShowBackTestPositions and OkToTrade,  open[-1], BackTestTradeSize, Color.RED, Color.RED,"");
AddOrder(OrderType.SELL_TO_CLOSE, secondsFromTime(StopTrading)> 0 and ShowBackTestPositions, open[-1], BackTestTradeSize, Color.CYAN, Color.CYAN, "");
AddOrder(OrderType.BUY_TO_CLOSE, secondsFromTime(StopTrading)> 0 and ShowBackTestPositions,  open[-1], BackTestTradeSize, Color.RED, Color.RED,"");

def OpenOrders = GetQuantity();
AddLabel(yes, "     BUY      ", if BuyToOpenSignal[1]  and OpenOrders < 1 and OkToTrade then CreateColor(153, 255, 153) else Color.White);
AddLabel(yes, "     SELL     ", if SellToOpenSignal[1]  and OpenOrders > -1 and OkToTrade then CreateColor(255, 102, 102) else Color.White);
AddLabel(yes, "     CLOSE     ", if  secondsFromTime(StopTrading)> 0 and OpenOrders != 0  then  Color.Yellow else Color.White);
 
Eazy-Peezy:

Ruby:
declare upper;
input HMA_Length = 2;
input HMA_Displace = 2;
input ShowBackTestPositions = yes;
input BackTestTradeSize = 1;
input StartTrading = 0927;
input StopTrading = 1457;

def OkToTrade = secondsFromTime(StartTrading) > 0 and secondsFromTime(StopTrading)<0;
def HMA = HullMovingAvg(price = close, length = HMA_Length);
def BuyToOpenSignal=   HMA > HMA[HMA_Displace];
def SellToOpenSignal=  HMA < HMA[HMA_Displace];

AddOrder(OrderType.BUY_AUTO, BuyToOpenSignal and ShowBackTestPositions and OkToTrade,   open[-1], BackTestTradeSize, Color.CYAN, Color.CYAN, "");
AddOrder(OrderType.SELL_AUTO, SellToOpenSignal and ShowBackTestPositions and OkToTrade,  open[-1], BackTestTradeSize, Color.RED, Color.RED,"");
AddOrder(OrderType.SELL_TO_CLOSE, secondsFromTime(StopTrading)> 0 and ShowBackTestPositions, open[-1], BackTestTradeSize, Color.CYAN, Color.CYAN, "");
AddOrder(OrderType.BUY_TO_CLOSE, secondsFromTime(StopTrading)> 0 and ShowBackTestPositions,  open[-1], BackTestTradeSize, Color.RED, Color.RED,"");

def OpenOrders = GetQuantity();
AddLabel(yes, "     BUY      ", if BuyToOpenSignal[1]  and OpenOrders < 1 and OkToTrade then CreateColor(153, 255, 153) else Color.White);
AddLabel(yes, "     SELL     ", if SellToOpenSignal[1]  and OpenOrders > -1 and OkToTrade then CreateColor(255, 102, 102) else Color.White);
AddLabel(yes, "     CLOSE     ", if  secondsFromTime(StopTrading)> 0 and OpenOrders != 0  then  Color.Yellow else Color.White);
Great forum!
I suggest adding conditions to avoid trading during consolidation (e.g, squeeze).
This should improve the winning rate.
 
Awesome. Thanks. Only issue I get is that the close signal isn't working. I assume we need a close at displace and the a new buy/sell signal to fire on the next candle. There must be a way to trigger the close but then also take advantage of the next move. Maybe adding another Hull average that can be used as a close trigger. I tested this using two different Hull MAs. Looks Like it may be doable. Would be nice to have the option to change both the "Hull to Close" and the "Hull to buy/sell" Lengths so we can use on different TFs etc. What are your thoughts?
Also, Can the time to trade just be removed or at least disabled. Not sure how important this is.
 
Last edited by a moderator:

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

87k+ Posts
420 Online
Create Post

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