Pythonic Wrapper for IbPy
Project description
ezIBpy: Pythonic Wrapper for IbPy
=================================================
.. image:: https://img.shields.io/pypi/pyversions/ezibpy.svg?maxAge=2592000
:target: https://pypi-hypernode.com/pypi/ezibpy
:alt: Python version
.. image:: https://img.shields.io/travis/ranaroussi/ezibpy/master.svg?
:target: https://travis-ci.org/ranaroussi/ezibpy
:alt: Travis-CI build status
.. image:: https://img.shields.io/pypi/v/ezibpy.svg?maxAge=60
:target: https://pypi-hypernode.com/pypi/ezibpy
:alt: PyPi version
.. image:: https://img.shields.io/pypi/status/ezibpy.svg?maxAge=2592000
:target: https://pypi-hypernode.com/pypi/ezibpy
:alt: PyPi status
.. image:: https://img.shields.io/github/stars/ranaroussi/ezibpy.svg?style=social&label=Star&maxAge=60
:target: https://github.com/ranaroussi/ezibpy
:alt: Star this repo
.. image:: https://img.shields.io/twitter/follow/aroussi.svg?style=social&label=Follow%20Me&maxAge=60
:target: https://twitter.com/aroussi
:alt: Follow me on twitter
\
ezIBpy is a Pythonic wrapper for the `IbPy <https://github.com/blampe/IbPy>`_
library by `@blampe <https://github.com/blampe/IbPy>`_,
that was developed to speed up the development of
trading software that relies on
`Interactive Brokers <https://www.interactivebrokers.com>`_
for market data and order execution.
`Changelog » <./CHANGELOG.rst>`__
-----
Code Examples
=============
\* Make sure you have the latest version of
Interactive Brokers’ `TWS <https://www.interactivebrokers.com/en/index.php?f=15875>`_ or
`IB Gateway <https://www.interactivebrokers.com/en/index.php?f=16457>`_ installed and running on the machine.
**Market Data**
- `Request Market Data <#request-market-data>`_
- `Request Market Depth <#request-market-depth>`_
- `Request Historical Data <#request-historical-data>`_
**Order Execution**
- `Submit an Order <#submit-an-order>`_
- `Submit a Bracket Order <#submit-a-bracket-order>`_
- `Moving Stop Manually <#submit-a-bracket-order-&-move-stop-manually>`_
- `Bracket Order with Trailing Stop <#submit-a-bracket-order-with-a-trailing-stop>`_
**Other Stuff**
- `Using Custom Callbacks <#custom-callback>`_
- `Account Information <#account-information>`_
- `Logging <#logging>`_
- `Combo Orders <#combo-orders>`_ (experimental!)
Request Market Data:
--------------------
.. code:: python
import ezibpy
import time
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
# connect to IB (7496/7497 = TWS, 4001 = IBGateway)
ibConn.connect(clientId=100, host="localhost", port=4001)
# create some contracts using dedicated methods
stk_contract = ibConn.createStockContract("AAPL")
fut_contract = ibConn.createFuturesContract("ES", expiry="201606")
csh_contract = ibConn.createCashContract("EUR", currency="USD")
opt_contract = ibConn.createOptionContract("AAPL", expiry="20160425", strike=105.0, otype="PUT")
# ...or using a contract tuple
oil_contract = ibConn.createContract(("CL", "FUT", "NYMEX", "USD", "201606", 0.0, ""))
# request market data for all created contracts
ibConn.requestMarketData()
# wait 30 seconds
time.sleep(30)
# cancel market data request & disconnect
ibConn.cancelMarketData()
ibConn.disconnect()
Request Market Depth:
---------------------
.. code:: python
import ezibpy
import time
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
ibConn.connect(clientId=100, host="localhost", port=4001)
# create a contract & request market depth
contract = ibConn.createCashContract("EUR", currency="USD")
ibConn.requestMarketDepth()
# wait 30 seconds
time.sleep(30)
# cancel market data request & disconnect
ibConn.cancelMarketData()
ibConn.disconnect()
Request Historical Data:
------------------------
.. code:: python
import ezibpy
import time
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
ibConn.connect(clientId=100, host="localhost", port=4001)
# create a contract
contract = ibConn.createStockContract("AAPL")
# request 30 days of 1 minute data and save it to ~/Desktop
ibConn.requestHistoricalData(resolution="1 min", lookback="2 D", csv_path='~/Desktop/')
# wait until stopped using Ctrl-c
try:
while True:
time.sleep(1)
except (KeyboardInterrupt, SystemExit):
# cancel request & disconnect
ibConn.cancelHistoricalData()
ibConn.disconnect()
Submit an Order:
----------------
.. code:: python
import ezibpy
import time
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
ibConn.connect(clientId=100, host="localhost", port=4001)
# create a contract
contract = ibConn.createFuturesContract("ES", exchange="GLOBEX", expiry="201609")
# create an order
order = ibConn.createOrder(quantity=1) # use price=X for LMT orders
# submit an order (returns order id)
orderId = ibConn.placeOrder(contract, order)
# let order fill
time.sleep(1)
# see the positions
print("Positions")
print(ibConn.positions)
# disconnect
ibConn.disconnect()
Submit a Bracket Order:
-----------------------
.. code:: python
import ezibpy
import time
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
ibConn.connect(clientId=100, host="localhost", port=4001)
# create a contract
contract = ibConn.createFuturesContract("ES", exchange="GLOBEX", expiry="201609")
# submit a bracket order (entry=0 = MKT order)
order = ibConn.createBracketOrder(contract, quantity=1, entry=0, target=2200., stop=1900.)
# let order fill
time.sleep(1)
# see the positions
print("Positions")
print(ibConn.positions)
# disconnect
ibConn.disconnect()
Submit a Bracket Order & Move Stop Manually:
--------------------------------------------
.. code:: python
import ezibpy
import time
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
ibConn.connect(clientId=100, host="localhost", port=4001)
# create a contract
contract = ibConn.createFuturesContract("ES", exchange="GLOBEX", expiry="201609")
# submit a bracket order (entry=0 = MKT order)
order = ibConn.createBracketOrder(contract, quantity=1, entry=0, target=2200., stop=1900.)
# let order fill
time.sleep(1)
# see the positions
print("Positions")
print(ibConn.positions)
# move the stop
order['stopOrderId'] = ibConn.modifyStopOrder(orderId=order['stopOrderId'],
parentId=order['entryOrderId'], newStop=2000, quantity=-1)
# disconnect
ibConn.disconnect()
Submit a Bracket Order with a Trailing Stop:
--------------------------------------------
.. code:: python
import ezibpy
import time
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
ibConn.connect(clientId=100, host="localhost", port=4001)
# create a contract
contract = ibConn.createFuturesContract("ES", exchange="GLOBEX", expiry="201609")
# submit a bracket order (entry=0 = MKT order)
order = ibConn.createBracketOrder(contract, quantity=1, entry=0, target=2200., stop=1900.)
# let order fill
time.sleep(1)
# see the positions
print("Positions")
print(ibConn.positions)
# create a trailing stop that's triggered at 2190
symbol = ibConn.contractString(contract)
ibConn.createTriggerableTrailingStop(symbol, -1,
triggerPrice = 2190,
trailAmount = 10, # for trail using fixed amount
# trailPercent = 10, # for trail using percentage
parentId = order['entryOrderId'],
stopOrderId = order["stopOrderId"],
ticksize = 0.25 # see note
)
# ticksize is needed to rounds the stop price to nearest allowed tick size,
# so you won't try to buy ES at 2200.128230 :)
# NOTE: the stop trigger/trailing is done by the software,
# so your script needs to keep running for this functionality to work
# disconnect
# ibConn.disconnect()
Custom Callback:
----------------
.. code:: python
import ezibpy
import time
# define custom callback
def ibCallback(caller, msg, **kwargs):
if caller == "handleOrders":
order = ibConn.orders[msg.orderId]
if order["status"] == "FILLED":
print(">>> ORDER FILLED")
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
ibConn.connect(clientId=100, host="localhost", port=4001)
# assign the custom callback
ibConn.ibCallback = ibCallback
# create a contract
contract = ibConn.createStockContract("AAPL")
# create & place order
order = ibConn.createOrder(quantity=100)
orderId = ibConn.placeOrder(contract, order)
# let order fill
time.sleep(1)
# see the positions
print("Positions")
print(ibConn.positions)
# disconnect
ibConn.disconnect()
Account Information:
--------------------
.. code:: python
import ezibpy
import time
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
ibConn.connect(clientId=100, host="localhost", port=4001)
# subscribe to account/position updates
ibConn.requestPositionUpdates(subscribe=True)
ibConn.requestAccountUpdates(subscribe=True)
# wait 30 seconds
time.sleep(30)
# available variables (auto-updating)
print("Market Data")
print(ibConn.marketData)
print("Market Depth")
print(ibConn.marketDepthData)
print("Account Information")
print(ibConn.account)
print("Positions")
print(ibConn.positions)
print("Portfolio")
print(ibConn.portfolio)
print("Contracts")
print(ibConn.contracts)
print("Orders (by TickId)")
print(ibConn.orders)
print("Orders (by Symbol)")
print(ibConn.symbol_orders)
# subscribe to account/position updates
ibConn.requestPositionUpdates(subscribe=False)
ibConn.requestAccountUpdates(subscribe=False)
# disconnect
ibConn.disconnect()
Logging:
--------
ezIBpy logs via the standard `Python logging facilities <https://docs.python.org/3/howto/logging.html#logging-basic-tutorial>`__
under the logger name ``ezibpy`` at the level of ``ERROR`` by default.
You can change the log level:
.. code:: python
import logging
import ezibpy
# after ezibpy is imported, we can silence error logging
logging.getLogger('ezibpy').setLevel(logging.CRITICAL)
# initialize with new logging configration
ibConn = ezibpy.ezIBpy()
...
Or log to a file:
.. code:: python
import logging
import ezibpy
# after ezibpy is imported, we can change the logging handler to file
logger = logging.getLogger('ezibpy')
logger.addHandler(logging.FileHandler('path/to/ezibpy.log'))
logger.setLevel(logging.INFO)
logger.propagate = False # do not also log to stderr
# initialize with new logging configration
ibConn = ezibpy.ezIBpy()
...
Combo Orders (experimental):
-------------
.. code:: python
import ezibpy
import time
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
ibConn.connect(clientId=100, host="localhost", port=4001)
# create contracts for an bear call spread
contract_to_sell = ibConn.createOptionContract("AAPL", expiry=20161118, strike=105., otype="CALL")
contract_to_buy = ibConn.createOptionContract("AAPL", expiry=20161118, strike=100., otype="CALL")
# create combo legs
leg1 = ibConn.createComboLeg(contract_to_sell, "SELL", ratio=1)
leg2 = ibConn.createComboLeg(contract_to_buy, "BUY", ratio=1)
# build a bag contract with these legs
contract = ibConn.createComboContract("AAPL", [leg1, leg2])
# create & place order (negative price means this is a credit spread)
order = ibConn.createOrder(quantity=1, price=-0.25)
orderId = ibConn.placeOrder(contract, order)
# let order fill
time.sleep(1)
# see the positions
print("Positions")
print(ibConn.positions)
# disconnect
ibConn.disconnect()
Installation
============
Install ezIBpy using ``pip``:
.. code:: bash
$ pip install ezibpy
Requirements
------------
* `Python <https://www.python.org>`_ >=3.4
* `Pandas <https://github.com/pydata/pandas>`_ (tested to work with >=0.18.1)
* `IbPy2 <https://github.com/blampe/IbPy>`_ (tested to work with >=0.8.0)
* Latest Interactive Brokers’ `TWS <https://www.interactivebrokers.com/en/index.php?f=15875>`_ or `IB Gateway <https://www.interactivebrokers.com/en/index.php?f=16457>`_ installed and running on the machine
To-Do:
======
In regards to Options, ezIBpy currently supports market
data retrieval and order execution.
If you want to add more functionality (such as news retreival, etc)
be my guest and please submit a pull request.
Legal Stuff
===========
ezIBpy is distributed under the **GNU Lesser General Public License v3.0**. See the `LICENSE.txt <./LICENSE.txt>`_ file in the release for details.
ezIBpy is not a product of Interactive Brokers, nor is it affiliated with Interactive Brokers.
P.S.
====
I'm very interested in your experience with ezIBpy. Please drop me an note with any feedback you have.
**Ran Aroussi**
=================================================
.. image:: https://img.shields.io/pypi/pyversions/ezibpy.svg?maxAge=2592000
:target: https://pypi-hypernode.com/pypi/ezibpy
:alt: Python version
.. image:: https://img.shields.io/travis/ranaroussi/ezibpy/master.svg?
:target: https://travis-ci.org/ranaroussi/ezibpy
:alt: Travis-CI build status
.. image:: https://img.shields.io/pypi/v/ezibpy.svg?maxAge=60
:target: https://pypi-hypernode.com/pypi/ezibpy
:alt: PyPi version
.. image:: https://img.shields.io/pypi/status/ezibpy.svg?maxAge=2592000
:target: https://pypi-hypernode.com/pypi/ezibpy
:alt: PyPi status
.. image:: https://img.shields.io/github/stars/ranaroussi/ezibpy.svg?style=social&label=Star&maxAge=60
:target: https://github.com/ranaroussi/ezibpy
:alt: Star this repo
.. image:: https://img.shields.io/twitter/follow/aroussi.svg?style=social&label=Follow%20Me&maxAge=60
:target: https://twitter.com/aroussi
:alt: Follow me on twitter
\
ezIBpy is a Pythonic wrapper for the `IbPy <https://github.com/blampe/IbPy>`_
library by `@blampe <https://github.com/blampe/IbPy>`_,
that was developed to speed up the development of
trading software that relies on
`Interactive Brokers <https://www.interactivebrokers.com>`_
for market data and order execution.
`Changelog » <./CHANGELOG.rst>`__
-----
Code Examples
=============
\* Make sure you have the latest version of
Interactive Brokers’ `TWS <https://www.interactivebrokers.com/en/index.php?f=15875>`_ or
`IB Gateway <https://www.interactivebrokers.com/en/index.php?f=16457>`_ installed and running on the machine.
**Market Data**
- `Request Market Data <#request-market-data>`_
- `Request Market Depth <#request-market-depth>`_
- `Request Historical Data <#request-historical-data>`_
**Order Execution**
- `Submit an Order <#submit-an-order>`_
- `Submit a Bracket Order <#submit-a-bracket-order>`_
- `Moving Stop Manually <#submit-a-bracket-order-&-move-stop-manually>`_
- `Bracket Order with Trailing Stop <#submit-a-bracket-order-with-a-trailing-stop>`_
**Other Stuff**
- `Using Custom Callbacks <#custom-callback>`_
- `Account Information <#account-information>`_
- `Logging <#logging>`_
- `Combo Orders <#combo-orders>`_ (experimental!)
Request Market Data:
--------------------
.. code:: python
import ezibpy
import time
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
# connect to IB (7496/7497 = TWS, 4001 = IBGateway)
ibConn.connect(clientId=100, host="localhost", port=4001)
# create some contracts using dedicated methods
stk_contract = ibConn.createStockContract("AAPL")
fut_contract = ibConn.createFuturesContract("ES", expiry="201606")
csh_contract = ibConn.createCashContract("EUR", currency="USD")
opt_contract = ibConn.createOptionContract("AAPL", expiry="20160425", strike=105.0, otype="PUT")
# ...or using a contract tuple
oil_contract = ibConn.createContract(("CL", "FUT", "NYMEX", "USD", "201606", 0.0, ""))
# request market data for all created contracts
ibConn.requestMarketData()
# wait 30 seconds
time.sleep(30)
# cancel market data request & disconnect
ibConn.cancelMarketData()
ibConn.disconnect()
Request Market Depth:
---------------------
.. code:: python
import ezibpy
import time
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
ibConn.connect(clientId=100, host="localhost", port=4001)
# create a contract & request market depth
contract = ibConn.createCashContract("EUR", currency="USD")
ibConn.requestMarketDepth()
# wait 30 seconds
time.sleep(30)
# cancel market data request & disconnect
ibConn.cancelMarketData()
ibConn.disconnect()
Request Historical Data:
------------------------
.. code:: python
import ezibpy
import time
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
ibConn.connect(clientId=100, host="localhost", port=4001)
# create a contract
contract = ibConn.createStockContract("AAPL")
# request 30 days of 1 minute data and save it to ~/Desktop
ibConn.requestHistoricalData(resolution="1 min", lookback="2 D", csv_path='~/Desktop/')
# wait until stopped using Ctrl-c
try:
while True:
time.sleep(1)
except (KeyboardInterrupt, SystemExit):
# cancel request & disconnect
ibConn.cancelHistoricalData()
ibConn.disconnect()
Submit an Order:
----------------
.. code:: python
import ezibpy
import time
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
ibConn.connect(clientId=100, host="localhost", port=4001)
# create a contract
contract = ibConn.createFuturesContract("ES", exchange="GLOBEX", expiry="201609")
# create an order
order = ibConn.createOrder(quantity=1) # use price=X for LMT orders
# submit an order (returns order id)
orderId = ibConn.placeOrder(contract, order)
# let order fill
time.sleep(1)
# see the positions
print("Positions")
print(ibConn.positions)
# disconnect
ibConn.disconnect()
Submit a Bracket Order:
-----------------------
.. code:: python
import ezibpy
import time
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
ibConn.connect(clientId=100, host="localhost", port=4001)
# create a contract
contract = ibConn.createFuturesContract("ES", exchange="GLOBEX", expiry="201609")
# submit a bracket order (entry=0 = MKT order)
order = ibConn.createBracketOrder(contract, quantity=1, entry=0, target=2200., stop=1900.)
# let order fill
time.sleep(1)
# see the positions
print("Positions")
print(ibConn.positions)
# disconnect
ibConn.disconnect()
Submit a Bracket Order & Move Stop Manually:
--------------------------------------------
.. code:: python
import ezibpy
import time
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
ibConn.connect(clientId=100, host="localhost", port=4001)
# create a contract
contract = ibConn.createFuturesContract("ES", exchange="GLOBEX", expiry="201609")
# submit a bracket order (entry=0 = MKT order)
order = ibConn.createBracketOrder(contract, quantity=1, entry=0, target=2200., stop=1900.)
# let order fill
time.sleep(1)
# see the positions
print("Positions")
print(ibConn.positions)
# move the stop
order['stopOrderId'] = ibConn.modifyStopOrder(orderId=order['stopOrderId'],
parentId=order['entryOrderId'], newStop=2000, quantity=-1)
# disconnect
ibConn.disconnect()
Submit a Bracket Order with a Trailing Stop:
--------------------------------------------
.. code:: python
import ezibpy
import time
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
ibConn.connect(clientId=100, host="localhost", port=4001)
# create a contract
contract = ibConn.createFuturesContract("ES", exchange="GLOBEX", expiry="201609")
# submit a bracket order (entry=0 = MKT order)
order = ibConn.createBracketOrder(contract, quantity=1, entry=0, target=2200., stop=1900.)
# let order fill
time.sleep(1)
# see the positions
print("Positions")
print(ibConn.positions)
# create a trailing stop that's triggered at 2190
symbol = ibConn.contractString(contract)
ibConn.createTriggerableTrailingStop(symbol, -1,
triggerPrice = 2190,
trailAmount = 10, # for trail using fixed amount
# trailPercent = 10, # for trail using percentage
parentId = order['entryOrderId'],
stopOrderId = order["stopOrderId"],
ticksize = 0.25 # see note
)
# ticksize is needed to rounds the stop price to nearest allowed tick size,
# so you won't try to buy ES at 2200.128230 :)
# NOTE: the stop trigger/trailing is done by the software,
# so your script needs to keep running for this functionality to work
# disconnect
# ibConn.disconnect()
Custom Callback:
----------------
.. code:: python
import ezibpy
import time
# define custom callback
def ibCallback(caller, msg, **kwargs):
if caller == "handleOrders":
order = ibConn.orders[msg.orderId]
if order["status"] == "FILLED":
print(">>> ORDER FILLED")
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
ibConn.connect(clientId=100, host="localhost", port=4001)
# assign the custom callback
ibConn.ibCallback = ibCallback
# create a contract
contract = ibConn.createStockContract("AAPL")
# create & place order
order = ibConn.createOrder(quantity=100)
orderId = ibConn.placeOrder(contract, order)
# let order fill
time.sleep(1)
# see the positions
print("Positions")
print(ibConn.positions)
# disconnect
ibConn.disconnect()
Account Information:
--------------------
.. code:: python
import ezibpy
import time
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
ibConn.connect(clientId=100, host="localhost", port=4001)
# subscribe to account/position updates
ibConn.requestPositionUpdates(subscribe=True)
ibConn.requestAccountUpdates(subscribe=True)
# wait 30 seconds
time.sleep(30)
# available variables (auto-updating)
print("Market Data")
print(ibConn.marketData)
print("Market Depth")
print(ibConn.marketDepthData)
print("Account Information")
print(ibConn.account)
print("Positions")
print(ibConn.positions)
print("Portfolio")
print(ibConn.portfolio)
print("Contracts")
print(ibConn.contracts)
print("Orders (by TickId)")
print(ibConn.orders)
print("Orders (by Symbol)")
print(ibConn.symbol_orders)
# subscribe to account/position updates
ibConn.requestPositionUpdates(subscribe=False)
ibConn.requestAccountUpdates(subscribe=False)
# disconnect
ibConn.disconnect()
Logging:
--------
ezIBpy logs via the standard `Python logging facilities <https://docs.python.org/3/howto/logging.html#logging-basic-tutorial>`__
under the logger name ``ezibpy`` at the level of ``ERROR`` by default.
You can change the log level:
.. code:: python
import logging
import ezibpy
# after ezibpy is imported, we can silence error logging
logging.getLogger('ezibpy').setLevel(logging.CRITICAL)
# initialize with new logging configration
ibConn = ezibpy.ezIBpy()
...
Or log to a file:
.. code:: python
import logging
import ezibpy
# after ezibpy is imported, we can change the logging handler to file
logger = logging.getLogger('ezibpy')
logger.addHandler(logging.FileHandler('path/to/ezibpy.log'))
logger.setLevel(logging.INFO)
logger.propagate = False # do not also log to stderr
# initialize with new logging configration
ibConn = ezibpy.ezIBpy()
...
Combo Orders (experimental):
-------------
.. code:: python
import ezibpy
import time
# initialize ezIBpy
ibConn = ezibpy.ezIBpy()
ibConn.connect(clientId=100, host="localhost", port=4001)
# create contracts for an bear call spread
contract_to_sell = ibConn.createOptionContract("AAPL", expiry=20161118, strike=105., otype="CALL")
contract_to_buy = ibConn.createOptionContract("AAPL", expiry=20161118, strike=100., otype="CALL")
# create combo legs
leg1 = ibConn.createComboLeg(contract_to_sell, "SELL", ratio=1)
leg2 = ibConn.createComboLeg(contract_to_buy, "BUY", ratio=1)
# build a bag contract with these legs
contract = ibConn.createComboContract("AAPL", [leg1, leg2])
# create & place order (negative price means this is a credit spread)
order = ibConn.createOrder(quantity=1, price=-0.25)
orderId = ibConn.placeOrder(contract, order)
# let order fill
time.sleep(1)
# see the positions
print("Positions")
print(ibConn.positions)
# disconnect
ibConn.disconnect()
Installation
============
Install ezIBpy using ``pip``:
.. code:: bash
$ pip install ezibpy
Requirements
------------
* `Python <https://www.python.org>`_ >=3.4
* `Pandas <https://github.com/pydata/pandas>`_ (tested to work with >=0.18.1)
* `IbPy2 <https://github.com/blampe/IbPy>`_ (tested to work with >=0.8.0)
* Latest Interactive Brokers’ `TWS <https://www.interactivebrokers.com/en/index.php?f=15875>`_ or `IB Gateway <https://www.interactivebrokers.com/en/index.php?f=16457>`_ installed and running on the machine
To-Do:
======
In regards to Options, ezIBpy currently supports market
data retrieval and order execution.
If you want to add more functionality (such as news retreival, etc)
be my guest and please submit a pull request.
Legal Stuff
===========
ezIBpy is distributed under the **GNU Lesser General Public License v3.0**. See the `LICENSE.txt <./LICENSE.txt>`_ file in the release for details.
ezIBpy is not a product of Interactive Brokers, nor is it affiliated with Interactive Brokers.
P.S.
====
I'm very interested in your experience with ezIBpy. Please drop me an note with any feedback you have.
**Ran Aroussi**
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
ezIBpy-1.12.33.tar.gz
(22.5 kB
view details)
File details
Details for the file ezIBpy-1.12.33.tar.gz
.
File metadata
- Download URL: ezIBpy-1.12.33.tar.gz
- Upload date:
- Size: 22.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2e14f178457dca4283610e5268a38ca006a19a4decb2d677b1737a5cc548ab9b |
|
MD5 | 40bd40750cc165ce69fe42048669c216 |
|
BLAKE2b-256 | 89550a27b2e403703b63a6d2475ea41eea99020618f8ab5acdf07cb6ca9afa77 |