First, an admission - the exceptional scope and flexibility of Tango Trader means that a review that covered every single aspect of the product's capabilities would be enormous. Sadly, the Editor refused our pleadings to be allowed to produce a "War and Peace"-sized software review, so there was never any possibility of us covering every aspect of Tango Trader. Therefore, if some aspect of trading functionality isn't mentioned in this review, this in no way implies that Trader doesn't include it. On the contrary, from what we have seen over the past month of testing there's every likelihood that it does…
Settings, Customisation and Views
One of the aspects of Tango Trader that struck us most when preparing this review was its flexibility when it comes to managing trading workflow. There are sixteen possible types of View available (see Figure 1a), but the key point is that many of them can do considerably more than their name and basic functionality would suggest. Linking between windows and launching one window (or multiple windows) from another adds considerably to ease of use. For example, a simple ticker window can also launch a chart or a Vertical Dartboard (trading ladder).
|Algo Order View||Orders executed and running in Tango Trader that relate to automated models.|
|Charts||Real time tick or moving average charts|
|Markets||Market information display - prices, volumes, trades, depth of book (if available) etc|
|Message View||Messages relating to orders (e.g. buy/sell/cancel) and errors|
|Multiple Order View||Preparation and submission of multiple orders simultaneously|
|News View||Headlines and news articles from connected exchanges|
|Option View||Trading view for options|
|Orderbook||All currently working orders|
|P&L View||Trade accounting information and cash balance|
|Positions||Current open positions|
|Spreader Book||Orders related to the Spreader view|
|Spreader View||Trading window for spread trading|
|Ticker View||Last traded price, quantity and time stamp for a single instrument|
|Trades||Overview of all trade executions|
|Vertical Dartboard||Market ladder trading display also incorporating position and P & L info|
|Violation View||Displays any system-generated limit violations|
Figure 1a: Tango Trader Views
Apart from interaction between Views, as Figure 1b shows, Tango Trader's Settings dialogue box allows extensive customisation of individual Views. Most Views have their own settings folder and there are additional settings folders for system wide options. Each settings folder contains general settings in the top level of the folder and advanced settings in a subfolder.
Figure 1b: Tango Trader View Settings
A good example of the degree of customisation that is available via this approach is the settings folder for the Market View, which (apart from allowing you to add just about every imaginable column heading) can also be used to enable click trading functionality directly from the Market View (see Figure 1c).
Figure 1c: Click Trading View Settings
In common with certain other settings folders, click trading allows the users to add "keys" to their setup. These keys specify the products or product types for which entries are valid; a key can identify a specific product on one exchange, a type of product on all exchanges or simply an exchange. The system will always search for the most specific key that matches the user's action. For example, in addition to the global settings shown in Figure 1c, specific settings for two additional keys (all options on the CME and all stocks on ARCA) have also been established. (Please note, the settings shown in Figure 1c are simply for the purposes of illustration, they are not recommended for live trading!)
One of the most important concepts in Figure 1c is that of selecting No, Single or Double for functionality - such as deleting orders, matching an order in the book, fast own order on click, position trade-out on click and join on click - changes the way in which orders are entered/amended/deleted. For example, selecting No under "Match on click" and then clicking OK or Apply means that any subsequent left click on a bid or ask in the Markets view automatically populates the order input line at the bottom of the Tango Trader window with the price of that bid/ask and the volume quoted. In Figure 1d left clicking on the highlighted ask of 87.50 has auto-completed the corresponding highlighted price and quantity values on the order input line.
By contrast, if Single or Double had been selected under "Match on click" in the Click Trading View Settings dialogue then single/double clicking on a bid/ask would automatically submit the matching order directly into the market without any further steps being required.
Figure 1d: Auto-completion of order input line
If instead of matching an order already in the book you wanted to join a particular bid or ask, then you can use Tango Trader's middle click functionality. For example, if Join on click was set to Double then double clicking on a bid or ask in Markets view would automatically join it in the size you had specified in Settings=> Order => Default Quantity. Additionally, you can specify a number of ticks to increment the bid/ask joined in the "Join tick offset" field of the Click Trading View Settings dialogue.
Selecting the markets you want to display in Tango Trader can be accomplished in a variety of ways. Choosing Markets from the Views menu brings up the dialogue shown in Figure 2a (please note that this only shows a small subset of the markets accessible to Tango Trader). By default the dialogue opens with the Add Markets tab selected where you can search by symbol or name, as well as applying a variety of search filters.
To save time, you can also select only from symbols where you already have working orders (see Figure 2b). Or alternatively you can opt for a tree view that starts at the trading venue level and then allows you to progressively drill down through instrument type to individual instruments (and if applicable expiry months, exchange quoted spreads etc).
A further alternative is to use the Template tab to set up any one of a range of spread/strategy types.
A combination of Tango Trader's sixteen Views and a tightwad Editor who regards every page in Automated Trader as his personal fiefdom means that our coverage of individual Views has had to be rather selective. Although we have partially covered the Markets view under "Customisation" above, it has several other nice tricks up its sleeve that will facilitate trading workflow. For instance, right clicking in any column (apart from one such as Bid, Ask or Quantity) brings up a menu that allows the quick launch of other Views including the Vertical Dartboard (of which more below), Ticker and Chart.
However, right clicking on a column in the Markets view such as Bid or Ask opens up another trading route via a set of cascading menus (see Figures 3a and 3b). Selecting from these menus automatically populates the order input line with the values chosen.
If you want to go flat in a hurry then that's also possible in the Markets View; if you have set the "Position trade-out on click" parameter in Settings => Market Views => Click Trading to Single or Double then it's just a case of clicking on the desired value in the NetPos column. This will automatically submit a limit order of that size at the current bid/ask (obviously depending upon whether you are exiting a long or short position). Alternatively, you can opt to have the price of your limit order incremented up or down in accordance with the number of ticks you specify in the "Trade-out tick offset field" in Settings => Market Views => Click Trading.
If you right click in either the Bid Qty or Ask Qty column of the Vertical Dartboard view (see Figure 3c) these hierarchical menus can also be used in the same way to populate the order input line. For example, making the menu selection in Figure 3c and then clicking the Send button on the order input line places the bid for ten S & P E-mini contracts as highlighted in Figure 3d. Most other functionality and information in the Vertical Dartboard view is fairly self explanatory; with market stats and net position information at the top, delete buttons immediately above the price and volume columns, volume adjustment for orders to the left of these columns and a slider at bottom left that alters the resolution of the market displayed. (So when set to 1 each price displayed is one tick from the next, while increasing this slider value displays progressively coarser increments.)
In addition to back-testing, Tango also enables the simulation of strategy performance against live market data ("Simulation Context"), thus providing a logical step between in/out of sample back-testing and live trading. The obvious challenge with this type of functionality is how accurately simulated performance can really be made to match live performance. While the Simulation Context offers several ways of squaring this circle, three in particular are worth mentioning:
- Queue positioning - a strategy is running in Simulation Context and attempts to join the best bid with an order for 100 lots at a price of 55.25 when there is already an order in the book to buy 22 lots at a price of 55.25. If an offer to sell 50 lots at 55.25 then occurs, the trade simulator will only simulate the fill of 28 lots of the bid entered by the strategy.
- Latency - the "simuOrderDelay" field in the tango.config file can be used to specify a simulated latency for individual trading venues. For example, if a strategy running in Simulation Context attempts to cross the bid-ask spread by entering a bid at the best ask price and if there is a matching offer available, a simulated trade will only be triggered if that offer would still have been available after the simulated latency is taken into account.
- Market impact - after a trade is simulated, its impact is also simulated in the order book of the appropriate security and a simulated "last trade information" update is generated that reflects the time, quantity and price for this simulated trade. The "total trade quantity" for security is updated in a similar manner. Finally, the quantity of the simulated trade is subtracted from the relevant side of the related order book; this process continues until the simulator detects that one or more trades have occurred in the live market that have removed an equivalent quantity from the same side of the security's order book.
The Vertical Dartboard is linked to other Views, so if an order for the same security is entered by another means (such as via the Markets View) it will automatically also appear as appropriate in the Buy or Sell Qty columns.
Other aspects of Tango Trader that offer more than they say on the tin include the Orderbook and Positions Views. As one might expect, the Orderbook View lists all Tango Trader orders (active, completed, deleted etc). However, in addition to allowing the user to launch other Views - Ticker and Vertical Dartboard - the Orderbook View can be used to immediately activate, deactivate and delete individual or all orders (multiple orders can also be selected using the mouse plus the Ctrl or Shift keys).
A similar situation prevails with the Positions View. This groups open positions by instrument, but each group can be expanded to show the allocation across individual trading accounts. Right clicking on a position or group of positions gives you the option of trading out of those positions or all positions.
For example, in Figure 4a right clicking on the highlighted open position in account A1 JHE5 and selecting "Trade out Order" automatically brings up an order entry dialogue with all the fields automatically populated with the correct values required to close the position. If the right click had been on the instrument level line (that contains aggregate position info across all accounts for positions in ES 1006) then the order entry dialogue would have shown a buy quantity of 291 rather than 295 in order to take account of the two small long positions in accounts A1 JHE and A4. Finally, in a doomsday scenario, selecting "Trade out all Orders" would produce a dialogue pre-populated with all the orders required to flatten all positions in all trading accounts.
Those readers who were beginning to worry that we'd never get to the automated bit can relax; it starts here. The Tango Client (see Figure 5a) is RTS's platform for the development, testing and deployment of automated/algorithmic trading models. These models can range from simple directional trading strategies for single markets, to multi-legged multi-market arbs, to algorithms for finessing order placement. As mentioned above, the launch of Tango Trader now means that while these strategies can still be run in the automated Tango Client environment they can also be deployed alongside manual trading activity in Tango Trader.
Two key concepts when using the Tango Client are rules and strategies; a rule is similar in concept to a strategy template, the bare bones of a strategy are present (such as the basic mechanics of trading a spread or the crossing of two indicators) but not any specific parameters (such as the markets to which it is to be applied and precise entry thresholds). As will quickly become apparent in the "Putting it all together" section below, this distinction plays an important role in controlling risk and allocating resources. Rules are defined using the Tango Language and saved in XML file format. The Tango Language has expanded considerably since Automated Trader's 2007 review of the Tango Client. It offers a range of built-in classes, as well as allowing users to define their own. In addition, global and strategy level scoping are possible and the language now also includes a selection of built-in functions and operators, as well as allowing using-defined functions. The Tango Language Rule Editor also includes a syntax checker for validating rules - this is shown highlighted in red at the bottom of Figure 5b, which shows an extremely simple moving average rule. (N.B. This rule only calculates the value of the moving averages; it does not include any Tango Order Agents or trading logic and will therefore not execute any trades.)
Before a rule can be used to build a strategy, it must be saved on the Tango server (the green highlight in Figure 5b shows that the moving average rule has been successfully uploaded and is now included in the list of Tango rules on the server). Once uploaded to the server, rules can still be edited, but must be "acquired" first. Successful acquisition is denoted by the small padlock next to a strategy (as shown in Figure 5c) being replaced by a bullet point. After editing is completed, the rule can be locked by "releasing" it to prevent further changes.
Figure 5c shows a strategy in the process of being created from the moving average rule (highlighted in blue). The only fixed parameter in the rule was "INSTR" (the tradable - the code for which is highlighted in purple in Figure 5b) and this is in the process of being specified as the June 2010 S & P E-Mini using the Tradable Chooser dialogue. (Groups or sequences of tradables can also be specified to extend the scope of a strategy, as well as saving re-editing every time instruments such as futures or options contracts expire.) In Figure 5c, the default values for the changeable parameters in the moving average rule (the code for these is highlighted in blue in Figure 5b) have already been specified.
The Tango Client also provides extensive back-testing facilities; Figure 5d shows the simple moving average strategy set up for a short back-testing run. (Obviously in this case, because the rule from which the strategy is built contains no Order Agents or trading logic, no actual results will be generated from this run.) The red highlight shows the four instances of the strategy that have been created for the test - each with different parameter values. The parameters for the top instance (currently selected) can be seen in the blue highlight on the left and as can be seen these differ from the default parameters shown in Figure 5c. The Client's back-testing operates on a multi-processor parallel model, which means that each instance of a strategy can be tested on a separate server CPU, thus reducing total strategy back-testing time.
|Unbuilt||Default un-compiled state of a strategy that has just been created or edited.|
|Halted||Once a strategy has been compiled by using the "Build Strategy" command, its variables may still not be initialized. Once initialized, a halted strategy will be in an "Off" state.|
|Off||The strategy is ready to use, but no order/quote agents are active. Changing the state of an "Off" strategy to "On" activates it for live trading.|
|On||The strategy is now trading according to the rules defined in the code.|
Before a strategy can be deployed in a production environment - either directly in the Tango Client or in Tango Trader - it must be "built" and then "initialized". Any attempt to activate the strategy in Trader before doing this simply results in an error message. (The four possible states for strategies in Tango can be seen in Figure 6a*.)
Selecting a strategy in Tango Trader's Algo Order View automatically populates the order input line with the strategy's parameters. Figure 6b shows this for the moving average strategy outlined above; parameters the trader can change (time frame and moving average lengths) are in white, while the only fixed parameter (the symbol to be traded, in this the S & P E-mini) is in black. All the trader has to do to start running the strategy, is click the "Change" drop down, select "Activate" from the list and hit Send. It is also possible to activate a strategy in Trader directly from the Tango Client by turning it on in the left hand pane shown in Figure 5a.
It should be emphasised that the moving average strategy outlined above is an extremely rudimentary example; in practice, the combination of the Tango Language, Client and Trader can be used to build and deploy extremely sophisticated strategies. An inkling of the possibilities here is the spread order rule template that RTS has made available with the Tango Client. This includes a slew of advanced functionality such as automatic management of order book queue position, leg-leaning and missed hedge handling. Furthermore, in addition to the capabilities of the Tango Language, Tango also has access to all the functionality of MATLAB courtesy of RTS's partnership with The MathWorks.
Putting it all together
While a single interface for both automated and manual trading may not in itself be unique, the nature of the implementation in the case of Tango Trader most definitely is. There was an extremely frank exchange of views among the members of the review team when we were trying to agree upon a single word that we felt epitomised the product. One ex risk manager on the team kept repeating the word "control" like a parrot (he now sleeps with a copy of the Tango "Risk Management and Limit Server Administrator's Manual" under his pillow). He had a point, while simple limit checks (such as maximum number of trades per second and maximum long/short position) are available on the Tango Server, other far more sophisticated and powerful controls can also be applied via a dedicated Limits Server. Couple this with the granularity with which you can specify precisely which aspects of Tango Client rules and strategies can be accessed/changed by whom and how - and you really don't have much excuse for a blow up in your trading operation.
But that's still only part of the picture. Other members of the review team babbled on about the ergonomics of the Trader GUI, while others were enthused by the Tango Language. After telling them all to shut up, the final conclusion by the lead reviewer (me) was that the key is that Tango Trader is more than just the sum of its parts, except that there isn't actually just a single sum (we're not just talking imaginary numbers here - more hallucinogenic).
Consider the following scenarios across the business size/complexity spectrum. All of them can be readily accommodated by Tango Trader:
- Single trader: at the simplest end of the spectrum, a single individual developer/trader can build and deploy automated models alongside his manual trading activity - but he can also program the interaction of those models with his manual trading. Take a simple example; the trader likes to take discretionary intraday trend following positions in multiple markets, but would also like to smooth their equity curve by swing trading in a shorter time frame around those trends. Problem: this would result in too many trades for him to be able to handle manually. Solution: program a higher frequency swing trading strategy in the Tango Client that in its code references positions opened manually in Tango Trader. Multiple variations on these themes are also possible - scaling volume between auto and manual strategies, only swing trading with/against the manually traded trend and so on...
- Spread trading operation: multiple traders are manually trading spreads, which results in mismatches both at an individual and aggregate level. An automated "clean up" model runs in the background -and is activated by a combination of time, volatility and mismatch size to rebalance the overall position without requiring manual intervention.
- Broker: the broker can distribute proprietary execution algorithms that it has developed to its clients. It can tailor the parameter sets of those algorithms on a per client basis to prevent individual client instances of the algo trading against each other.
- Arcade: an arcade is talent spotting a large group of potential traders. To begin with new traders are allocated specific automated strategies to run on their instance of Tango Trader alongside their manual trading. Initially the traders can only adjust the automated strategies' parameters within a narrow range and using a small amount of capital. Based upon their performance (either on a combined on purely automated basis) the extent to which the parameters can be adjusted and the amount of available capital will be automatically increased once the trader exceeds certain risk/performance/time thresholds.
- Global prop trading operation: models and trading capital are passed between trading centres around the clock. Individual model parameter sets and trading limits for models are automatically adjusted to reflect local liquidity conditions and personnel.
The thing that struck the review team most forcefully about Tango Trader was that not only would it be able to handle all the above scenarios, but that it could also comfortably accommodate just about any variation or combination of them.
Joseph Heenan's official title with regard to Tango Trader is "Product Owner", though after putting up with the Automated Trader review team for the past month or so, he probably feels it should be "Product Martyr". Endless patience with all the dopey questions and great support made our task a great deal easier - many thanks Joe.
Worth the money?
Given all the various options and permutations, Tango Trader pricing varies considerably - especially when the number of users is taken into account. As an approximate guide, a trading group with just a handful of traders will probably be paying around USD2500 per month per trader. However, this would probably fall to nearer USD1000 per month per trader for a large arcade with 100+ users.
So - is Tango Trader good value? Well, while they might have argued non-stop about everything else relating to Tango Trader this was (thankfully) at least one thing the wretched review team could agree on. Yes it is - in spades. We wasted a great deal of time trying to come up with scenarios, business models and trading situations that Trader couldn't handle and failed. Control, flexibility, versatility and scalability - pretty much sums it up.
The Automated Trader review process and team
The noise like a leaky kettle you can hear is the Editor's response to this section heading, though quite why he should think it so hilarious that our software reviews have a process is inexplicable to the review team. Anyway, in view of the number and scale of the reviews we are now undertaking, we thought readers might appreciate an insight into how it all works.
The software review process usually starts at least six weeks before going to press and in most cases considerably earlier. The first step is obviously delivery and installation of the product to be tested. Unless this is something that the vendor definitely includes as part of the cost of the product, we always undertake this in house and comment on the experience. This is particularly important where server-side components have to be installed; we want AT readers to know exactly how much pain recompiling Linux kernels etc they might have to go through.
Once we have the product installed, we try to break it. The team has a natural talent for destruction, and when it comes to dumb user errors we wrote the manual. Those on the team with a trading background will be trying to get a handle on whether whatever it is they are testing is something that will deliver under extreme pressure (which to their mind means kicking their workstation round the office). Other members of the team will be looking at factors such as hardware efficiency, application stability and more specialised areas such as risk control.
The next step is to have a huge argument ("constructive exchange of views"). It's at this stage that if the consensus is that we have a real turkey on our hands, we give the vendor the chance of withdrawing from review. Since the Editor is so damn mean with his precious pages, we don't want to waste them on something that doesn't work. By definition, anything that gets past this stage is usually half-bearable. After a further period of live testing (which may be anything from one month to more than a year) it's time to compare notes. Though there isn't a formal scoring process as such, the key criterion is whether or not a review team member would be happy using the application in real life in the context of their particular niche (e.g. trader, risk manager, sys admin etc) and if so - how happy? And then finally, some idiot actually has to write a review that incorporates all these informed opinions…
Pete Farrow: Pete has a first class honours degree in electronic engineering, so we've always had difficulty in understanding why he opts to spend all his life in our server room. As sys admin, his domain includes a respectable selection of mid and high end HP ProLiant servers, a handful of GPU servers and workstations, a random collection of Cisco/Netgear/Foundry Networks networking gear plus all the techno-rubbish in the office upstairs. Officially, he's an independent contractor and has a web site at www.togethia.net - but we very much doubt there's anything there, as all his time is spent fixing things the rest of the team have broken and boring us all to death about Linux.
Dave Knox: one of AT's fine selection of Daves, Mr Knox is our most recent recruit. He used to be responsible for Citi's European Liquidity Portfolio and Euro Balance Sheet (AKA a *&^%load of EUR bonds) so has a pretty good trader's insight into the concept of software that has to perform when it matters. He has also been an invaluable source of introductions to members of…
…The Wrecking Crew: AT has always been fortunate in having readers with opinions. However, some of them have gone a step further and kindly share their expertise in the review process. Many are highly active quants and traders, while others are resting between roles. Whatever the case, and despite their beer consumption, we really appreciate their real world input. Thanks gents.
Horace: (we don't know his second name and we're not sure we believe the first one) used to work in the Metropolitan Police Fraud Squad in the UK before holding a series of risk management and security posts at various major banks. This has given him an unpleasantly warped outlook on human nature, which we are happy to leverage in the context of evaluating the limit/risk management capabilities of review products.
Me. [I've deleted this section. He goes on far too long about hiself, nobody would believe a word of it, and we really can't waste the space - Ed.]