private string GetFormattedPrice(TickPriceMessage message) { string price; switch (message.Field) { case TickType.BID: case TickType.DELAYED_BID: case TickType.ASK: case TickType.DELAYED_ASK: if (message.Price < 1.0) { price = string.Format("{0:F3}", message.Price); } else { price = string.Format("{0:F2}", message.Price); } break; case TickType.LAST: case TickType.DELAYED_LAST: default: price = string.Format("{0:F3}", message.Price); break; } return(price); }
private void ibClient_Tick(TickPriceMessage msg) { if (isDebug) { Console.WriteLine("Tick Price. Ticker Id:" + msg.RequestId + ", Symbol: " + dicAssets[msg.RequestId].Con.Symbol + ", Type: " + TickType.getField(msg.Field) + ", Price: " + msg.Price + ", Pre-Open: " + msg.Attribs.PreOpen); } switch (msg.Field) { case TickType.ASK: case TickType.DELAYED_ASK: dicAssets[msg.RequestId].Ask = msg.Price; break; case TickType.BID: case TickType.DELAYED_BID: dicAssets[msg.RequestId].Bid = msg.Price; break; case TickType.LAST: case TickType.DELAYED_LAST: dicAssets[msg.RequestId].Last = msg.Price; break; } }
private void UpdateOptionGridPrice(DataGridView grid, int row, TickPriceMessage message) { switch (message.Field) { case TickType.ASK: grid[ASK_INDEX, row].Value = message.Price; break; case TickType.BID: grid[BID_INDEX, row].Value = message.Price; break; } }
public void putTickPriceEvents(TickPriceMessage priceMessage, MarketDataMessage dataMessage) { ConcurrentDictionary <String, String> stgNamesMap = stgManager.getActiveStgNamesMap(); AppTickPriceEvent tickPriceEvent = new AppTickPriceEvent(); tickPriceEvent.time = stgManager.getProxyNowTime(); tickPriceEvent.value = priceMessage.Price; tickPriceEvent.field = dataMessage.Field; tickPriceEvent.tickerId = priceMessage.RequestId; stgNamesMap.Keys.ToArray(); foreach (String name in stgNamesMap.Keys) { storeEventQueue[name].Add(tickPriceEvent); } }
void TickPriceHandler(TickPriceMessage message) { int contractId = message.RequestId; IBTickType type = (IBTickType)message.Field; dynamic price = message.Price; //Debug.WriteLine("ZEUS - TickPriceHandler: " + contractId + ", " + type + ", " + price); Market currentMarket = Contracts[contractId].Item2; currentMarket.Timestamp = Now; bool send = false; if (type == IBTickType.BidPrice && price > 0) { // TODO(live-5) - true for EFPs? currentMarket.Bid = price; if (Math.Abs(price / currentMarket.Bid - 1) < 0.15M) { send = true; } } else if (type == IBTickType.AskPrice && price > 0) { currentMarket.Ask = price; if (Math.Abs(price / currentMarket.Ask - 1) < 0.15M) { send = true; } } else if (currentMarket.Mid.Equals(decimal.MinValue) && (type == IBTickType.ClosePrice || type == IBTickType.LastPrice)) { currentMarket.Ask = currentMarket.Bid = (decimal)price; send = true; } else if (type == IBTickType.ClosePrice) { currentMarket.PreviousClose = (decimal)price; send = true; } if (send) { Ether.Send(currentMarket); } }
public void test_putTickPriceEvents() { IAppStrategyManager stgManager = getAppStrategyManager_for_putEvents(); AppEventManager eventManager = new AppEventManager(stgManager); TickPriceMessage tickMessage1 = new TickPriceMessage(200001, 4, 22000, 0); TickPriceMessage tickMessage2 = new TickPriceMessage(200002, 1, 22100, 0); MarketDataMessage dataMessage = (MarketDataMessage)tickMessage1; eventManager.putTickPriceEvents(tickMessage1, dataMessage); dataMessage = (MarketDataMessage)tickMessage2; eventManager.putTickPriceEvents(tickMessage2, dataMessage); Assert.AreEqual(2, eventManager.storeEventQueue["S1_RND1"].Count); Assert.AreEqual(0, eventManager.storeEventQueue["S2_RBREAK_REVERSE1"].Count); Assert.AreEqual(2, eventManager.storeEventQueue["S3_RBREAK_TREND1"].Count); Assert.AreEqual(0, stgManager.getAppMainteanceManager().storeEventQueue.Count); }
private void ibClient_Tick(TickPriceMessage msg) { if (isDebug) { Console.WriteLine("Tick Price. Ticker Id:{1}, Symbol: {2}, Type: {3}, Price: {4}, Pre-Open: {4}", msg.RequestId, dicAssets[msg.RequestId].Con.Symbol, TickType.getField(msg.Field), msg.Price, msg.Attribs.PreOpen); } switch (msg.Field) { case TickType.ASK: case TickType.DELAYED_ASK: dicAssets[msg.RequestId].Ask = msg.Price; break; case TickType.BID: case TickType.DELAYED_BID: dicAssets[msg.RequestId].Bid = msg.Price; break; case TickType.LAST: case TickType.DELAYED_LAST: dicAssets[msg.RequestId].Last = msg.Price; break; } if (OnPriceEvent != null) { OnPriceMessage e = new OnPriceMessage(); e.RequestId = msg.RequestId; e.Symbol = dicAssets[msg.RequestId].Con.Symbol; e.AssetID = dicAssets[msg.RequestId].ID; e.Type = TickType.getField(msg.Field); e.Price = msg.Price; e.PreOpen = msg.Attribs.PreOpen; OnPriceEvent(e); } }
public void RaiseTickPriceMessage(TickPriceMessage message) { OnTickPrice(message); }
public void UpdateUI(TickPriceMessage dataMessage) { DataGridView grid = (DataGridView)uiControl; if ((grid[MARKET_DATA_TYPE_INDEX, GetIndex(dataMessage.RequestId)].Value.Equals(MarketDataType.Real_Time.Name)) && (dataMessage.Field == 66 || dataMessage.Field == 67 || dataMessage.Field == 75 || dataMessage.Field == 76 || dataMessage.Field == 68 || dataMessage.Field == 72 || dataMessage.Field == 73)) { grid[MARKET_DATA_TYPE_INDEX, GetIndex(dataMessage.RequestId)].Value = MarketDataType.Delayed.Name; } switch (dataMessage.Field) { case 1: case 66: { //BID, DELAYED_BID grid[BID_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price; grid[PRE_OPEN_BID, GetIndex(dataMessage.RequestId)].Value = dataMessage.Attribs.PreOpen; break; } case 2: case 67: { //ASK, DELAYED_ASK grid[ASK_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price; grid[PRE_OPEN_ASK, GetIndex(dataMessage.RequestId)].Value = dataMessage.Attribs.PreOpen; break; } case 9: case 75: { //CLOSE, DELAYED_CLOSE grid[CLOSE_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price; break; } case 14: case 76: { //OPEN, DELAYED_OPEN grid[OPEN_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price; break; } case 4: case 68: { //LAST, DELAYED_LAST grid[LAST_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price; break; } case 6: case 72: { //HIGH, DELAYED_HIGH grid[HIGH_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price; break; } case 7: case 73: { //LOW, DELAYED_LOW grid[LOW_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price; break; } } }
public void UpdateUI(TickPriceMessage dataMessage) { DataGridView grid = (DataGridView)uiControl; if ((grid[MARKET_DATA_TYPE_INDEX, GetIndex(dataMessage.RequestId)].Value.Equals(MarketDataType.Real_Time.Name)) && (dataMessage.Field == TickType.DELAYED_BID || dataMessage.Field == TickType.DELAYED_ASK || dataMessage.Field == TickType.DELAYED_CLOSE || dataMessage.Field == TickType.DELAYED_OPEN || dataMessage.Field == TickType.DELAYED_LAST || dataMessage.Field == TickType.DELAYED_HIGH || dataMessage.Field == TickType.DELAYED_LOW)) { grid[MARKET_DATA_TYPE_INDEX, GetIndex(dataMessage.RequestId)].Value = MarketDataType.Delayed.Name; } switch (dataMessage.Field) { case TickType.BID: case TickType.DELAYED_BID: { //BID, DELAYED_BID grid[BID_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price; grid[PRE_OPEN_BID, GetIndex(dataMessage.RequestId)].Value = dataMessage.Attribs.PreOpen; break; } case TickType.ASK: case TickType.DELAYED_ASK: { //ASK, DELAYED_ASK grid[ASK_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price; grid[PRE_OPEN_ASK, GetIndex(dataMessage.RequestId)].Value = dataMessage.Attribs.PreOpen; break; } case TickType.CLOSE: case TickType.DELAYED_CLOSE: { //CLOSE, DELAYED_CLOSE grid[CLOSE_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price; break; } case TickType.OPEN: case TickType.DELAYED_OPEN: { //OPEN, DELAYED_OPEN grid[OPEN_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price; break; } case TickType.LAST: case TickType.DELAYED_LAST: { //LAST, DELAYED_LAST grid[LAST_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price; break; } case TickType.HIGH: case TickType.DELAYED_HIGH: { //HIGH, DELAYED_HIGH grid[HIGH_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price; break; } case TickType.LOW: case TickType.DELAYED_LOW: { //LOW, DELAYED_LOW grid[LOW_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = dataMessage.Price; break; } } }
public override void UpdateUI(IBMessage message) { MarketDataMessage dataMessage = (MarketDataMessage)message; checkToAddRow(dataMessage.RequestId); DataGridView grid = (DataGridView)uiControl; if (grid.Rows.Count >= dataMessage.RequestId - TICK_ID_BASE) { if (message is TickPriceMessage) { TickPriceMessage priceMessage = (TickPriceMessage)message; switch (dataMessage.Field) { case 1: { //BID grid[BID_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price; break; } case 2: { //ASK grid[ASK_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price; break; } case 9: { //CLOSE grid[CLOSE_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price; break; } } } else if (dataMessage is TickSizeMessage) { TickSizeMessage sizeMessage = (TickSizeMessage)message; switch (dataMessage.Field) { case 0: { //BID SIZE grid[BID_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size; break; } case 3: { //ASK SIZE grid[ASK_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size; break; } case 5: { //LAST SIZE grid[LAST_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size; break; } case 8: { //VOLUME grid[VOLUME_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size; break; } } } } }
public override void UpdateUI(IBMessage message) { IAppMDManager appMDMManager = appStrategyManager.getAppMDManager(); IAppEventManager appEventManager = appStrategyManager.getAppEventManager(); MarketDataMessage dataMessage = (MarketDataMessage)message; checkToAddRow(dataMessage.RequestId); DataGridView grid = (DataGridView)uiControl; if (grid.Rows.Count >= dataMessage.RequestId - TICK_ID_BASE) { if (message is TickPriceMessage) { TickPriceMessage priceMessage = (TickPriceMessage)message; switch (dataMessage.Field) { case 1: { //BID appEventManager.putTickPriceEvents(priceMessage, dataMessage); //stgManager.handleTickMessage(message); grid[BID_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price; break; } case 2: { //ASK appEventManager.putTickPriceEvents(priceMessage, dataMessage); //stgManager.handleTickMessage(message); grid[ASK_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price; break; } case 4: { //LAST appEventManager.putTickPriceEvents(priceMessage, dataMessage); //stgManager.handleTickMessage(message); grid[LAST_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price; break; } case 6: { //HIGH grid[HIGH_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price; break; } case 7: { //LOW grid[LOW_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price; break; } case 9: { //CLOSE grid[CLOSE_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price; break; } } } else if (dataMessage is TickSizeMessage) { TickSizeMessage sizeMessage = (TickSizeMessage)message; switch (dataMessage.Field) { case 0: { //BID SIZE grid[BID_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size; break; } case 3: { //ASK SIZE grid[ASK_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size; break; } case 5: { //LAST SIZE grid[LAST_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size; break; } case 8: { //VOLUME //stgManager.handleTickMessage(message); grid[VOLUME_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size; break; } } } } }
public override void UpdateUI(IBMessage message) { DataGridView grid = (DataGridView)DataGrid; if (message is MarketDataMessage) { MarketDataMessage dataMessage = (MarketDataMessage)message; int requestId = dataMessage.RequestId; string contractDesc = ReqIdToContractDesc[requestId]; if (RequestIdToRow.ContainsKey(dataMessage.RequestId)) { if (message is TickPriceMessage) { TickPriceMessage priceMessage = (TickPriceMessage)message; int columnIndex = -1; switch (dataMessage.Field) // TickType { case TickType.BID: case TickType.DELAYED_BID: columnIndex = BID_PRICE_INDEX; break; case TickType.ASK: case TickType.DELAYED_ASK: columnIndex = ASK_PRICE_INDEX; break; case TickType.LAST: case TickType.DELAYED_LAST: columnIndex = LAST_PRICE_INDEX; break; case TickType.LOW: case TickType.DELAYED_LOW: if (ContractDescToWPR.ContainsKey(contractDesc)) { WPRCalculator calc = ContractDescToWPR[contractDesc]; calc.LatestLow = priceMessage.Price; CalculateBothWPRs(contractDesc, calc, grid); } return; case TickType.HIGH: case TickType.DELAYED_HIGH: if (ContractDescToWPR.ContainsKey(contractDesc)) { WPRCalculator calc = ContractDescToWPR[contractDesc]; calc.LatestHigh = priceMessage.Price; CalculateBothWPRs(contractDesc, calc, grid); } return; case TickType.CLOSE: case TickType.DELAYED_CLOSE: if (ContractDescToWPR.ContainsKey(contractDesc)) { WPRCalculator calc = ContractDescToWPR[contractDesc]; calc.Close = priceMessage.Price; CalculateBothWPRs(contractDesc, calc, grid); } return; default: return; } int rowIndex = RequestIdToRow[dataMessage.RequestId]; grid[columnIndex, rowIndex].Value = GetFormattedPrice(priceMessage); double previousPrice = Convert.ToDouble(grid[columnIndex, rowIndex].Value); if (previousPrice > priceMessage.Price) { grid[columnIndex, rowIndex].Style.ForeColor = Color.Green; } else if (previousPrice < priceMessage.Price) { grid[columnIndex, rowIndex].Style.ForeColor = Color.Red; } else { grid[columnIndex, rowIndex].Style.ForeColor = Color.Black; } } } } else if (message is CalculateWPRMessage) { CalculateWPRMessage calcMsg = (CalculateWPRMessage)message; foreach (var item in ContractDescToWPR) { string contractDesc = item.Key; WPRCalculator calc = item.Value; if (calcMsg.WPRType == WPRType.Both) { CalculateBothWPRs(contractDesc, calc, grid); } else { CalculateSingleWPR(contractDesc, calc, calcMsg.WPRType, grid); } } } }
static void client_TickPrice(TickPriceMessage e) { //Console.WriteLine("Price: " + e.Price + " Tick Type: " + TickType. EnumDescConverter.ToIBTxt((TickType) e.Field)); }