Building a High Frequency ATS: use Software package or code everything myself

Discussion in 'Automated Trading' started by bigfurrymonster, Apr 22, 2010.

  1. Building a High Frequency ATS: use Software package or code everything myself

    I am planning on creating an automated scalping system for Forex. I have programming experience (C++/Python) and extensive experience in manual Forex scalping. My goal is to be able to very accurately backtest my scalping strategies and automate their execution.

    More specifically the requirements of my system would be the following:
    -I need my backtester to be able to accurately look at tick by tick Bid/Ask data from different brokers simultaneously and simulate slippage
    -Fast (100ms-500ms execution time) multi-broker execution capability
    -I don t need any charting tools nor manual trading capabilities nor a nice UI

    My first question is: is this realistically feasible? I have been trading manually with various brokers and I know that under normal conditions they support relatively high frequency scalping with reasonable slippage (order execution in less than 500ms). I was wondering if their API support such high frequencies.

    My second question is: should I use a software package or should I code everything by myself? More specifically:
    1) should I use a software package to backtest and execute my strategies or
    2) should I code my own backtester but use a software package to execute them or
    3) should I write everything (backtester + execution engine)

    I am very well aware that writing a reliable execution engine is a huge task and I’d rather use an existing solution if it s available. However I was wondering if solutions like TradeStation, Multicharts, Ninjatrader etc.. were designed and reliable enough for High Frequency trading. I’d really like to not reinvent the wheel and I am willing to pay if there is already an existing tool that would meet my requirements but so far the impression I have is that all these software packages are not really meant to be used for High Frequency Trading.

    As for the backtesting tool, this would be much easier to code by myself and after playing with the aforementioned tools I found out that it was impossible or very difficult to do what I wanted to do (correct me if I’m wrong). Ninjatrader was the closest to what I needed but I was very disappointed when I found out that it cannot import Bid/Ask tick by tick data (apparently it will be a feature of NT7 but it’s still in beta) and that using simultaneous tick data from different sources for the same instruments was only doable by using some twisted tricks.

    Which way would you go, 1), 2) or 3)? Could you please state why you would do so?
    Feel free to ask for more details if I wasn’t clear.

    Thank you
  2. You need 3)
    More work initially, but will catch up, eventually. And have total flexibility.

  3. LeeD


    I have to agree with fullautotrading.

    You have to do backtesting yearself because very few software packages support sub-second time stamps on data or level 2 quotes in backtest; you'll also have to dop execution yourself because few pieces of software (if any) support more than one simulataneous broker connection.

    If sub-second timestamps and level 2 are not essencial and you are prepared to write broker interfaces (using broker API and trading software API), you can try using NeoTicker for both tasks.
  4. snp500


    To be competitive, you might have to build everything from the ground up. Some of the fastest HFT systems process, enter, and get the orders to the exchange in approximately 1/5th of a millisecond. 500 times faster than what you're trying to do.

    With Ninjatrader you can probably already achieve 100ms. 40ms to process the data and order, then another 60ms to the exchange. This is by default.
  5. snp500


    you could also look into OpenQuant if you're just trying to build a sophisticated system from home.

    If you're doing CME-based products, look into hosting the server at Equinix. It'll cost a little money, but if you're trying to be competitive, then it's what you have to do.