Accounting for ones own impact on the spread: Guilbaud-Pham strategy

Discussion in 'Automated Trading' started by stochastix, Jul 12, 2019.

  1. Let's say one has a rule/control that determines whether to Match the prevailing Bid or Offer or "Improve" Upon it by one Tick (in this case penny) conditional upon the 'current' spread level, current time index (discretized by some minimum increment). In practice, there is lag between order placement and appearance in the limit order book, if I place two limit orders pegged to the inside NBBO improving by 1 penny on each side, my next quote shows the spread jump downwards by 2 pennies, this causes a new control that has perhaps different match/improve policies, so it withdrawls the improving orders, and the spread jumps back upwards by 2 pennies, causing it to go back to the previous conrol where it re-places the improving orders and gets caught in this 2-cycle .. ...
    If I try to anticipate the impact in the observed market spread of my own orders, I do not know the exact timing, so I may downward bias the applied control based on state of the limit order book.
    Does one have to tag or get some unique id when the improving orders are placed, and try to filter them out of the Level2 data ?
    I made a post about it at
  2. qlai


    You mean your algo is doing the pegging, not the exchange.

    Sure, you need to keep track of your orders in the book. Like keeping track of your position in queue, for example(you are not guaranteed to get there first and/or be the only one).
    I doubt very much you can do any market making with IB(or at least can't call it that)
    You are using their level2 data I assume.
    stochastix likes this.
  3. Well, my first attempt was to try and see if IB's pegged_to_primary order type would be sufficient, they say directed orders to nasdaq("ISLAND") will move up and down with the market. over on the right-hand-side "* Orders with a positive offset that are directed to Island will move up and down with the market." but I do not know any details of how they do this, or if the implementation is any good, i dont seem to be getting very favorable fills so far, but that might be because of the smart-router is not good for this. They charge 1 penny for cancelling directed limit orders

    Yeah, I will have to try it without using pegged-orders, but the full Level 2 data
  4. Well, I cannot, since IB's level 2 feed is aggregated and therefore i cant use it to separate based on order id