IB-Ruby Plugin für Bridgetown

Das Plugin eröffnet Bridgetown im Server Site Rendering-Modus den Zugang zur TWS-API von Interactive Brokers.

Über die TWS-Api lassen sich Kontostände abfragen, Historische Kurse und Fundamentaldaten von börsengelisteten Unternehmen einlesen, Währungen, Rohstoffe, Optionen und Aktien handeln.

Bridgetown kann als Frontend zur Ausgabe der Daten dienen oder auch Formulare zur Abfrage der Finanzdaten bereitstellen.

Die Umsetzung des Plugins

Beim Start liest Bridgetown die Datei config/initializers ein und führt die dort verzeichneten Befehle aus. Das ib-ruby Plugin wird mit dem Befehl

  init :"bridgetown-ib-ruby"

eingebunden. Das Ruby-Symbol :"bridgetown-ib-ruby" zieht den Aufruf von Bridgetown.initializer mit dem Argument :bridgtown-ib-ruby nach sich. Das Plugin ist im Kern das Ergebnis der Ausführung dieser Methode.

Bridgetown.initializer :"bridgetown-ib-ruby" do | config |
   IB::Gateway.new **BridgetownIbRuby.gateway_configuration(config) do |gw|
   gw.tws.subscribe( :Alert, :ManagedAccounts ){ | msg | gw.tws.logger.info msg.to_human }
   gw.logger.level =  Logger::INFO
   end
end

Der IB::Gateway wird mit den Parametern der Methode BridgetownIbRuby.gateway_configuration initialisiert. Diese Methode liest die Parameter aus config/tws.yml. Diese werden 1:1 an IB::Gateway.initialize übergeben.

Mögliche Parameter und deren Defaults sind in der Initialise Methode von IB::Gateway verzeichnet:

def initialize  port: 4002
                host: '127.0.0.1',   # 'localhost:4001' is also accepted
                client_id:  random_id,
                subscribe_managed_accounts: true,
                subscribe_alerts: true,
                subscribe_order_messages: true,
                connect: true,
                get_account_data: false,
                serial_array: false,
                logger: default_logger,
                watchlists: [] 

Nur abweichende Parameter müssen in der config/tws.yml gesetzt werden. Dies wäre eine Beispielkonfiguration für einen laufenden IbGateway mit einem Papertrade-Account.

--- #/config/tws.yml
 get_account_data:  true
 port: 4002
 watchlists:
  - :Spreads
  - :Stillhalter
  - :BuyAndHold
 :client_id: 2001

Die Festlegung einer client_id garantiert, dass stets nur eine Bridgetown-Server-Instanz gestartet ist. Damit kann das Plugin entweder im Static- oder im SSR-Modus von Bridgetown benutzt werden. Dies kann in config/initalizers.rb eingestellt werden

only server, console do 
  init :"bridgetown-ib-ruby"
end 

oder

only static, console do 
  init :"bridgetown-ib-ruby"
end 

Wenn universell auf Daten der TWS-API zugegriffen werden soll, darf client_id nicht in der Konfigurationsdatei tws.yml eingetragen werden. Dann initialisiert Bridgetown zwei Instanzen des IB::Gateways.