Transactional Cost on High Frequency Trading

[This article was first published on R – NYC Data Science Academy Blog, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Image result for high frequency trading

Special thanks to my great teammate, Qiang Ji.

This research explores two execution approaches i.e Market Taking and Opportunistic Market Making. In short, Market Taking (MT) method allows us to send market order and aggress market immediately with the latest quotes. While, Opportunistic Market Making (OMM) method is more risky, which will send limit orders and wait under the certain time limit for a more beneficial price to fill the order. More specifically, OMM can also be divided into 2 types according to how to set the limit order price: OMMMid will set the mid-price as limit price; OMMSide will set a limit price on your side. Undoubtedly, different execution methods should have different characteristics.

 

PnL Definition

The 3 execution methodologies can be summarized as:

It needs to be mentioned that, in this report, we define **execution PnL** for each order as:

where ExecutedPrice is the price where an order is finally filled; MidPrice is the latest mid-price when entering the market, and Buy is a signal {-1,1}.

 

Exit Rule

Our team also implement some rules for the stop loss and the time out.

  •  the timeout and stop loss have the **same priority**. Whichever happens the first, got to fill the order.
    –   for example, we have an order to buy at time 0(picture below), we implement OMMSide method and join the bid at $12.05. Then, at time 1, the price moved up. If our stop loss PnL = 0.05, then the stop-loss will be triggered because midprice minus offer price (12.105-12.05 = 0.055) exceed 0.05. There is more than one way to define the stop loss, our team chooses this method.
  • On the other hand, if the time 1 is after the timeout limit. Then the order will be executed based on the market price when the time is out

Execution Engine Building

The code will be on my GitHub

Implementing and Analysis

In this part, we will back-test 3 approaches with SL=-0.00035 and TTE=10, and report some statistics in the recapitulating table. In addition to required statistics, we also computed **Hitting Ratios**(proportion of positive PnLs), 95VaR and standard deviation of PnL for each method, in order to provide a more comprehensive view of the execution performance.

By comparing total PnLs of the 3 execution methods, we find that:

OMMSide > OMMMid > MT
OMMSide has the highest PnL as the result of successfully taking opportunistic executions. Another interesting thing we found is that all the 3 execution methods have a dramatic decline in PnL around 2 AM, Jan 11st. At that time, market quote happened to have an unexpected widen spread.

 

 

Since the original numbers of PnL are too small, we rescale them by multiplying 1000. As shown in the table, PnL of OMMSide is the highest and also volatile. PnL of MT is the lowest but also less risky. As compensation, the execution difficulty is also higher if you are seeking higher average PnL. OMMSide tended to have the highest execution time and also be more likely to touch SL or TTE.

PnL on Different Stop Loss
We set the TTE to be 10 s constant, we enumerate different SL to test its influence on PnL median as well as Execution Time median.

PnL on Different TTE

 

PnL on different Alpha Engines

The orders in the file are generated by different Alpha Engines. Since the final executed prices are given in the data, we can directly calculate the PnL for each order by combing corresponding mid-prices. After grouping order PnL for each engine, we may get some insights into the difference between AEs in execution costs.

From the perspective of execution PnL, we find MAR performed a better opportunistic method in execution, and got a positive average PnL. On the contrary, SOM performed worst, since it ordered many times but ended up with lowest average PnL. It seems more times you trade, more likely you will suffer a large transaction cost. That is to say, average PnL is negatively correlated with trade times.

Fill or Kill Execution

Another common OMM execution method in practice is called “Fill or Kill”. This approach also sends limit orders. But unlike previous OMM strategies: “Fill or Kill” would wait a certain time to see whether limit order could be filled. If time is out and order is not filled, then cancel (“kill”) the order. Obviously, implementing this strategy, all the executed orders should have positive PnL, while there also would be some canceled orders leaving NA in the PnL column. We believe it is worthwhile to dig into such a strategy and compare it with the others.

Conclusion:

As we can see, from the perspective of risk, MT has lowest VaR and std, while its average PnL is also limited, comparing with OMM methods. On the other hand, although OMMSide has the highest average PnL, its average execution time is also the largest which means it is exposed to more market risk. Further more, in consistence with common scense, OMMSide is more likely to touch SL and TTE limit than OMMMid, since it sets a more ‘opportunistic’ limit price.

To leave a comment for the author, please follow the link and comment on their blog: R – NYC Data Science Academy Blog.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)