December 31, 2016
- Misc bugfixes, code improvements, cleanup and abstraction
December 30, 2016
- Bugfixes and code cleanup
- Max # of threads is set to 1 (single-threaded) by default and can be changed using the
max_threads
run-time parameter inBlotter()
andAlgo()
. It's recommended that you set this parameter based on your strategy's needs and your machine's capabilities (strategies trading a handful of symbols probably won't need to tweak this parameter).
December 25, 2016
- Threading-related code improvements:
tools.resample()
syncs last timestamp of all symbols;add_stale_tick()
checks for real tick with same index before triggering_tick_handler()
Instrument
object not defaults to strategy'sbar_window
andtick_window
if no window specified (to get full bar window, useinstrument.get_bars()
or simplyinstrument.bars
)
December 22, 2016
add_stale_tick()
made thread-safer
Blotter
market data handlers now using threaded, non-blocking architecture.- Misc bugfixes, code improvements, cleanup and abstraction
December 21, 2016
- All market data events are now asynchronous / non-blocking
- Misc bugfixes, code improvements, cleanup and abstraction
December 20, 2016
- Minor bugfixes, code improvements, cleanup and abstraction
- Minor bugfixes, code improvements, cleanup and abstraction
December 19, 2016
- Fixed bugs that may occur on multi-instrument strategies
- Misc code improvements, cleanup and abstraction
December 18, 2016
- Bugfixes
- Introduced an all new
Workflow
module for downloading, cleaning, preparing and uploading market data to the database - Backtesting can now be done using CSV files (converted into a QTPyLib-compatible format using the
Workflow
module) - Misc bugfixes and code improvements, cleanup and abstraction
- Requires ezIBpy >= 1.12.44
December 12, 2016
- Bugfixes
December 11, 2016
Blotter
automatically backfills missing historical data for back-testing (based on thestart
andend
parameters) and live-trading (based on thepreload
parameter)- Better local timezone detection
- Requires ezIBpy >= 1.12.42
- Misc bugfixes and code improvements/cleanup
Note regarding backfilling: Backfilling is currently supported for strategies with 1-minute or higher resolution. Historical data availability is subject to Interactive Brokers Historical Data Limitation.
December 7, 2016
- Changed to lowercase
utf-8
encoding in file's header
December 6, 2016
- Fixed bug introduced in version
1.5.42a
- Forcing expiry in
symbols.csv
to be stored asint
- Fixed bug in
Blotter.log2db()
(closing issue #36) - Fixed multi-instrument strategy initialization (closing issues #37 + #38)
- Misc bugfixes and code improvements/cleanup
December 4, 2016
- Fixed bug that caused
Blotter
to store data in MySQL before timezone was set (possibly resulting in out-of-sequence time-series for historical data) by ignoring the captured first tick. Blotter
now removes out-of-sequence ticks/bars from historical data (should fixissue #31
)- Misc bugfixes and code improvements/cleanup
December 1, 2016
- Portfolio playing nice with multi-symbol portfolios
- Cleanup portfolio data before saving
- Implemented shorter delay and more elegant code in
Blotter.drip()
(used by the backtester) force_res
is now always on for time-based bars- Renamed
Blotter.listen()
toBlotter.stream()
- Misc bugfixes and code improvements
November 29, 2016
load_blotter_args()
moved toBroker
class file to be used by clientsBroker.get_portfolio()
now returns empty portfolio object as default when symbol is specifiedReports
uses unified logger and arg parsing- Misc bugfixes and code improvements
- Requires ezIBpy >= 1.12.41
November 22, 2016
- Fixed
Broker
logging initilizer - Requires ezIBpy >= 1.12.39 (solves misc issues with expired contracts)
- Blotter saves expiration dates for Futures and Options based on ezIBpy's
contractDetails()
data
- Misc bugfixes and code improvements
- Requires ezIBpy >= 1.12.38
November 21, 2016
- Fix parsing of contract expiration
November 16, 2016
- Fixed command line agrument parsing issues
- All params in
Algo()
andBlotter()
are now explicit and are overridden in runtime using command line arguments - Make sure expiry values aren't decimals
- Requires ezIBpy >= 1.12.36
- Renamed
force_resolution
toforce_res
inAlgo()
- Using unified logging from latest
ezIBpy
(useself.log.LEVEL(...)
instead ofloggig.LEVEL(...)
in your strategies) - Misc bugfixes and code improvements
November 15, 2016
- Set
ticksize
to0
for stale ticks (for when using"force_resolution" = True
)
November 13, 2016
- Requires ezIBpy >= 1.12.32
- Added support for
tif
(time in force) parameter in order creation. Options are:DAY
(default),GTC
,IOC
andGTD
.
November 12, 2016
- Requires ezIBpy >= 1.12.31
- Added
instrument.get_contract_details()
andinstrument.tickerId()
methods (see API reference section in docs for more info) futures.get_contract_ticksize()
marked as deprecated (instrument.get_ticksize()
orinstrument.ticksize
instead)- Ignoring
ticksize
parameter inorder()
(ezIBpy's auto detects min. tick size based on contract spec.)
- Interval-based bars are now tread-safe and working correctly when
"force_resolution" = True
November 11, 2016
- Fixed a bug that prevented backtesting second-level resolution strategies
- Introduced
force_resolution
parameter inAlgo
to force a new bar on everyresolution
even if no new ticks received (default is False)
- Fixed parsing of flag params (related to issue #17)
November 10, 2016
- Fixed bar events in backtesting mode to fire every 250ms instead of 2.5s (closing issue #21)
- Fixed parsing of
backtest
param inAlgo
(closes issue #17)
- Fixed issue that caused errors when bar resolution was set to seconds (closing issue #18)
- Requires ezIBpy >= 1.12.29
Blotter
uses refactored logging in ezIBPy 1.12.29
November 9, 2016
Blotter
andAlgo
now accepts all command-line arguments as__init()__
parameters (closing issue #17)
November 8, 2016
- Blotter logs warnings and errors sent by TWS/GW
- Upped version number due to malformed submission to PyPi (1.5.1)
- Wait 5ms before invoking
on_fill()
to allow portfolio to sync from TWS/GW - Renamed Instrument object's
margin_max_contarcts()
tomax_contracts_allowed()
- Added
get_bar()
andget_tick()
methods to Instrument object (as well astick
andbar
properties) - Misc bugfixes and code improvements
November 6, 2016
- Added
move_stoploss()
to instrument object. This method auto-discover orderId and quantity and invokesself.modify_order(...)
- Fixed bug that prevented modification of stop orders using
modify_order(...)
- Fixed rederence to renamed and modified method (
active_order_id
=>active_order
)
- Using the new
IbPy2
's PyPi installer; no separate install ofIbPy
is required - Using latest
ezIBpy
(now also usingIbPy2
)
November 2, 2016
- Added support for Orderbook-based strategies via
on_orderbook(...)
(requires the--orderbook
flag to be added to Blotter) - Added bar(s), tick(s), quote and orderbook properties to the
Instrument
object
October 25, 2016
- Made changes to
.travis.yml
to help Travis-CI with its Pandas build issues
- Creating synthetic ticks for instruments that DOESN'T receive
RTVOLUME
events (issue #9) futures.make_tuple(...)
auto selects most active contract when no expiry is provided (CME Group Futures only)- Misc bugfixes and code improvements
October 24, 2016
- Removed debugging code
- Fixed bug caused by
self.record
(closing issue #12) - Misc bugfixes and code improvements
October 23, 2016
- Bugfix: Updated backtesting mode to use correct variable names (closing issue #10)
October 21, 2016
- Full support for Options trading (greeks available upon quotes, ticks and bars)
- Improved asset class and symbol group parsing
- QTPyLib's version is now stored in MySQL for smooter upgrades
pip
Installer requires ezIBpy >= 1.12.23- Misc bugfixes and code improvements
October 18, 2016
- Misc bugfixes
- Continuous Futures contract construction is now optional (defaults to
True
) - Added
futures.make_tuple(...)
for automatic tuple construction for Futures
October 14, 2016
- Using a synthetic tick for CASH contracts (cash markets do not get RTVOLUME)
September 30, 2016
- Fixed issue that prevented from blotter to assign
asset_class
to stocks
September 29, 2016
- Rounding numbers in SMS message template
September 28, 2016
- Fixed sms formatting by sending SMS before logging trade
September 27, 2016
- Added open trades + unrealized PNL to
instrument.trades
andinstrument.get_trades()
- Switched DataFrame length check to
len(df.index)>0
(faster thandf.empty
orlen(df)>0
in my checks) - Fixed last price in recent orders
September 26, 2016
- Introduced
instrument.trades
/instrument.get_trades()
as quick access to the instuments trade log
- Updated pip installer to use ezIBpy >= 1.12.19
September 22, 2016
- Added support for working with Volume based bars (by using
nV
in theresolution
parameter)
September 20, 2016
- Fixed setup import to prevent built error
- Added option to send limit stop orders
tools.round_to_fraction()
now auto detects decimals based on resoution rounder- Fixed Eurodollar's base url in
futures.py
- Fetching correct ticksize for futures (including those that aren't using decimal ticks, eg 1/32 for bonds)
September 19, 2016
- Strategies now have access to IB Account info via
self.account
- Added support for
Fill-or-Kill
andIceberg
orders (see API docs) - Automatic re-reconnection to TWS/GW when connection lost