Can you define variables with if statements?

berodney

New member
Hi all,

Looking to do something like this:

Code:
def uptrend = SMI >((SMI[1] + SMI[2] + SMI[3]) / 3);


def lowpoint = if uptrend then 8 else 8;
def highpoint = if uptrend then 8 else 8;
def shortpoint = if uptrend then 6 else 10;
def coverpoint = if uptrend then 5 else 6;
def long_rsi_buy = if uptrend then 45 else 45;
def long_rsi_sell = if uptrend then 25 else 25;
def short_sma = if uptrend then 204 else 204;

But the lowpoint, hightpoint, shortpoint etc. aren't being recognized, Can you not use if statements when defining a variable?

Code:
Only constants expected here: highpoint CL function indexer of high at 109:77
Only constants expected here: coverpoint CL function indexer of low at 118:76
Only constants expected here: lowpoint CL function indexer of low at 129:19
Only constants expected here: highpoint CL function indexer of high at 129:56
Only constants expected here: highpoint CL function indexer of high at 130:24
Only constants expected here: _inline_referenced_param_bSRP_9451_length CL constant function parameter 'length' at 136:48
Only constants expected here: shortpoint CL function indexer of high at 136:25
Only constants expected here: coverpoint CL function indexer of low at 136:112
Only constants expected here: _inline_referenced_param_bSRP_9463_length CL constant function parameter 'length' at 137:45
Only constants expected here: coverpoint CL function indexer of low at 137:23
Only constants expected here: highpoint CL function indexer of high at 109:77
Only constants expected here: coverpoint CL function indexer of low at 118:76
Only constants expected here: lowpoint CL function indexer of low at 129:19
Only constants expected here: highpoint CL function indexer of high at 129:56
Only constants expected here: highpoint CL function indexer of high at 130:24
Only constants expected here: _inline_referenced_param_bSRP_9451_length CL constant function parameter 'length' at 136:48
Only constants expected here: shortpoint CL function indexer of high at 136:25
Only constants expected here: coverpoint CL function indexer of low at 136:112
Only constants expected here: _inline_referenced_param_bSRP_9463_length CL constant function parameter 'length' at 137:45
Only constants expected here: coverpoint CL function indexer of low at 137:23
 
Solution
Good point . The issue is in the buy, sell, short and cover statements,


this is a strategy


use getvalue() instead of variable offsets

you can use an if then to supply constants as an offset, if all precedent data comes from constants/inputs.
the problem is that the condition in the if then, traces back to a formula.



most of the issues could be fixed by replacing 5 if thens, with a def.
5 of the 7 formulas have the same number, for both conditions ?? , so there is no point to having if thens.
old
def lowpoint = if uptrend then 8 else 8;
new
def lowpoint = 8;
i didn't do that. i changed offsets to use getvalue



1 minute is the smallest time allowed
a chart can't read data from a smaller time period
there is no point in...

berodney

New member
Hard to say what's wrong without seeing all the code, but yes, you can define a variable with an if statement.
Good point . The issue is in the buy, sell, short and cover statements.
Code:
#---------------------
###################
#
# SMI
#
###################


def percentDLength = 4;
def percentKLength = 5;

# Stochastic Momentum Index (SMI)

def min_low = Lowest(low, percentKLength);
def max_high = Highest(high, percentKLength);
def rel_diff = close - (max_high + min_low) / 2;
def diff = max_high - min_low;
def avgrel = ExpAverage(ExpAverage(rel_diff, percentDLength), percentDLength);
def avgdiff = ExpAverage(ExpAverage(diff, percentDLength), percentDLength);

def chopband = if IsNaN(close) then Double.NaN else 0;
def SMI = if avgdiff != 0 then avgrel / (avgdiff / 2) * 100 else 0;


def AvgSMI = ExpAverage(SMI, percentDLength);

def uptrend = SMI >((SMI[1] + SMI[2] + SMI[3]) / 3);


def lowpoint = if uptrend then 8 else 8;
def highpoint = if uptrend then 8 else 8;
def shortpoint = if uptrend then 6 else 10;
def coverpoint = if uptrend then 5 else 6;
def long_rsi_buy = if uptrend then 45 else 45;
def long_rsi_sell = if uptrend then 25 else 25;
def short_sma = if uptrend then 204 else 204;


#---------------------
###################
#
# DT Strat
#
###################


input length = 14;
input calcLength = 5;
input smoothLength = 3;

def op = open;
def cl = close;
def data = fold i = 0 to length
           with s
           do s + (if cl > GetValue(op, i)
                   then 1
                   else if cl < GetValue(op, i)
                        then - 1
                        else 0);
def EMA5 = ExpAverage(data, calcLength);
def Main = ExpAverage(EMA5, smoothLength);
def Signal = ExpAverage(Main, smoothLength);


def zero = if IsNaN(cl) then Double.NaN else 0;

def obtmo = if IsNaN(cl) then Double.NaN else Round(length * .85);

def ostmo = if IsNaN(cl) then Double.NaN else -Round(length * .60);



def bullish = (Main > Signal) and (Signal < ostmo);
def bearish = (Main < Signal) and (Signal > obtmo);




#---------------------
###################
#
# Volume requirement
#
###################

def vol2 = volumeAvg(210) and volume >= 10000;

#---------------------
###################
#
# Order variables
#
###################
input opentime = 0930;
input closetime = 1559;

def begin = SecondsFromTime(opentime);
def end = SecondsTillTime (closetime);
def goodtime = begin > 0 and end > 0;
def eod = end < 121;

#---------------------
###################
#
# Plot high for long position
#
###################
plot close_priormin = HighestAll(if IsNaN(high[-1]) and !IsNaN(high)
                                  then high(period = AggregationPeriod.MIN)[highpoint]
                                  else Double.NaN);
#---------------------
###################
#
# Plot low for short position
#
###################
plot close_priormin2 = HighestAll(if IsNaN(low[-1]) and !IsNaN(low)
                                  then low(period = AggregationPeriod.MIN)[coverpoint]
                                  else Double.NaN);

#---------------------
###################
#
# Order Conditions
#
###################


def buy = low<low[lowpoint] and goodtime and high<high[highpoint] and rsi() > long_rsi_buy;
def sell = high > high[highpoint] or rsi() < long_rsi_sell or eod;

AddOrder(OrderType.BUY_TO_OPEN, buy and vol2 , name = "Buy",tickcolor = Color.GREEN, arrowcolor = Color.Green);
AddOrder(OrderType.SELL_TO_ClOSE, sell or bearish,name = "Sell",tickcolor = Color.RED, arrowcolor = Color.Red);


def short = high > high[shortpoint] and high < SimpleMovingAvg(length = short_sma) and goodtime and low >= low[coverpoint];
def cover = low < low[coverpoint]  or low > SimpleMovingAvg(length = short_sma) or eod;


AddOrder(OrderType.SELL_TO_OPEN, short and vol2, name = "Short", tickcolor = Color.RED, arrowcolor = Color.RED);
AddOrder(OrderType.BUY_TO_CLOSE, cover ,name = "Cover", tickcolor = Color.GREEN, arrowcolor = Color.GREEN);
 
Last edited:

JoeDV

Member
Oh okay, yeah, the problem is, you can define a variable with an IF statement, and therein lies the problem, it's a Variable. Indexing has to be done with a Constant. So you can't go back X amount of days unless that's predefined as a def or input directly.
 

berodney

New member
Oh okay, yeah, the problem is, you can define a variable with an IF statement, and therein lies the problem, it's a Variable. Indexing has to be done with a Constant. So you can't go back X amount of days unless that's predefined as a def or input directly.
Ahh ok, makes sense. So there's really no way for that to have multiple values?
 

halcyonguy

Well-known member
VIP
Lifetime
Good point . The issue is in the buy, sell, short and cover statements,


this is a strategy


use getvalue() instead of variable offsets

you can use an if then to supply constants as an offset, if all precedent data comes from constants/inputs.
the problem is that the condition in the if then, traces back to a formula.



most of the issues could be fixed by replacing 5 if thens, with a def.
5 of the 7 formulas have the same number, for both conditions ?? , so there is no point to having if thens.
old
def lowpoint = if uptrend then 8 else 8;
new
def lowpoint = 8;
i didn't do that. i changed offsets to use getvalue



1 minute is the smallest time allowed
a chart can't read data from a smaller time period
there is no point in declaring a period of 1 minute



near the end are 2 formulas that try to use a variable for an average length
def cover = low < getvalue(low, coverpoint) or low > SimpleMovingAvg(length = short_sma) or eod;
but again, the 2 choices in the if then are the same ..??
def short_sma = if uptrend then 204 else 204;

so replace if then with
def short_sma = 204;

https://tlc.thinkorswim.com/center/reference/Tech-Indicators/studies-library/R-S/SimpleMovingAvg



what is this supposed to do?
def vol2 = VolumeAvg(210) and volume >= 10000;
VolumeAvg(210) is a number, not a comparison
did you mean to compare volumeavg(210) to 10000 also ? then you need to add that.
i changed the 1000 to be a variable

def volnum = 10000;
def vol2 = VolumeAvg(210) > volnum and volume >= volnum;


Ruby:
# zzz_smi_fix


# https://usethinkscript.com/threads/can-you-define-variables-with-if-statements.11037/#post-96726

#---------------------
###################
#
# SMI
#
###################


def percentDLength = 4;
def percentKLength = 5;

# Stochastic Momentum Index (SMI)

def min_low = Lowest(low, percentKLength);
def max_high = Highest(high, percentKLength);
def rel_diff = close - (max_high + min_low) / 2;
def diff = max_high - min_low;
def avgrel = ExpAverage(ExpAverage(rel_diff, percentDLength), percentDLength);
def avgdiff = ExpAverage(ExpAverage(diff, percentDLength), percentDLength);

def chopband = if IsNaN(close) then Double.NaN else 0;
def SMI = if avgdiff != 0 then avgrel / (avgdiff / 2) * 100 else 0;


def AvgSMI = ExpAverage(SMI, percentDLength);

def uptrend = SMI > ((SMI[1] + SMI[2] + SMI[3]) / 3);


def lowpoint = if uptrend then 8 else 8;
def highpoint = if uptrend then 8 else 8;
def shortpoint = if uptrend then 6 else 10;
def coverpoint = if uptrend then 5 else 6;
def long_rsi_buy = if uptrend then 45 else 45;
def long_rsi_sell = if uptrend then 25 else 25;
#def short_sma = if uptrend then 204 else 204;

#near the end are 2 formulas that try to use a variable for an average length
#def cover = low < getvalue(low, coverpoint)  or low > SimpleMovingAvg(length = short_sma) or eod;
#but again, the 2 choices in the if then are the same ..??
#def short_sma = if uptrend then 204 else 204;
#so replace if then with 
def short_sma = 204;

#---------------------
###################
#
# DT Strat
#
###################


input length = 14;
input calcLength = 5;
input smoothLength = 3;

def op = open;
def cl = close;
def data = fold i = 0 to length
           with s
           do s + (if cl > GetValue(op, i)
                   then 1
                   else if cl < GetValue(op, i)
                        then - 1
                        else 0);
def EMA5 = ExpAverage(data, calcLength);
def Main = ExpAverage(EMA5, smoothLength);
def Signal = ExpAverage(Main, smoothLength);


def zero = if IsNaN(cl) then Double.NaN else 0;

def obtmo = if IsNaN(cl) then Double.NaN else Round(length * .85);

def ostmo = if IsNaN(cl) then Double.NaN else -Round(length * .60);



def bullish = (Main > Signal) and (Signal < ostmo);
def bearish = (Main < Signal) and (Signal > obtmo);




#---------------------
###################
#
# Volume requirement
#
###################

def volnum = 10000;
#def vol2 = VolumeAvg(210) and volume >= 10000;
def vol2 = VolumeAvg(210) > volnum and volume >= volnum;
#addlabel(1, VolumeAvg(210), color.magenta);


#---------------------
###################
#
# Order variables
#
###################
input opentime = 0930;
input closetime = 1559;

def begin = SecondsFromTime(opentime);
def end = SecondsTillTime (closetime);
def goodtime = begin > 0 and end > 0;
def eod = end < 121;

#---------------------
###################
#
# Plot high for long position
#
###################
#plot close_priormin = HighestAll(if IsNaN(high[-1]) and !IsNaN(high)
#                                  then high(period = AggregationPeriod.MIN)[highpoint]
#                                  else Double.NaN);
# 1 minute is the smallest time allowed
# a chart can't read data from a smaller time period
# there is no point in declaring a period of 1 minute
plot close_priormin = HighestAll(if IsNaN(high[-1]) and !IsNaN(high)
                                  then getvalue(high, highpoint)
                                  else Double.NaN);
#---------------------
###################
#
# Plot low for short position
#
###################
#plot close_priormin2 = HighestAll(if IsNaN(low[-1]) and !IsNaN(low)
#                                  then low(period = AggregationPeriod.MIN)[coverpoint]
#                                  else Double.NaN);
plot close_priormin2 = HighestAll(if IsNaN(low[-1]) and !IsNaN(low)
                                  then getvalue(low, coverpoint)
                                  else Double.NaN);

#---------------------
###################
#
# Order Conditions
#
###################


#def buy = low < low[lowpoint] and goodtime and high < high[highpoint] and RSI() > long_rsi_buy;
#def sell = high > high[highpoint] or RSI() < long_rsi_sell or eod;
def buy = low < getvalue(low, lowpoint) and goodtime and high < getvalue(high, highpoint) and RSI() > long_rsi_buy;
def sell = high > getvalue(high, highpoint) or RSI() < long_rsi_sell or eod;

AddOrder(OrderType.BUY_TO_OPEN, buy and vol2, name = "Buy", tickcolor = Color.GREEN, arrowcolor = Color.GREEN);
AddOrder(OrderType.SELL_TO_CLOSE, sell or bearish, name = "Sell", tickcolor = Color.RED, arrowcolor = Color.RED);


#def short = high > high[shortpoint] and high < SimpleMovingAvg(length = short_sma) and goodtime and low >= low[coverpoint];
#def cover = low < low[coverpoint]  or low > SimpleMovingAvg(length = short_sma) or eod;
def short = high > getvalue(high, shortpoint) and high < SimpleMovingAvg(length = short_sma) and goodtime and low >= getvalue(low, coverpoint);
def cover = low < getvalue(low, coverpoint)  or low > SimpleMovingAvg(length = short_sma) or eod;



AddOrder(OrderType.SELL_TO_OPEN, short and vol2, name = "Short", tickcolor = Color.RED, arrowcolor = Color.RED);
AddOrder(OrderType.BUY_TO_CLOSE, cover, name = "Cover", tickcolor = Color.GREEN, arrowcolor = Color.GREEN);


#
 
Solution

berodney

New member
this is a strategy


use getvalue() instead of variable offsets

you can use an if then to supply constants as an offset, if all precedent data comes from constants/inputs.
the problem is that the condition in the if then, traces back to a formula.



most of the issues could be fixed by replacing 5 if thens, with a def.
5 of the 7 formulas have the same number, for both conditions ?? , so there is no point to having if thens.
old
def lowpoint = if uptrend then 8 else 8;
new
def lowpoint = 8;
i didn't do that. i changed offsets to use getvalue



1 minute is the smallest time allowed
a chart can't read data from a smaller time period
there is no point in declaring a period of 1 minute



near the end are 2 formulas that try to use a variable for an average length
def cover = low < getvalue(low, coverpoint) or low > SimpleMovingAvg(length = short_sma) or eod;
but again, the 2 choices in the if then are the same ..??
def short_sma = if uptrend then 204 else 204;

so replace if then with
def short_sma = 204;

https://tlc.thinkorswim.com/center/reference/Tech-Indicators/studies-library/R-S/SimpleMovingAvg



what is this supposed to do?
def vol2 = VolumeAvg(210) and volume >= 10000;
VolumeAvg(210) is a number, not a comparison
did you mean to compare volumeavg(210) to 10000 also ? then you need to add that.
i changed the 1000 to be a variable

def volnum = 10000;
def vol2 = VolumeAvg(210) > volnum and volume >= volnum;


Ruby:
# zzz_smi_fix


# https://usethinkscript.com/threads/can-you-define-variables-with-if-statements.11037/#post-96726

#---------------------
###################
#
# SMI
#
###################


def percentDLength = 4;
def percentKLength = 5;

# Stochastic Momentum Index (SMI)

def min_low = Lowest(low, percentKLength);
def max_high = Highest(high, percentKLength);
def rel_diff = close - (max_high + min_low) / 2;
def diff = max_high - min_low;
def avgrel = ExpAverage(ExpAverage(rel_diff, percentDLength), percentDLength);
def avgdiff = ExpAverage(ExpAverage(diff, percentDLength), percentDLength);

def chopband = if IsNaN(close) then Double.NaN else 0;
def SMI = if avgdiff != 0 then avgrel / (avgdiff / 2) * 100 else 0;


def AvgSMI = ExpAverage(SMI, percentDLength);

def uptrend = SMI > ((SMI[1] + SMI[2] + SMI[3]) / 3);


def lowpoint = if uptrend then 8 else 8;
def highpoint = if uptrend then 8 else 8;
def shortpoint = if uptrend then 6 else 10;
def coverpoint = if uptrend then 5 else 6;
def long_rsi_buy = if uptrend then 45 else 45;
def long_rsi_sell = if uptrend then 25 else 25;
#def short_sma = if uptrend then 204 else 204;

#near the end are 2 formulas that try to use a variable for an average length
#def cover = low < getvalue(low, coverpoint)  or low > SimpleMovingAvg(length = short_sma) or eod;
#but again, the 2 choices in the if then are the same ..??
#def short_sma = if uptrend then 204 else 204;
#so replace if then with
def short_sma = 204;

#---------------------
###################
#
# DT Strat
#
###################


input length = 14;
input calcLength = 5;
input smoothLength = 3;

def op = open;
def cl = close;
def data = fold i = 0 to length
           with s
           do s + (if cl > GetValue(op, i)
                   then 1
                   else if cl < GetValue(op, i)
                        then - 1
                        else 0);
def EMA5 = ExpAverage(data, calcLength);
def Main = ExpAverage(EMA5, smoothLength);
def Signal = ExpAverage(Main, smoothLength);


def zero = if IsNaN(cl) then Double.NaN else 0;

def obtmo = if IsNaN(cl) then Double.NaN else Round(length * .85);

def ostmo = if IsNaN(cl) then Double.NaN else -Round(length * .60);



def bullish = (Main > Signal) and (Signal < ostmo);
def bearish = (Main < Signal) and (Signal > obtmo);




#---------------------
###################
#
# Volume requirement
#
###################

def volnum = 10000;
#def vol2 = VolumeAvg(210) and volume >= 10000;
def vol2 = VolumeAvg(210) > volnum and volume >= volnum;
#addlabel(1, VolumeAvg(210), color.magenta);


#---------------------
###################
#
# Order variables
#
###################
input opentime = 0930;
input closetime = 1559;

def begin = SecondsFromTime(opentime);
def end = SecondsTillTime (closetime);
def goodtime = begin > 0 and end > 0;
def eod = end < 121;

#---------------------
###################
#
# Plot high for long position
#
###################
#plot close_priormin = HighestAll(if IsNaN(high[-1]) and !IsNaN(high)
#                                  then high(period = AggregationPeriod.MIN)[highpoint]
#                                  else Double.NaN);
# 1 minute is the smallest time allowed
# a chart can't read data from a smaller time period
# there is no point in declaring a period of 1 minute
plot close_priormin = HighestAll(if IsNaN(high[-1]) and !IsNaN(high)
                                  then getvalue(high, highpoint)
                                  else Double.NaN);
#---------------------
###################
#
# Plot low for short position
#
###################
#plot close_priormin2 = HighestAll(if IsNaN(low[-1]) and !IsNaN(low)
#                                  then low(period = AggregationPeriod.MIN)[coverpoint]
#                                  else Double.NaN);
plot close_priormin2 = HighestAll(if IsNaN(low[-1]) and !IsNaN(low)
                                  then getvalue(low, coverpoint)
                                  else Double.NaN);

#---------------------
###################
#
# Order Conditions
#
###################


#def buy = low < low[lowpoint] and goodtime and high < high[highpoint] and RSI() > long_rsi_buy;
#def sell = high > high[highpoint] or RSI() < long_rsi_sell or eod;
def buy = low < getvalue(low, lowpoint) and goodtime and high < getvalue(high, highpoint) and RSI() > long_rsi_buy;
def sell = high > getvalue(high, highpoint) or RSI() < long_rsi_sell or eod;

AddOrder(OrderType.BUY_TO_OPEN, buy and vol2, name = "Buy", tickcolor = Color.GREEN, arrowcolor = Color.GREEN);
AddOrder(OrderType.SELL_TO_CLOSE, sell or bearish, name = "Sell", tickcolor = Color.RED, arrowcolor = Color.RED);


#def short = high > high[shortpoint] and high < SimpleMovingAvg(length = short_sma) and goodtime and low >= low[coverpoint];
#def cover = low < low[coverpoint]  or low > SimpleMovingAvg(length = short_sma) or eod;
def short = high > getvalue(high, shortpoint) and high < SimpleMovingAvg(length = short_sma) and goodtime and low >= getvalue(low, coverpoint);
def cover = low < getvalue(low, coverpoint)  or low > SimpleMovingAvg(length = short_sma) or eod;



AddOrder(OrderType.SELL_TO_OPEN, short and vol2, name = "Short", tickcolor = Color.RED, arrowcolor = Color.RED);
AddOrder(OrderType.BUY_TO_CLOSE, cover, name = "Cover", tickcolor = Color.GREEN, arrowcolor = Color.GREEN);


#
Thank you very much for all of this.

I have never used getvalue() so this is completely new to me.

The reason some of them have if thens with the same value is because I was going to do some backtesting on using different values there, but for now wanted them to be the same either way.

def vol2 = VolumeAvg(210) and volume >= 10000;
This was supposed to get the volume average of the last 210 candles and make sure it is over 10000. I had this when I was looking at some low float stocks. But I haven't been recently so I may just delete that.
 
Last edited:

halcyonguy

Well-known member
VIP
Lifetime
Thank you very much for all of this.

I have never used getvalue() so this is completely new to me.

The reason some of them have if thens with the same value is because I was going to do some backtesting on using different values there, but for now wanted them to be the same either way.

def vol2 = VolumeAvg(210) and volume >= 10000;
This was supposed to get the volume average of the last 210 candles and make sure it is over 10000. I had this when I was looking at some low float stocks. But I haven't been recently so I may just delete that.

if you want to read a value of a variable from a different bar, you use an offset,
abc[2] , this will read the variable from 2 bars before the current bar.

getvalue() is primarily used in fold loops, but can be used elsewhere.
sometimes, thinkscript complains when formulas are used as an offset.
sometimes getvalue() can be used to read a value from a different bar, when an offset doesn't work.
getvalue( abc , 2 ) is the same as abc[2]

https://tlc.thinkorswim.com/center/reference/thinkScript/Functions/Others/GetValue
 

berodney

New member
if you want to read a value of a variable from a different bar, you use an offset,
abc[2] , this will read the variable from 2 bars before the current bar.

getvalue() is primarily used in fold loops, but can be used elsewhere.
sometimes, thinkscript complains when formulas are used as an offset.
sometimes getvalue() can be used to read a value from a different bar, when an offset doesn't work.
getvalue( abc , 2 ) is the same as abc[2]

https://tlc.thinkorswim.com/center/reference/thinkScript/Functions/Others/GetValue
This is great "getvalue( abc , 2 ) is the same as abc[2]" is such an simple, but great explanitation. Definitely helps more than the thinkscript reference. I'll definitely be using getvalue more in the future.

Is there a way to make the short SMA a different value?
Code:
SimpleMovingAvg(length = short_sma)
Or does that have to be a constant?

Thanks again for all your help
 

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.
Top