Repaints ZigZag, ATR, Moving Average For ThinkOrSwim

Repaints

irishgold

Active member
Have not seen this Strategy script on the site, it was posted on United Traders Discord as a TOS link. I have been looking for a non-repainting strategy and so far it seems to be working. http://tos.mx/bh2x4F called the MoneyMaker, it is basically EMA crossovers. there are some interesting AddOrder statements that I think make the code profitable and non repaint. They may also may make the results less than real. I was experimenting with NQ on 5 min, last 20 day, over 60K in the backtest. As I said in real life you probably wont get the fills it has. But many people are looking for non-repaint script. You can ignore the first section which is a zigzag reference, because it is not actually part of the strategy. I'm posting it as it is written in the link, there are no listed contributors. Try it out and give your opinions.
Code:
#ZigZag
def price = close;
input ReversalAmount = 0.1;
def "ZZ$" = reference ZigZagHighLow(price, price, 0, ReversalAmount, 1, 0);
def zzSave = if !IsNaN("ZZ$") then price else GetValue(zzSave, 1);
def chg = price - GetValue(zzSave, 1);
def Up = if !IsNaN("ZZ$") and chg > 0 then chg else no;
def CountUp =  if Up then 1 else 0;
def CountUpN = Sum(CountUp, 1950);
def CountUpTotal =  if Up then chg else 0;
def CountUpTotalN = Sum(CountUpTotal, 1950);
def UpAverage = CountUpTotalN / CountUpN;
def Down = if !IsNaN("ZZ$") and chg < 0 then chg else no;
def CountDown =  if Down then 1 else 0;
def CountDownN = Sum(CountDown, 1950);
def CountDownTotal =  if Down then chg else 0;
def CountDownTotalN = Sum(CountDownTotal, 1950);
def DownAverage = CountDownTotalN / CountDownN;

#ATR
def ATRlength = 14;
def averageType = AverageType.WILDERS;
def averageType2 = AverageType.EXPONENTIAL;

def ATR = MovingAverage(averageType, TrueRange(high, close, low), ATRlength);
def AVGATR = MovingAverage(averageType2, ATR, 50);
def UpAverage2 = AVGATR;
def DownAverage2 = (AVGATR*-1);

#Movavgs
plot E5 = MovAvgExponential(close, 5);
E5.SetDefaultColor(Color.GREEN);
plot E10 = MovAvgExponential(close, 10);
E10.SetDefaultColor(Color.YELLOW);
plot E20 = MovAvgExponential(close, 20);
E20.SetDefaultColor(Color.RED);

#TradeSize
input tradesize = 1000;

#Risk/Loss
Input RiskRatio = 2;

#Timeframe
def time = SecondsFromTime(0930) >= 0 and SecondsTillTime(1600) > 0;

#Crosses
def CloseCrossLong = Crosses(Close, E20, CrossingDirection.ABOVE);
def CloseCrossShort = Crosses(Close, E20, CrossingDirection.BELOW);
def HighCross = Crosses(High, E20, CrossingDirection.ABOVE) or High equals E20;
def LowCross = Crosses(Low, E20, CrossingDirection.BELOW) or Low equals E20;

def POS = if E5 > E10 then no else yes;
def NEG = if E5 < E10 then no else yes;

def HighOpen = if HighCross then yes else no;
def LowOpen = if LowCross then yes else no;
def LongOpen = if CloseCrossLong then yes else no;
def ShortOpen = if CloseCrossShort then yes else no;

#--------------------------------------------------------------------------------------------------------------------

AddOrder(OrderType.BUY_TO_OPEN, 
if (HighOpen and NEG) or (LowOpen and E5 > E10 and E10 > E20) or (LongOpen and NEG) then yes else no, 
if (HighOpen and NEG) or (LowOpen and E5 > E10 and E10 > E20) then E20 else OPEN[-1], tradesize, tickcolor = Color.GREEN, arrowcolor = Color.GREEN);

AddOrder(OrderType.SELL_TO_CLOSE, if (high >= (EntryPrice() + RoundDown(UpAverage2))) within 5 bars and Crosses(close, E10, CrossingDirection.BELOW) then yes else no, OPEN[-1], tradesize, tickcolor = Color.RED, arrowcolor = Color.RED);

AddOrder(OrderType.SELL_TO_CLOSE, if (low <= (EntryPrice() - RoundUp(UpAverage2/RiskRatio))) then yes else no, (EntryPrice() - RoundUp(UpAverage2/RiskRatio)), tradesize, tickcolor = Color.RED, arrowcolor = Color.RED);

Def Stop = RoundUp(UpAverage2 / -RiskRatio);
AddLabel(1, "LONG: " + Long, Color.LIGHT_GREEN);
AddLabel(1, "STOP: " + Stop, Color.LIGHT_GREEN);

AddOrder(OrderType.SELL_TO_OPEN, 
if (LowOpen and POS) or (HighOpen and E5 < E10 and E10 < E20) or (ShortOpen and POS) then yes else no, 
if (LowOpen and POS) or (HighOpen and E5 < E10 and E10 < E20) then E20 else OPEN[-1], tradesize, tickcolor = Color.MAGENTA, arrowcolor = Color.MAGENTA);

AddOrder(OrderType.BUY_TO_CLOSE, if (low <= (EntryPrice() + RoundDown(DownAverage2))) within 5 bars and Crosses(close, E10, CrossingDirection.ABOVE) then yes else no, OPEN[-1], tradesize, tickcolor = Color.CYAN, arrowcolor = Color.CYAN);

AddOrder(OrderType.BUY_TO_CLOSE, if (high >= (EntryPrice() - RoundUp(DownAverage2/RiskRatio))) then yes else no, (EntryPrice() - RoundUp(DownAverage2/RiskRatio)), tradesize, tickcolor = Color.CYAN, arrowcolor = Color.CYAN);

Def Short = RoundDown(DownAverage2);
Def Cover = RoundUp(DownAverage2 / -RiskRatio);
AddLabel(1, "SHORT: " + Short, Color.LIGHT_RED);
AddLabel(1, "COVER: " + Cover, Color.LIGHT_RED);
 
Last edited by a moderator:
Here is the code with zigzag removed and added separate trade long and short switches, removed labels

Code:
# MoneyMaker V2
# irishgold compiled
##Removed ZigZagHighLow code and some labels
## added TradeLong/ TradeShort / set Tradesize = 1

input TradeLong =yes;
input TradeShort = yes;
#TradeSize
input tradesize = 1;
#Risk/Loss
Input RiskRatio = 2;

#ATR
def ATRlength = 14;
def averageType = AverageType.WILDERS;
def averageType2 = AverageType.EXPONENTIAL;

def ATR = MovingAverage(averageType, TrueRange(high, close, low), ATRlength);
def AVGATR = MovingAverage(averageType2, ATR, 50);
def UpAverage2 = AVGATR;
def DownAverage2 = (AVGATR*-1);

#Movavgs
plot E5 = MovAvgExponential(close, 5);
E5.SetDefaultColor(Color.GREEN);
plot E10 = MovAvgExponential(close, 10);
E10.SetDefaultColor(Color.YELLOW);
plot E20 = MovAvgExponential(close, 20);
E20.SetDefaultColor(Color.RED);


#Crosses
def CloseCrossLong = Crosses(Close, E20, CrossingDirection.ABOVE);
def CloseCrossShort = Crosses(Close, E20, CrossingDirection.BELOW);
def HighCross = Crosses(High, E20, CrossingDirection.ABOVE) or High equals E20;
def LowCross = Crosses(Low, E20, CrossingDirection.BELOW) or Low equals E20;

def POS = if E5 > E10 then no else yes;
def NEG = if E5 < E10 then no else yes;

def HighOpen = if HighCross then yes else no;
def LowOpen = if LowCross then yes else no;
def LongOpen = if CloseCrossLong then yes else no;
def ShortOpen = if CloseCrossShort then yes else no;
#---------------------

#--------------------------------------------------------------------------------------------------------------------

AddOrder(OrderType.BUY_TO_OPEN, 
if ((HighOpen and NEG) or (LowOpen and E5 > E10 and E10 > E20) or (LongOpen and NEG)) and TradeLong then yes else no, 
if (HighOpen and NEG) or (LowOpen and E5 > E10 and E10 > E20) then E20 else OPEN[-1] , tradesize, tickcolor = Color.GREEN, arrowcolor = Color.GREEN);

AddOrder(OrderType.SELL_TO_CLOSE, if (high >= (EntryPrice() + RoundDown(UpAverage2))) within 5 bars and Crosses(close, E10, CrossingDirection.BELOW) then yes else no, OPEN[-1], tradesize, tickcolor = Color.RED, arrowcolor = Color.RED);

AddOrder(OrderType.SELL_TO_CLOSE, if (low <= (EntryPrice() - RoundUp(UpAverage2/RiskRatio))) then yes else no, (EntryPrice() - RoundUp(UpAverage2/RiskRatio)), tradesize, tickcolor = Color.RED, arrowcolor = Color.RED);

AddOrder(OrderType.SELL_TO_OPEN, 
if ((LowOpen and POS) or (HighOpen and E5 < E10 and E10 < E20) or (ShortOpen and POS)) and TradeShort  then yes else no, 
if (LowOpen and POS) or (HighOpen and E5 < E10 and E10 < E20) then E20 else OPEN[-1] , tradesize, tickcolor = Color.MAGENTA, arrowcolor = Color.MAGENTA);

AddOrder(OrderType.BUY_TO_CLOSE, if (low <= (EntryPrice() + RoundDown(DownAverage2))) within 5 bars and Crosses(close, E10, CrossingDirection.ABOVE) then yes else no, OPEN[-1], tradesize, tickcolor = Color.CYAN, arrowcolor = Color.CYAN);

AddOrder(OrderType.BUY_TO_CLOSE, if (high >= (EntryPrice() - RoundUp(DownAverage2/RiskRatio))) then yes else no, (EntryPrice() - RoundUp(DownAverage2/RiskRatio)), tradesize, tickcolor = Color.CYAN, arrowcolor = Color.CYAN);
 
Last edited by a moderator:
Here is the code with zigzag removed and added separate trade long and short switches, removed labels

Code:
# MoneyMaker V2
# irishgold compiled
##Removed ZigZagHighLow code and some labels
## added TradeLong/ TradeShort / set Tradesize = 1

input TradeLong =yes;
input TradeShort = yes;
#TradeSize
input tradesize = 1;
#Risk/Loss
Input RiskRatio = 2;

#ATR
def ATRlength = 14;
def averageType = AverageType.WILDERS;
def averageType2 = AverageType.EXPONENTIAL;

def ATR = MovingAverage(averageType, TrueRange(high, close, low), ATRlength);
def AVGATR = MovingAverage(averageType2, ATR, 50);
def UpAverage2 = AVGATR;
def DownAverage2 = (AVGATR*-1);

#Movavgs
plot E5 = MovAvgExponential(close, 5);
E5.SetDefaultColor(Color.GREEN);
plot E10 = MovAvgExponential(close, 10);
E10.SetDefaultColor(Color.YELLOW);
plot E20 = MovAvgExponential(close, 20);
E20.SetDefaultColor(Color.RED);


#Crosses
def CloseCrossLong = Crosses(Close, E20, CrossingDirection.ABOVE);
def CloseCrossShort = Crosses(Close, E20, CrossingDirection.BELOW);
def HighCross = Crosses(High, E20, CrossingDirection.ABOVE) or High equals E20;
def LowCross = Crosses(Low, E20, CrossingDirection.BELOW) or Low equals E20;

def POS = if E5 > E10 then no else yes;
def NEG = if E5 < E10 then no else yes;

def HighOpen = if HighCross then yes else no;
def LowOpen = if LowCross then yes else no;
def LongOpen = if CloseCrossLong then yes else no;
def ShortOpen = if CloseCrossShort then yes else no;
#---------------------

#--------------------------------------------------------------------------------------------------------------------

AddOrder(OrderType.BUY_TO_OPEN,
if ((HighOpen and NEG) or (LowOpen and E5 > E10 and E10 > E20) or (LongOpen and NEG)) and TradeLong then yes else no,
if (HighOpen and NEG) or (LowOpen and E5 > E10 and E10 > E20) then E20 else OPEN[-1] , tradesize, tickcolor = Color.GREEN, arrowcolor = Color.GREEN);

AddOrder(OrderType.SELL_TO_CLOSE, if (high >= (EntryPrice() + RoundDown(UpAverage2))) within 5 bars and Crosses(close, E10, CrossingDirection.BELOW) then yes else no, OPEN[-1], tradesize, tickcolor = Color.RED, arrowcolor = Color.RED);

AddOrder(OrderType.SELL_TO_CLOSE, if (low <= (EntryPrice() - RoundUp(UpAverage2/RiskRatio))) then yes else no, (EntryPrice() - RoundUp(UpAverage2/RiskRatio)), tradesize, tickcolor = Color.RED, arrowcolor = Color.RED);

AddOrder(OrderType.SELL_TO_OPEN,
if ((LowOpen and POS) or (HighOpen and E5 < E10 and E10 < E20) or (ShortOpen and POS)) and TradeShort  then yes else no,
if (LowOpen and POS) or (HighOpen and E5 < E10 and E10 < E20) then E20 else OPEN[-1] , tradesize, tickcolor = Color.MAGENTA, arrowcolor = Color.MAGENTA);

AddOrder(OrderType.BUY_TO_CLOSE, if (low <= (EntryPrice() + RoundDown(DownAverage2))) within 5 bars and Crosses(close, E10, CrossingDirection.ABOVE) then yes else no, OPEN[-1], tradesize, tickcolor = Color.CYAN, arrowcolor = Color.CYAN);

AddOrder(OrderType.BUY_TO_CLOSE, if (high >= (EntryPrice() - RoundUp(DownAverage2/RiskRatio))) then yes else no, (EntryPrice() - RoundUp(DownAverage2/RiskRatio)), tradesize, tickcolor = Color.CYAN, arrowcolor = Color.CYAN);
How do you run this bot ?
 
so when placing this strategy on the chart it looks like its trying to take the trade where the cross happens even though the price may never be there. Is there a way in the current code to have the entrances of the strategy reflect at the open of the candle instead of the cross because its showing non accurate floating P&L data . Thank you for the input!
 
First and foremost the TOS backtest is severely inaccurate and unreliable.
its a complex addorder computation, if you review the addorder statement, there are multiple possible entry points. if you can give a specific example.
The AddOrder Buy looks at many different scenarios to enter a trade and it enters either at E20 price or the close,
AddOrder(OrderType.BUY_TO_OPEN, if (HighOpen and NEG) or (LowOpen and E5 > E10 and E10 > E20) or (LongOpen and NEG) then yes else no, if (HighOpen and NEG) or (LowOpen and E5 > E10 and E10 > E20) then E20 else close
 
First and foremost the TOS backtest is severely inaccurate and unreliable.
its a complex addorder computation, if you review the addorder statement, there are multiple possible entry points. if you can give a specific example.
The AddOrder Buy looks at many different scenarios to enter a trade and it enters either at E20 price or the close,
AddOrder(OrderType.BUY_TO_OPEN, if (HighOpen and NEG) or (LowOpen and E5 > E10 and E10 > E20) or (LongOpen and NEG) then yes else no, if (HighOpen and NEG) or (LowOpen and E5 > E10 and E10 > E20) then E20 else close
Thank you for the response! So if you look at the ticker MRNA with this code at 10:05 am on 1m chart it looks like as you said its taking the starting spot from the E20. Now early apologies im not too good with coding but where would you take it out so it doesnt take a position at E20 but at the open of the candle. Thank you again!

EDITED TO SAY:
may have figured it out by just taking the E20 out of the buy code portion and making it the close but i would appreciate your feedback as well. Sorry first day on here and cant seem to get a pic to load
 
Last edited by a moderator:
Here is the code with zigzag removed and added separate trade long and short switches, removed labels

Code:
# MoneyMaker V2
# irishgold compiled
##Removed ZigZagHighLow code and some labels
## added TradeLong/ TradeShort / set Tradesize = 1

input TradeLong =yes;
input TradeShort = yes;
#TradeSize
input tradesize = 1;
#Risk/Loss
Input RiskRatio = 2;

#ATR
def ATRlength = 14;
def averageType = AverageType.WILDERS;
def averageType2 = AverageType.EXPONENTIAL;

def ATR = MovingAverage(averageType, TrueRange(high, close, low), ATRlength);
def AVGATR = MovingAverage(averageType2, ATR, 50);
def UpAverage2 = AVGATR;
def DownAverage2 = (AVGATR*-1);

#Movavgs
plot E5 = MovAvgExponential(close, 5);
E5.SetDefaultColor(Color.GREEN);
plot E10 = MovAvgExponential(close, 10);
E10.SetDefaultColor(Color.YELLOW);
plot E20 = MovAvgExponential(close, 20);
E20.SetDefaultColor(Color.RED);


#Crosses
def CloseCrossLong = Crosses(Close, E20, CrossingDirection.ABOVE);
def CloseCrossShort = Crosses(Close, E20, CrossingDirection.BELOW);
def HighCross = Crosses(High, E20, CrossingDirection.ABOVE) or High equals E20;
def LowCross = Crosses(Low, E20, CrossingDirection.BELOW) or Low equals E20;

def POS = if E5 > E10 then no else yes;
def NEG = if E5 < E10 then no else yes;

def HighOpen = if HighCross then yes else no;
def LowOpen = if LowCross then yes else no;
def LongOpen = if CloseCrossLong then yes else no;
def ShortOpen = if CloseCrossShort then yes else no;
#---------------------

#--------------------------------------------------------------------------------------------------------------------

AddOrder(OrderType.BUY_TO_OPEN,
if ((HighOpen and NEG) or (LowOpen and E5 > E10 and E10 > E20) or (LongOpen and NEG)) and TradeLong then yes else no,
if (HighOpen and NEG) or (LowOpen and E5 > E10 and E10 > E20) then E20 else OPEN[-1] , tradesize, tickcolor = Color.GREEN, arrowcolor = Color.GREEN);

AddOrder(OrderType.SELL_TO_CLOSE, if (high >= (EntryPrice() + RoundDown(UpAverage2))) within 5 bars and Crosses(close, E10, CrossingDirection.BELOW) then yes else no, OPEN[-1], tradesize, tickcolor = Color.RED, arrowcolor = Color.RED);

AddOrder(OrderType.SELL_TO_CLOSE, if (low <= (EntryPrice() - RoundUp(UpAverage2/RiskRatio))) then yes else no, (EntryPrice() - RoundUp(UpAverage2/RiskRatio)), tradesize, tickcolor = Color.RED, arrowcolor = Color.RED);

AddOrder(OrderType.SELL_TO_OPEN,
if ((LowOpen and POS) or (HighOpen and E5 < E10 and E10 < E20) or (ShortOpen and POS)) and TradeShort  then yes else no,
if (LowOpen and POS) or (HighOpen and E5 < E10 and E10 < E20) then E20 else OPEN[-1] , tradesize, tickcolor = Color.MAGENTA, arrowcolor = Color.MAGENTA);

AddOrder(OrderType.BUY_TO_CLOSE, if (low <= (EntryPrice() + RoundDown(DownAverage2))) within 5 bars and Crosses(close, E10, CrossingDirection.ABOVE) then yes else no, OPEN[-1], tradesize, tickcolor = Color.CYAN, arrowcolor = Color.CYAN);

AddOrder(OrderType.BUY_TO_CLOSE, if (high >= (EntryPrice() - RoundUp(DownAverage2/RiskRatio))) then yes else no, (EntryPrice() - RoundUp(DownAverage2/RiskRatio)), tradesize, tickcolor = Color.CYAN, arrowcolor = Color.CYAN);
@irishgold can this script be modified to not have the moving averages displayed? Seems like a good strategy just a bit congested
 
Here's updated code to Hide Plots
Rich (BB code):
# MoneyMaker V2
# irishgold compiled
##Removed ZigZagHighLow code and some labels
## added TradeLong/ TradeShort / set Tradesize = 1
## added Hide EMA Plots set default to Hide Plots

input TradeLong = yes;
input TradeShort = yes;
#TradeSize
input tradesize = 1;
#Risk/Loss
input RiskRatio = 2;
input HideEMAPlots = Yes;


#ATR
def ATRlength = 14;
def averageType = AverageType.WILDERS;
def averageType2 = AverageType.EXPONENTIAL;

def ATR = MovingAverage(averageType, TrueRange(high, close, low), ATRlength);
def AVGATR = MovingAverage(averageType2, ATR, 50);
def UpAverage2 = AVGATR;
def DownAverage2 = (AVGATR * -1);

#Movavgs
plot E5 = MovAvgExponential(close, 5);
E5.SetDefaultColor(Color.GREEN);
E5.SetHiding(HideEMAPlots);
plot E10 = MovAvgExponential(close, 10);
E10.SetDefaultColor(Color.YELLOW);
E10.SetHiding(HideEMAPlots);
plot E20 = MovAvgExponential(close, 20);
E20.SetDefaultColor(Color.RED);
E20.SetHiding(HideEMAPlots);

#Crosses
def CloseCrossLong = Crosses(close, E20, CrossingDirection.ABOVE);
def CloseCrossShort = Crosses(close, E20, CrossingDirection.BELOW);
def HighCross = Crosses(high, E20, CrossingDirection.ABOVE) or high equals E20;
def LowCross = Crosses(low, E20, CrossingDirection.BELOW) or low equals E20;

def POS = if E5 > E10 then no else yes;
def NEG = if E5 < E10 then no else yes;

def HighOpen = if HighCross then yes else no;
def LowOpen = if LowCross then yes else no;
def LongOpen = if CloseCrossLong then yes else no;
def ShortOpen = if CloseCrossShort then yes else no;
#---------------------

#--------------------------------------------------------------------------------------------------------------------

AddOrder(OrderType.BUY_TO_OPEN, if ((HighOpen and NEG) or (LowOpen and E5 > E10 and E10 > E20) or (LongOpen and NEG)) and TradeLong then yes else no, if (HighOpen and NEG) or (LowOpen and E5 > E10 and E10 > E20) then E20 else open[-1], tradesize, tickcolor = Color.GREEN, arrowcolor = Color.GREEN);

AddOrder(OrderType.SELL_TO_CLOSE, if (high >= (EntryPrice() + RoundDown(UpAverage2))) within 5 bars and Crosses(close, E10, CrossingDirection.BELOW) then yes else no, open[-1], tradesize, tickcolor = Color.RED, arrowcolor = Color.RED);

AddOrder(OrderType.SELL_TO_CLOSE, if (low <= (EntryPrice() - RoundUp(UpAverage2 / RiskRatio))) then yes else no, (EntryPrice() - RoundUp(UpAverage2 / RiskRatio)), tradesize, tickcolor = Color.RED, arrowcolor = Color.RED);

AddOrder(OrderType.SELL_TO_OPEN, if ((LowOpen and POS) or (HighOpen and E5 < E10 and E10 < E20) or (ShortOpen and POS)) and TradeShort  then yes else no, if (LowOpen and POS) or (HighOpen and E5 < E10 and E10 < E20) then E20 else open[-1], tradesize, tickcolor = Color.MAGENTA, arrowcolor = Color.MAGENTA);

AddOrder(OrderType.BUY_TO_CLOSE, if (low <= (EntryPrice() + RoundDown(DownAverage2))) within 5 bars and Crosses(close, E10, CrossingDirection.ABOVE) then yes else no, open[-1], tradesize, tickcolor = Color.CYAN, arrowcolor = Color.CYAN);

AddOrder(OrderType.BUY_TO_CLOSE, if (high >= (EntryPrice() - RoundUp(DownAverage2 / RiskRatio))) then yes else no, (EntryPrice() - RoundUp(DownAverage2 / RiskRatio)), tradesize, tickcolor = Color.CYAN, arrowcolor = Color.CYAN);
 

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

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

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