Really ? Talked with one developer and STOP orders were not working consistently. MOREOVER, he couldn't get good technical support for his issue. Their Excel COM+ API interface was mombo buggy...and they couldn't/wouldn't fix it. I'm not impressed...at all...with Genesis tech support. I wouldn't bet the barn on them.
Code your OMS to use FIX, and you'll avoid a lot of headaches when time comes to switch brokers. It's not that hard, just take a look at quickfix. Abstract your strategy from market data feed, so you don't have to change your code every time you switch between data vendors.
Laser is not buggy one bit. I currently run strategies everyday and I don't think I could tell you of just one bug. It's just that Laser is very picky, whenever you have an error it is very easy to blame it on the software, but if you have programmed before you often find out that if you have an error and you check the code, and re check and re check again and swear that it is correct 99 times / 100 normall you end up finding out that the error is still on your part. I know exactly why your one guy couldn't place stop orders (probably) it's not the software, it's him. You have to be very precise w/ laser and ALL the information is all included you just have to read everything, sure the support isn't that great, but if you do read everything you should be able to get it, and after you do, it's truely the greatest, most powerful and stable API platform I've ever dealt with. I don't think I could ever switch to anything else
OK Then, what's wrong with this code to submit a stop limit order: C#/.NET API. I've included my 'test' code below, which should place a stop limit order for 1 share of EW at (43.10,43.00). (I've confirmed I CAN place this order via Laser...) GTStock myStock = m_Stocks[sSymbol].Stock; // Already instantiated and receiving data GTSession.GTOrder32 newOrder = new GTSession.GTOrder32(); myStock.InitOrder(newOrder); myStock.Ask(newOrder, 1, 43.00, GTSession.MakeMMID("AUTO")); newOrder.dwUserData = 0; // Hardcoded, just for this test newOrder.chPriceIndicator = '4'; // Stop limit code newOrder.dblStopLimitPrice = 43.10; // Stop price newOrder.place = GTSession.MMID_NYSE; // EW is listed on NYSE myStock.PlaceOrder(newOrder); Response is "@unsupported".
My experience has been that Laser is a very good platform, but still suffers from poor stop order execution quality and poor customer support, and these have been problems for a while now. In spite of these weaknesses, i would still recommend it, especially if cost, reliability and speed are more important for you than stop orders and customer support.
I think this is really good idea to code in FIX. What are the FIX restrictions with IB? If we use FIX, we should have an abstraction and isolation from changing the data vendors, right?