# Implementing UT Bot in TradeStation

UT Bot is a very popular script in my TradingView account. Quite a few people asked me to translate it to another programming languages. I already created a version in Python. In this article I’ll show you a way to implement UT Bot strategy in EasyLanguage for TradeStation. I started to look more into TradeStation because of the automation and screener features of TradeStation. nNew

To create a new script in TradeStation click on EasyLaguage button on the TradeStation dashboard:

### Writing the code

Create new strategy and you can start coding. First let’s define parameters for our script. We need only 3 parameters: Price source, sensitivity of the algorithm and ATR length.

```inputs:
Price( Close ) [DisplayName = "Price"],
sens( 1 ) [DisplayName = "Sensitivity"],
atr_len( 10 ) [DisplayName = "ATR Length"];
```

Next we have to defined all the variables we’ll be using in the script:

```variables:
xATR( 0 ),
nLoss (0),
xATRTrailingStop(0),
cur_pos(0),
above_sig(false),
below_sig(false),
sell_sig(false);
```

Next we’ll compute ATR and nLoss (trailing value) variables:

```xATR  = average(TrueRange, atr_len);
nLoss = sens * xATR;
```

Now let’s compute trailing price, because of EasyLanguages if’s it looks a bit bulky:

```if Price > xATRTrailingStop[1] and Price[1] > xATRTrailingStop[1] then
xATRTrailingStop = Maxlist(xATRTrailingStop[1], Price - nLoss)
else begin
if Price < xATRTrailingStop[1] and Price[1] < xATRTrailingStop[1] then
xATRTrailingStop = Minlist(xATRTrailingStop[1], Price + nLoss)
else begin
if Price > xATRTrailingStop[1] then
xATRTrailingStop = Price - nLoss
else
xATRTrailingStop = Price + nLoss;
end;
end;
```

Next let’s compute a variable that will store current position of the strategy. 1 -> Long, -1 -> Short, 0 – Flat

```if Price[1] < xATRTrailingStop[1] and Price > xATRTrailingStop[1] then
cur_pos = 1
else begin
if Price[1] > xATRTrailingStop[1] and Price < xATRTrailingStop[1] then
cur_pos = -1
else
cur_pos = 0;
end;
```

Now let’s compute buy and sell signals, their logic is pretty simple:

```above_sig = Price >= xATRTrailingStop and Price[1] < xATRTrailingStop[1];
below_sig = xATRTrailingStop >= Price and xATRTrailingStop[1] < Price[1];

buy_sig  = Price > xATRTrailingStop and above_sig;
sell_sig = Price < xATRTrailingStop and below_sig;
```

The last thing is to trigger orders. You can see that code for orders looks almost like a human language:

```if sell_sig then
SellShort  ( !( "UT_BOT_SE" ) ) next bar at market;

BuyToCover ( !( "UT_BOT_SX" ) ) next bar at market;

Buy ( !( "UT_BOT_LE" ) ) next bar at market;

if sell_sig then
Sell ( !( "UT_BOT_" ) ) next bar at market;
```

Next save your script and validate it. If you won’t see any errors then we’re ready to apply it to your chart:

### Backtesting Strategy

After that you should see orders plotted on your screen:

To see strategy performance you can click Data -> Strategy Performance report:

You should see performance like that in a popup:

```inputs:
Price( Close ) [DisplayName = "Price"],
sens( 1 ) [DisplayName = "Sensitivity"],
atr_len( 10 ) [DisplayName = "ATR Length"];

variables:
xATR( 0 ),
nLoss (0),
xATRTrailingStop(0),
cur_pos(0),
above_sig(false),
below_sig(false),
sell_sig(false);

xATR  = average(TrueRange, atr_len);
nLoss = sens * xATR;

if Price > xATRTrailingStop[1] and Price[1] > xATRTrailingStop[1] then
xATRTrailingStop = Maxlist(xATRTrailingStop[1], Price - nLoss)
else begin
if Price < xATRTrailingStop[1] and Price[1] < xATRTrailingStop[1] then
xATRTrailingStop = Minlist(xATRTrailingStop[1], Price + nLoss)
else begin
if Price > xATRTrailingStop[1] then
xATRTrailingStop = Price - nLoss
else
xATRTrailingStop = Price + nLoss;
end;
end;

if Price[1] < xATRTrailingStop[1] and Price > xATRTrailingStop[1] then
cur_pos = 1
else begin
if Price[1] > xATRTrailingStop[1] and Price < xATRTrailingStop[1] then
cur_pos = -1
else
cur_pos = 0;
end;

above_sig = Price >= xATRTrailingStop and Price[1] < xATRTrailingStop[1];
below_sig = xATRTrailingStop >= Price and xATRTrailingStop[1] < Price[1];

buy_sig  = Price > xATRTrailingStop and above_sig;
sell_sig = Price < xATRTrailingStop and below_sig;

if sell_sig then
SellShort  ( !( "UT_BOT_SE" ) ) next bar at market;

BuyToCover ( !( "UT_BOT_SX" ) ) next bar at market;