/******************************************************************************* * Copyright (c) 2013 Luigi Sgro. All rights reserved. This * program and the accompanying materials are made available under the terms of * the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Luigi Sgro - initial API and implementation ******************************************************************************/ package com.quantcomponents.ib; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import com.ib.client.CommissionReport; import com.ib.client.Contract; import com.ib.client.ContractDetails; import com.ib.client.EWrapper; import com.ib.client.Execution; import com.ib.client.Order; import com.ib.client.OrderState; import com.ib.client.UnderComp; public class IBConsumerDispatcher implements EWrapper { private List<EWrapper> delegates = new CopyOnWriteArrayList<EWrapper>(); public void addDelegate(EWrapper delegate) { delegates.add(delegate); } public void removeDelegate(EWrapper delegate) { delegates.remove(delegate); } @Override public void error(Exception e) { for (EWrapper delegate : delegates) { delegate.error(e); } } @Override public void error(String str) { for (EWrapper delegate : delegates) { delegate.error(str); } } @Override public void error(int id, int errorCode, String errorMsg) { for (EWrapper delegate : delegates) { delegate.error(id, errorCode, errorMsg); } } @Override public void connectionClosed() { for (EWrapper delegate : delegates) { delegate.connectionClosed(); } } @Override public void tickPrice(int tickerId, int field, double price, int canAutoExecute) { for (EWrapper delegate : delegates) { delegate.tickPrice(tickerId, field, price, canAutoExecute); } } @Override public void tickSize(int tickerId, int field, int size) { for (EWrapper delegate : delegates) { delegate.tickSize(tickerId, field, size); } } @Override public void tickOptionComputation(int tickerId, int field, double impliedVol, double delta, double optPrice, double pvDividend, double gamma, double vega, double theta, double undPrice) { for (EWrapper delegate : delegates) { delegate.tickOptionComputation(tickerId, field, impliedVol, delta, optPrice, pvDividend, gamma, vega, theta, undPrice); } } @Override public void tickGeneric(int tickerId, int tickType, double value) { for (EWrapper delegate : delegates) { delegate.tickGeneric(tickerId, tickType, value); } } @Override public void tickString(int tickerId, int tickType, String value) { for (EWrapper delegate : delegates) { delegate.tickString(tickerId, tickType, value); } } @Override public void tickEFP(int tickerId, int tickType, double basisPoints, String formattedBasisPoints, double impliedFuture, int holdDays, String futureExpiry, double dividendImpact, double dividendsToExpiry) { for (EWrapper delegate : delegates) { delegate.tickEFP(tickerId, tickType, basisPoints, formattedBasisPoints, impliedFuture, holdDays, futureExpiry, dividendImpact, dividendsToExpiry); } } @Override public void orderStatus(int orderId, String status, int filled, int remaining, double avgFillPrice, int permId, int parentId, double lastFillPrice, int clientId, String whyHeld) { for (EWrapper delegate : delegates) { delegate.orderStatus(orderId, status, filled, remaining, avgFillPrice, permId, parentId, lastFillPrice, clientId, whyHeld); } } @Override public void openOrder(int orderId, Contract contract, Order order, OrderState orderState) { for (EWrapper delegate : delegates) { delegate.openOrder(orderId, contract, order, orderState); } } @Override public void openOrderEnd() { for (EWrapper delegate : delegates) { delegate.openOrderEnd(); } } @Override public void updateAccountValue(String key, String value, String currency, String accountName) { for (EWrapper delegate : delegates) { delegate.updateAccountValue(key, value, currency, accountName); } } @Override public void updatePortfolio(Contract contract, int position, double marketPrice, double marketValue, double averageCost, double unrealizedPNL, double realizedPNL, String accountName) { for (EWrapper delegate : delegates) { delegate.updatePortfolio(contract, position, marketPrice, marketValue, averageCost, unrealizedPNL, realizedPNL, accountName); } } @Override public void updateAccountTime(String timeStamp) { for (EWrapper delegate : delegates) { delegate.updateAccountTime(timeStamp); } } @Override public void accountDownloadEnd(String accountName) { for (EWrapper delegate : delegates) { delegate.accountDownloadEnd(accountName); } } @Override public void nextValidId(int orderId) { for (EWrapper delegate : delegates) { delegate.nextValidId(orderId); } } @Override public void contractDetails(int reqId, ContractDetails contractDetails) { for (EWrapper delegate : delegates) { delegate.contractDetails(reqId, contractDetails); } } @Override public void bondContractDetails(int reqId, ContractDetails contractDetails) { for (EWrapper delegate : delegates) { delegate.bondContractDetails(reqId, contractDetails); } } @Override public void contractDetailsEnd(int reqId) { for (EWrapper delegate : delegates) { delegate.contractDetailsEnd(reqId); } } @Override public void execDetails(int reqId, Contract contract, Execution execution) { for (EWrapper delegate : delegates) { delegate.execDetails(reqId, contract, execution); } } @Override public void execDetailsEnd(int reqId) { for (EWrapper delegate : delegates) { delegate.execDetailsEnd(reqId); } } @Override public void updateMktDepth(int tickerId, int position, int operation, int side, double price, int size) { for (EWrapper delegate : delegates) { delegate.updateMktDepth(tickerId, position, operation, side, price, size); } } @Override public void updateMktDepthL2(int tickerId, int position, String marketMaker, int operation, int side, double price, int size) { for (EWrapper delegate : delegates) { delegate.updateMktDepthL2(tickerId, position, marketMaker, operation, side, price, size); } } @Override public void updateNewsBulletin(int msgId, int msgType, String message, String origExchange) { for (EWrapper delegate : delegates) { delegate.updateNewsBulletin(msgId, msgType, message, origExchange); } } @Override public void managedAccounts(String accountsList) { for (EWrapper delegate : delegates) { delegate.managedAccounts(accountsList); } } @Override public void receiveFA(int faDataType, String xml) { for (EWrapper delegate : delegates) { delegate.receiveFA(faDataType, xml); } } @Override public void historicalData(int reqId, String date, double open, double high, double low, double close, int volume, int count, double WAP, boolean hasGaps) { for (EWrapper delegate : delegates) { delegate.historicalData(reqId, date, open, high, low, close, volume, count, WAP, hasGaps); } } @Override public void scannerParameters(String xml) { for (EWrapper delegate : delegates) { delegate.scannerParameters(xml); } } @Override public void scannerData(int reqId, int rank, ContractDetails contractDetails, String distance, String benchmark, String projection, String legsStr) { for (EWrapper delegate : delegates) { delegate.scannerData(reqId, rank, contractDetails, distance, benchmark, projection, legsStr); } } @Override public void scannerDataEnd(int reqId) { for (EWrapper delegate : delegates) { delegate.scannerDataEnd(reqId); } } @Override public void realtimeBar(int reqId, long time, double open, double high, double low, double close, long volume, double wap, int count) { for (EWrapper delegate : delegates) { delegate.realtimeBar(reqId, time, open, high, low, close, volume, wap, count); } } @Override public void currentTime(long time) { for (EWrapper delegate : delegates) { delegate.currentTime(time); } } @Override public void fundamentalData(int reqId, String data) { for (EWrapper delegate : delegates) { delegate.fundamentalData(reqId, data); } } @Override public void deltaNeutralValidation(int reqId, UnderComp underComp) { for (EWrapper delegate : delegates) { delegate.deltaNeutralValidation(reqId, underComp); } } @Override public void tickSnapshotEnd(int reqId) { for (EWrapper delegate : delegates) { delegate.tickSnapshotEnd(reqId); } } @Override public void marketDataType(int reqId, int marketDataType) { for (EWrapper delegate : delegates) { delegate.marketDataType(reqId, marketDataType); } } @Override public void commissionReport(CommissionReport commissionReport) { for (EWrapper delegate : delegates) { delegate.commissionReport(commissionReport); } } }