Try this NQ Strategy + Code for ThinkorSwim

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

Simple and effective strategy in these crazy volatile times. With the 20 EMA you are bound to get multiple crosses so I added a 50/100 EMA Crossover as a cloud to keep you in the trade longer. Thanks for keeping it Keep it simple stupid - KISS!!
 
@Nirmal Don't know if you read through this thread or not, but the only indicator being used in this strategy is the 20 exponential moving average. You can just add the regular EMA indicator and adjust the length to 20.
 
@Nirmal Don't know if you read through this thread or not, but the only indicator being used in this strategy is the 20 exponential moving average. You can just add the regular EMA indicator and adjust the length to 20.

Thanks Ben
It worked after I remove this
myindicator.setHiding(if close>open(period="DAY") then 0 else 1);
 
I went ahead and modified it to plain SMA and added a few options for input and match the original screenshot style:

Code:
input price = close;
input length = 20;

plot myindicator = Average(price, length);
myindicator.AssignValueColor(if price >= myindicator then Color.GREEN else Color.RED);
myindicator.SetStyle(Curve.LONG_DASH);
myindicator.SetPaintingStrategy(PaintingStrategy.LINE);
myindicator.SetLineWeight(1);
#myindicator.SetHiding(if price > open(period = AggregationPeriod.DAY) then 0 else 1);

Now you can use it for 9 SMA, 20 SMA, 50 SMA, etc...

Update: better off using the regular SMA (or EMA) and just add the line-coloring part:

Code:
#
# TD Ameritrade IP Company, Inc. (c) 2017-2020
#

input price = close;
input length = 9;
input displace = 0;
input showBreakoutSignals = no;

plot SMA = Average(price[-displace], length);
plot UpSignal = price crosses above SMA;
plot DownSignal = price crosses below SMA;

UpSignal.SetHiding(!showBreakoutSignals);
DownSignal.SetHiding(!showBreakoutSignals);

# Change here
#SMA.SetDefaultColor(GetColor(1));
SMA.AssignValueColor(if price >= SMA then Color.GREEN else Color.RED);

UpSignal.SetDefaultColor(Color.UPTICK);
UpSignal.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
DownSignal.SetDefaultColor(Color.DOWNTICK);
DownSignal.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
 
Last edited:
Hey guys (& @Fedegrosso).
I think I was able to create the strategy for BACKTESTING
If one does not use a filter of some sort and maintains the strategy as is with the current EMA period they won't exactly be printing money. But when it works, it works very well with great entries :)
The strat below has customizable EMA length, Target placement (t ticks), Stop placement (s ticks)
Ruby:
#Coded by adii800
#Formulated by AlgoTrader77
#EMA Breakout Strat
def CL = close;

def HI = high;

def LO = low;

def TS = TickSize();

input Length = 20;

def EMA = ExpAverage(CL , Length );

def CrossAboveEMA = CL crosses above EMA;

def CrossBelowEMA = CL crosses below EMA;

def buy = CrossAboveEMA[1] and HI >= (HI[1] + TS);

def sell = CrossBelowEMA[1] and LO <= (LO[1] - TS);

def LongP = if buy then HI[1] + TS else Double.NaN;

def ShortP = if sell then LO[1] - TS else Double.NaN;



def entryP = EntryPrice();



#Fixed Tick Long Target

input TTicks = 19;

def LTargetPrice = entryP + (TTicks * TS);

#Determine if Target was hit

def LTargetHit = HI >= LTargetPrice;

#Fixed Tick Short Target

def STargetPrice = entryP - (TTicks * TS);

#Determine if Target was hit

def STargetHit = LO <= STargetPrice;



#Fixed Tick Long Stop

input STicks= 17;

def LStopValue = (STicks*TS);

def LStopPrice = entryP - LStopValue;

#Determine if the stop was hit

def LStopHit = LO <= LStopPrice;

#Fixed Tick Short Stop

def SStopValue = (STicks*TS);

def SStopPrice = entryP + LStopValue;

#Determine if the stop was hit

def SStopHit = HI >= SStopPrice;





#LONG ORDER

AddOrder(type = OrderType.BUY_AUTO, condition = buy, price = LongP, tradeSize = 1, tickcolor = Color.CYAN, arrowcolor = Color.CYAN, name = "Long");

#LONG TARGET ORDER

AddOrder(type = OrderType.SELL_TO_CLOSE, condition = LTargetHit, price = LTargetPrice, tradeSize = 1, tickcolor = Color.WHITE, arrowcolor = Color.WHITE, name = "Target Hit");

#LONGT STOP ORDER

AddOrder(type = OrderType.SELL_TO_CLOSE, condition = LStopHit, price = LStopPrice, tradeSize = 1, tickcolor = Color.GRAY, arrowcolor = Color.GRAY, name = "Stop Hit");

#SHORT ORDER

AddOrder(type = OrderType.SELL_AUTO, condition = sell, price = ShortP, tradeSize = 1, tickcolor = Color.LIGHT_RED, arrowcolor = Color.LIGHT_RED, name = "Short");

#SHORT TARGET ORDER

AddOrder(type = OrderType.BUY_TO_CLOSE, condition = STargetHit, price = STargetPrice, tradeSize = 1, tickcolor = Color.WHITE, arrowcolor = Color.WHITE, name = "Target Hit");

#SHORT STOP ORDER

AddOrder(type = OrderType.BUY_TO_CLOSE, condition = SStopHit, price = SStopPrice, tradeSize = 1, tickcolor = Color.GRAY, arrowcolor = Color.GRAY, name = "Stop Hit");



#EXTENDED FLOATING PL

############################

# FPL Extended

# Extended Floating P&L study.

# Author: Eddielee394

# Version: 1.2

# inspired by FPL Dashboard script developed by Mobius

#

############################



#Hint: An extended floating P&L study to be used alongside TOS strategies for measuring hypothetical strategy performance.\nThis is a work in progress.  And may contain some bugs or other programming issues.



############################

# Instructions

# - Due to limitations with the thinkscript public api, this specific script must be added to a "strategy" study.

#   Generally best practice is to append this script to the end of your custom strategy (ensuring it runs AFTER the

#   `AddOrder()` function is called from the strategy).  A better method would be to use as a lower study but unless

#    a workaround is implemented to handle the `Entry()` function in a lower study, it can only be applied to upper strategies.

#

# - the script uses the `HidePrice()` function which will hide the actual price candles within the upper study,

#   only displaying the FPL histogram.

#

############################





############################

#    Metrics         

#  - Active Trade return %

#  - Entry Count     

#  - Winning Entry Count

#  - Win rate       

#  - Avg return     

#  - avg win         

#  - avg loss       

#  - peak to valley dd

#  - largest equity dd

#  - P&L low         

#  - P&L high       

#  - Highest return

#  - Lowest return 

############################



############################

#     Todo:         

# - Sharpe Ratio

# - Sortino Ratio

# - Calmar Ratio

# - Avg trade     

#   duration       

# -Buy/hold comparison

############################





#Globals

def nan = Double.NaN;

def bn = if !IsNaN(close) and !IsNaN(close[1]) and !IsNaN(close[-1]) then BarNumber() else bn[1];



#Inputs

input fplBegin = 0000;

#hint fplBegin: start time: the time in which then dailyHighLow profit should consider the day start.  Recommended value is 0000.



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.



input fplShowEntryBubbles = no;

#hint fplShowEntryBubbles: display bubbles on the FPL showing the entry and exit P&L values



input fplEnableDebugging = no;

#hint fplEnableDebugging: displays various debugging labels and chart bubbles. \nIt's recommended to hide the price chart & set the fpl hide fpl setting to yes, when enabling.



#temp input var references

def begin = fplBegin;

def targetWinLoss = fplTargetWinLoss;

def targetWinRate = fplTargetWinRate;

def hidePrice = fplHidePrice;

def hideFPL = fplHideFPL;

def showEntryBubbles = fplShowEntryBubbles;

def enableDebugging = fplEnableDebugging;



#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 calculateDrawdown {

    input plLow = 1;

    input plHigh = 1;



    def _drawdown = if plHigh == 0

                   then 0 #handles the divide by zero error

                   else (plLow - plHigh) / plHigh;

    plot calculateDrawdown = _drawdown;

}



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;

}

;



script getDurationInMins {

    input gdimBarCount = 1;



    #get the aggregation period (MS per bar)

    def aggPeriod = GetAggregationPeriod();



    #multiply length of bars by aggPeriod to determine total milliseconds then convert to minutes

    def _getDurationInMins = Floor((gdimBarCount * aggPeriod) / 60000);

    plot getDurationInMins = _getDurationInMins;

}



script formatDuration {

    input fdBarCount = 1;

    def _fdDuration = getDurationInMins(fdBarCount);

    def _formatDuration = if _fdDuration >= 60 and _fdDuration < 1440 #hours but not days

                         then 1

                         else if _fdDuration >= 1440 #days

                         then 2

                         else 0;



    plot formatDuration = _formatDuration;

}



script calculateDuration {

    input cdBarCount = 1;

    def _cdDurationFormat = formatDuration(cdBarCount);

    def _cdDuration = getDurationInMins(cdBarCount);



    #if minutes > hour convert to hour, else if minutes > day, then convert to days

    def _calculateDuration = if _cdDurationFormat == 1

                             then _cdDuration / 60 #convert to hours if greater than 60min but less than a day (1440)

                             else if  _cdDurationFormat == 2

                             then Ceil(_cdDuration / 1440) #convert to days if greater than 1440mins

                             else _cdDuration; #fallback to minutes



    plot calculateDuration = _calculateDuration;

}



# 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 Active = if SecondsTillTime(begin) == 0 and

                SecondsFromTime(begin) == 0

             then 1

             else 0;



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) 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;



#Drawdown

def lowestLowBarNumber = HighestAll(if FPL == lowFPL then bn else 0);

def highestHighBarNumber = HighestAll(if FPL == highFPL and FPL != FPL[1] then bn else 0);

def hasPrevLow = lowestLowBarNumber < highestHighBarNumber;



def isPeak = FPL > Highest(FPL[1], 12) and FPL > Highest(FPL[-12], 12);

def isTrough = FPL < Lowest(FPL[1], 12) and FPL < Lowest(FPL[-12], 12);

def _peak = if isPeak then FPL else nan;

def _trough = if isTrough then FPL else nan;

def peak = if !IsNaN(_peak) then FPL else peak[1];

def trough = if !IsNaN(_trough) then FPL else trough[1];

def peakBN = if isPeak then bn else peakBN[1];

def troughBN = if isTrough then bn else troughBN[1];



def ptvDrawdown = if !hasPrevLow then calculateDrawdown(lowFPL, highFPL) else ptvDrawdown[1];

def equityDrawdown = if isTrough and trough < peak then trough - peak else equityDrawdown[1];

def equityDrawdownPercent = if isTrough and trough < peak then calculateDrawdown(trough, peak) else equityDrawdownPercent[1];

def largestEquityDrawdown = LowestAll(equityDrawdown);

def largestEquityDrawdownPercent = LowestAll(equityDrawdownPercent);



def drawdown = if hasPrevLow

               then largestEquityDrawdownPercent

               else ptvDrawdown;



# Drawdown Durations

def equityDrawdownLength = if bn >= peakBN and bn <= troughBN

                           then troughBN - peakBN

                           else equityDrawdownLength[1];



def ptvDrawdownLength = if bn >= highestHighBarNumber and bn <= lowestLowBarNumber

                        then lowestLowBarNumber - highestHighBarNumber

                        else ptvDrawdownLength[1];



def equityDrawdownDuration = calculateDuration(HighestAll(equityDrawdownLength));

def equityDrawdownDurationFormat = formatDuration(HighestAll(equityDrawdownLength));

def ptvDrawdownDuration = calculateDuration(ptvDrawdownLength);



def ptvDrawdownDurationFormat = formatDuration(ptvDrawdownLength);



#Daily profit

def Midnight = if Active then FPL else Midnight[1];

def DaysProfit = FPL - Midnight;



#Plots



AddChartBubble(!hideFPL and showEntryBubbles and isEntryBar, FPL, "Entry: " + entryBarPL + " | " + bn, Color.WHITE);

AddChartBubble(!hideFPL and showEntryBubbles and isExitBar, FPL, "Exit: " + exitBarPL,

               color = if isWin

                       then Color.LIGHT_GREEN

                       else if isLoss

                       then Color.DARK_RED

                       else Color.GRAY,

               up = no

              );



#Labels



AddLabel(yes,

         text = "LastEntry: " + AsPrice(entryPrice)

         );



AddLabel(hasEntry,

         text = "Current Trade % Return:  " + AsPercent(cumsum),

         color = if cumsum > 0

         then Color.GREEN

         else Color.RED

        );



AddLabel(yes,

         text = "Total Trades: " + entryCount,

         color = Color.WHITE

         );



AddLabel(yes,

         text = "WinCount: " + winCount +

                " | LossCount: " + lossCount +

                " | WinRate: " + winRate,

         color = if winRate >= targetWinRate

                 then Color.GREEN

                 else Color.RED

         );



AddLabel(yes,

         text = "W/L: " + AsPercent(winLossRatio),

         color = if winLossRatio > targetWinLoss

                 then Color.GREEN

                 else Color.RED

         );



AddLabel(yes,

        text = "HighestReturn: " +  AsDollars(highestReturn),

        color = if highestReturn > 0

                then Color.GREEN

                else Color.RED

        );



AddLabel(yes,

        text = "LowestReturn: " +  AsDollars(lowestReturn),

        color = if lowestReturn > 0

                then Color.GREEN

                else Color.RED

        );



AddLabel(yes,

         text = "AvgReturn: " + AsDollars(avgReturn) +

                " | AvgWin: " + AsDollars(avgWin) +

                " | AvgLoss: " + AsDollars(avgLoss),

         color = if avgReturn >= 0

                 then Color.LIGHT_GREEN

                 else Color.RED

         );



AddLabel(yes,

        text = "PeakToValley DD: " +  AsPercent(drawdown) +

               " | Duration: " + ptvDrawdownDuration +

                if ptvDrawdownDurationFormat == 1

                then " hours"

                else if ptvDrawdownDurationFormat == 2

                then " days"

                else " mins" ,

        color = if drawdown > 0

                then Color.GREEN

                else Color.RED

        );





AddLabel(largestEquityDrawdown < 0,

        text = "Largest Equity DD: " +  AsDollars(largestEquityDrawdown) +

               " | Duration: " + equityDrawdownDuration +

                if equityDrawdownDurationFormat == 1

                then " hours"

                else if equityDrawdownDurationFormat == 2

                then " days"

                else " mins",

        color = if largestEquityDrawdown > 0

                then Color.GREEN

                else Color.RED

        );



AddLabel(yes,

         text = "P&L High" +

                (if enableDebugging

                then " at bar " + highBarNumber

                else "") +

                ":  " + AsDollars(highFPL),

        color = Color.GREEN

       );



AddLabel(yes,

         text = "P&L Low" +

                (if enableDebugging

                then " at bar " + lowBarNumber

                else "") +

                ":  " + AsDollars(lowFPL),

        color = Color.RED

       );



AddLabel(yes,

         text = "Days Profit: $" + DaysProfit,

         color = if DaysProfit > 0

                 then Color.GREEN

                 else Color.RED

        );



AddLabel(yes,

         text = "Total Profit: " + AsDollars(FPL),

         color = if FPL > 0

                 then Color.GREEN

                 else Color.RED

        );



#debugging



#peaks & troughs

AddChartBubble(enableDebugging and isPeak, FPL,

               text = "FPL: " + FPL

                      + " | Peak: " + peak

                      + " | Trough: " + trough[-1]

                      + " | Drawdown: " + AsPercent(calculateDrawdown(trough, peak))

                      + " | PeakBN: " + peakBN

                      + " | BarNumber: " + bn,

               color = Color.LIME

              );



AddChartBubble(enableDebugging and isTrough, FPL,

               text = "FPL: " + FPL

                      + " | Peak: " + peak

                      + " | Trough: " + trough

                      + " | Drawdown: " + AsPercent(calculateDrawdown(trough, peak))

                      + " | TroughBN: " + troughBN

                      + " | BarNumber: " + bn,

              color = Color.LIGHT_RED,

              up = no

             );



AddVerticalLine(enableDebugging and isEntryBar,

                text = "EntryBarNum: " + entryBarNum

                       + " | ExitBarNum: " + exitBarNum[-1]

                       + " | BarNumber: " + bn,

                color = Color.WHITE

);



AddVerticalLine(enableDebugging and isExitBar,

                text =  "EntryBarNum: " + entryBarNum[1]

                        + " | ExitbarNum: " + exitBarNum

                        + " | BarNumber: " + bn

                        + " | EntryReturn: " + entryReturn,

                color = if isWin

                        then Color.LIGHT_GREEN

                        else if isLoss

                        then Color.LIGHT_RED

                        else Color.LIGHT_GREEN

);
I have embedded an Extended floating PL as part of the strategy as well because I believe drawdown is something crucial that is frequently looked over by traders (including me) who get too engrossed in the floating PL alone. You can use that info to determine if your account can actually tolerate the drawdown (also don't forget about accounting for commission lol;))
**The preset target and stop ticks are arbitrary numbers
**If you don't want the Extended floating PL just delete everything below line 51 after pasting it into TOS
 
Last edited:
@FoofAndFun can you add possibly add an alert right when the candle closes above or below the 20 ema?

Code:
input price = close;
input length = 20;

plot myindicator = Average(price, length);
myindicator.AssignValueColor(if price >= myindicator then Color.GREEN else Color.RED);
myindicator.SetStyle(Curve.LONG_DASH);
myindicator.SetPaintingStrategy(PaintingStrategy.LINE);
myindicator.SetLineWeight(1);
#myindicator.SetHiding(if price > open(period = AggregationPeriod.DAY) then 0 else 1);
 
@FoofAndFun can you add possibly add an alert right when the candle closes above or below the 20 ema?

Code:
input price = close;
input length = 20;

plot myindicator = Average(price, length);
myindicator.AssignValueColor(if price >= myindicator then Color.GREEN else Color.RED);
myindicator.SetStyle(Curve.LONG_DASH);
myindicator.SetPaintingStrategy(PaintingStrategy.LINE);
myindicator.SetLineWeight(1);
#myindicator.SetHiding(if price > open(period = AggregationPeriod.DAY) then 0 else 1);
That would be helpful
 
@MatthewTherrien You can narrow down what is causing the problem by:
  1. The old standby: closing out of the program, turning off your machine and rebooting
  2. Removing any other charts and lists
  3. Reducing the lookback period IE: instead of 3yrs loaded on your 5min chart start w/ 5days.
Lets us know if any of these helped.
 
@MatthewTherrien You can narrow down what is causing the problem by:
  1. The old standby: closing out of the program, turning off your machine and rebooting
  2. Removing any other charts and lists
  3. Reducing the lookback period IE: instead of 3yrs loaded on your 5min chart start w/ 5days.
Lets us know if any of these helped.
Thank you for the fast reply - no these did not help - others have commented on this phenomenon as well - no worries - I will just use 20 EMA with arrows
 

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

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