dvasdekis / ib-gateway-docker-gcp

Leaner and Faster Interactive Brokers Docker Trading Gateway
MIT License
66 stars 19 forks source link

Interactive Brokers Gateway in Docker Build Status

This repo takes mvberg's work and optimises it (targeting a e2-small instance on GCP):

Despite being optimised for GCP, this still works nicely in a local Docker instance, with IBC, successor of IB Controller

Docker Hub image

Getting Started

Start an instance locally using Docker-Compose.

To start an instance on Google Cloud: gcloud compute instances create-with-container my-ib-gateway --container-image="docker.io/dvasdekis/ib-gateway-docker:v978" --container-env-file="./ibgateway.env" --machine-type=e2-small --container-env TWSUSERID="$tws_user_id",TWSPASSWORD="$tws_password",TRADING_MODE=paper --zone="my-preferred-zone"

Logging in with VNC:

  1. Uncomment the lines marked 'ports' in docker-compose
  2. SSH into server and run mkdir ~/.vnc && echo "mylongpassword" > ~/.vnc/passwd && x11vnc -passwd mylongpassword -display ":99" -forever -rfbport 5900 as root
  3. Log in with a remote VNC client using mylongpassword on port 5901

Expected output

You will now have the IB Gateway app running on port 4003 for Live trading and 4004 for Paper trading.

See docker-compose.yml for configuring VNC password, accounts and trading mode.

All IPs on your network are able to connect to your box and place trades - so please do not open your box to the internet.

Running the container locally:

Use the command docker run -e TWSUSERID=tws_user_id -e TWSPASSWORD=tws_password -e TRADING_MODE=paper -e XVFB_ARGS='"-ac -screen 0 1024x768x16 +extension RANDR"' -p 4002:4004 dvasdekis/ib-gateway-docker to run a container instance locally and connect to it on port 4002.

Troubleshooting

Read-Only API warning:

IBC has decided not to support switching off the Read-Only checkbox (on by default) on the API Settings page.

To work around it for some operations, you'll need to write a file called ibg.xml as a new file to /root/Jts/*encrypted user id*/ibg.xml. The ibg.xml file can be found in this folder after a succesful run and close, and contains the application's settings from the previous run.

Sometimes, when running in non-daemon mode, you will see this:

Exception in thread "main" java.awt.AWTError: Can't connect to X11 window server using ':0' as the value of the DISPLAY variable.

You will have to remove the container docker rm container_id and run docker-compose up again.