I finally found some time this week to have a crack at it and have made a small milestone with basic data streaming. I thought it might be worth sharing should others be looking at doing a similar thing. The code and a sample script are available on Github.

I am moving at a glacial pace on this side project but I have a couple of new miles-stones that I think are worth mentioning here. I see some others are interested in store development so maybe we can help each other out in understanding the inner workings. If you have any questions I am happy to share more (potentially wrong) knowledge. :)

Current Status

Streaming (Integrated the trading_ig streamer into the store and created an IG data feed to load the ticks)

New: IG Broker: Performs the open position check when initialized to track existing positions

New: Opening and closing of simple Market orders using the self.buy() and self.close() is now supported.

Still a very dirty development with lots of Oandastore methods that may or may not be needed. My aim is to only keep what is needed but am I not familiar enough with the inner workings yet. Will clean up as I learn more.

Known Issues

On my MAC i get a 'fund mode' attribute error from the broker observer when running cerebro. Oddly enough on my Windows work machine, this does not happen. If you try to run the store and get a similar error, cerebro needs to be initialized with stdstats=false for now until I fix it.

New: expiry, guaranteed_stop, time_in_force, and good_till_date parameters
can now all be passed as key word arguments during order creation and handled
appropriately. Defaults are used where no kwarg is passed.

New Issue

_Value for header {Version: 2} must be of type str or bytes, not <class 'int'>_

If you see it, you should make sure you have the latest trading_ig module code which this store relies upon.

New: Improved streamer setup. Can use the same streamer for multiple get_instruments rather than creating multiple streamers

New: Manual pull of cash and value

New: Account cash and value live streaming

FIX: Level Set during order creation caused MARKET Orders to be rejected can now all be passed as key word arguments during order creation and handled appropriately. Defaults are used where no kwarg is passed..

Improved streamer setup. Can use the same streamer for multiple get_instruments rather than creating multiple streamers

Manual pull of cash and value

Account cash and value live streaming

FIX: Level Set during order creation caused MARKET Orders to be rejected can now all be passed as key word * arguments during order creation and handled appropriately. Defaults are used where no kwarg is passed.

New: Historical data download for backtesting

New: Printing of remaining data download allowance (will later be updated to be a store notification, once notifications are working)

Improved streamer setup. Can use the same streamer for multiple get_instruments rather than creating multiple streamers

Manual pull of cash and value

Account cash and value live streaming

FIX: Level Set during order creation caused MARKET Orders to be rejected can now all be passed as key word * arguments during order creation and handled appropriately. Defaults are used where no kwarg is passed.

New: Parameter backfill_bars allows you to set how many bars to backfill from the start. Since the IG api places restrictions on the number of historical data points a user can download per week, this parameter allows a user to limit the amount of historical data downloaded to only the required amount.

Current Functionality

Basic instrument streaming

Performs the open position check when initialized to track existing positions

Opening and closing of simple Market orders using the self.buy() and self.close() is now supported.

Improved streamer setup. Can use the same streamer for multiple get_instruments rather than creating multiple streamers

Manual pull of cash and value

Account cash and value live streaming

FIX: Level Set during order creation caused MARKET Orders to be rejected can now all be passed as keyword * arguments during order creation and handled appropriately. Defaults are used where no kwarg is passed.