# Variables

Take a look at this strategy:

1 enter long when (

2 day == Monday and time >= 10:15 and time <= 13:37

3 ) or (

4 day == Tuesday and time >= 12:00 and time <= 12:30

5 )

6

7 exit long when (

8 day == Monday and time >= 10:15 and time <= 13:37

9 ) or (

10 day == Tuesday and time >= 12:00 and time <= 12:30

11 )

2 day == Monday and time >= 10:15 and time <= 13:37

3 ) or (

4 day == Tuesday and time >= 12:00 and time <= 12:30

5 )

6

7 exit long when (

8 day == Monday and time >= 10:15 and time <= 13:37

9 ) or (

10 day == Tuesday and time >= 12:00 and time <= 12:30

11 )

The time constraints for entering and exiting are the same and written twice - this is bad for readability and prone to errors - if you wanted to switch out Tuesday for Wednesday, you would have to do it in two places.

We can use a **variable** to solve this problem.

**Variables** are **named values**. We initialize them using the

=

definition operator. We
put the name of the variable on the left-hand side of the =

definition operator and a value on the right-hand side.
Once we've done this, we can refer to this value by a name, instead of copy-pasting it each time we need it.Here's an example:

1 # A variable can be a number

2 myFirstVariable = 42

3

4 # Or the result of an expression

5 mySecondVariable = 21 + 21

6

7 # You can use a variable's value in any expression simply by typing its name

8 areTheyTheSame = (myFirstVariable == mySecondVariable) # -> true

9

10 # Variables can change - they vary!

11 myFirstVariable = 100

12 # P.S. The value of areTheyTheSame is still true.

13 # Variables only change when the = operator is used.

2 myFirstVariable = 42

3

4 # Or the result of an expression

5 mySecondVariable = 21 + 21

6

7 # You can use a variable's value in any expression simply by typing its name

8 areTheyTheSame = (myFirstVariable == mySecondVariable) # -> true

9

10 # Variables can change - they vary!

11 myFirstVariable = 100

12 # P.S. The value of areTheyTheSame is still true.

13 # Variables only change when the = operator is used.

Let's rewrite our strategy using a **variable** for the time constraints:

1 timeIsRight = (

2 day == Monday and time >= 10:15 and time <= 13:37

3 ) or (

4 day == Tuesday and time >= 12:00 and time <= 12:30

5 )

6

7 enter long when timeIsRight

8 exit long when timeIsRight

2 day == Monday and time >= 10:15 and time <= 13:37

3 ) or (

4 day == Tuesday and time >= 12:00 and time <= 12:30

5 )

6

7 enter long when timeIsRight

8 exit long when timeIsRight

Looks much cleaner, right?

Variables are essential for writing QuantScript. In fact, we've been using variables all along the way -

open

, high

, low

, close

, volume

, day

and time

are all variables.
The only difference is they're built-in - you don't give them a value yourself, you just use them.Well, there is something else that's different about them - they can **travel through time**.