Dev Time for a FIX based OMS

Discussion in 'Automated Trading' started by rohan2008, Mar 14, 2019.

  1. rohan2008

    rohan2008

    I want to develop a simple OMS application that can manage orders and positions through FIX protocol (ignoring the strategy engine); just wondering; how much time would it take to develop a basic order management system that can connect to IB Gateway and manage orders (overnight/weekends)? The application should be able to handle both equities and futures to start with.

    How many man days of dev work are we looking at if I were to use C++ and a fix library (say http://www.quickfixengine.org/ or ?...suggestions ) on Linux? What version of FIX should I use? How easy/hard is it to reuse the same application to connect to a different broker... say advantage futures or lime brokerage.

    Any suggestions can help, thanks.
     
  2. qlai

    qlai

  3. 2rosy

    2rosy

    you don't choose the version of fix. it's whatever IB is using. if you know fix (quickfix lib) and can program you could get something going in under an hour; wont be great. You could probably find some helper functions that build orders, cxl, cxl_replace
     
  4. Why would someone use FIX as opposed to the IB API? For broker portability?
     
  5. rohan2008

    rohan2008

    Yes, its for portability....

    @2rosy, yes I am a developer. TWS api seems to be fairly straight forward, even a novice can come up something in an hour or two but FIX seems to be a little more involved (I have not yet tried to study it). I would like to compare TWS and IB FIX before I start coding. I just wanted some basic feedback about FIX vs TWS before I dig deeper into this topic.

    How hard is it to get through the learning curve and learn FIX; and perhaps the involved technical quirks (if any)? How does the latency profile look like when I place orders... seems to be FIX library dependent? Any specific pointers on what I should look at when I research this.
     
  6. Are you doing "future you" masturbation? https://www.howitactuallyworks.com/archives/future_you_masturbation.html
     
    fan27 likes this.
  7. Robert Morse

    Robert Morse Sponsor

    I can't tell you how long your process will take. I can tell you I have worked with a few experienced programmers that tried to create their own fix server and certify with either Sterling FIX or Realtick FIX. They both ended up taking a lot of development time (Months) and in the end went another way-back to C++. I'm not a programmer or expert, but it looks like in addition to your server, you need another server with your FIX engine. So your trading decisions occur on your base server, you send instructions to the FIX server, which then sends the order down the pipe/broker of your choice. This is generally more complicated and slower that trading from your base server. So why do any traders choose this path? The typical reason is that they use a number of prime brokers. Let's say they have an account at IB, Lightspeed, GS, ML, MS, etc. Maybe they are running a number of SMAs or only get a locate at one broker and not at another or have a hedge fund at one Prime and SMA at another etc. This allows them to quickly direct orders to any of those brokers from one trading server and one FIX server with a FIX licence. It often also requires paying for a private VPN to each broker.

    I do not find any advantage for a retail account with one clearing broker to use FIX.
     
    rohan2008 and qlai like this.
  8. 2rosy

    2rosy

    fix is a protocol; you can use any language. you dont need a server or anything more than what tws requires other than a fix library (quickfix is free). whatever you write with tws will be similar for a fix connection.

    i usually create helper functions to build orders. no matter the protocol or api used i would still create these...
    Code:
      public static OrderRequest createOrderRequest(double qty, double price, String sym, int sd, String source, String exchange, String isin) {
            return OrderRequestBuilder.create()
                    .withOrderQty(qty)
                    .withPrice(price)
                    .withSymbol(sym)
                    .withMsgType(MsgType.NEW)
                    .withExchange(exchange)
                    .withSide(sd)
                    .withUserInfo(source)
                    .withISIN(isin)
                    .build();
        }
     
    rohan2008 and nooby_mcnoob like this.
  9. qlai

    qlai

    Agreed.
    The only way to get a good estimate is to clearly and fully define the functionality required, otherwise expect to go back and forth and pay by the hour. Don't forget that both quickfix and IB API requires multi-threading which makes it more difficult to integrate into existing application.
     
  10. 2rosy

    2rosy

    The libraries ,fix or tws, you use are multithreaded. As a user of those libs you don't need to worry about threading. Just implement the required interface and thats it. Its not as complicated as others think
     
    #10     Mar 15, 2019