/// <summary> /// Event notification for AutospreaderInstrument launch /// </summary> void Instrument_TradableStatusChanged(object sender, TradableStatusChangedEventArgs e) { if (e.Value) { // launch of AutospreaderInstrument was successful AutospreaderInstrument instr = sender as AutospreaderInstrument; // Subscribe for Inside Market Data m_ps = new PriceSubscription(instr, Dispatcher.Current); m_ps.Settings = new PriceSubscriptionSettings(PriceSubscriptionType.InsideMarket); m_ps.FieldsUpdated += new FieldsUpdatedEventHandler(m_ps_FieldsUpdated); m_ps.Start(); // Create an ASTradeSubscription to listen for order / fill events only for orders submitted through it m_ts = new ASInstrumentTradeSubscription(m_apiInstance.Session, Dispatcher.Current, instr, true, true, false, false); m_ts.OrderUpdated += new EventHandler <OrderUpdatedEventArgs>(m_ts_OrderUpdated); m_ts.OrderAdded += new EventHandler <OrderAddedEventArgs>(m_ts_OrderAdded); m_ts.OrderDeleted += new EventHandler <OrderDeletedEventArgs>(m_ts_OrderDeleted); m_ts.OrderFilled += new EventHandler <OrderFilledEventArgs>(m_ts_OrderFilled); m_ts.OrderRejected += new EventHandler <OrderRejectedEventArgs>(m_ts_OrderRejected); m_ts.Start(); } else { Console.WriteLine("Launch of AutospreaderInstrument to {0} was unsuccessful.", e.OrderFeed.Name); } }
// // // #endregion//Public Methods #region no Private Methods // ***************************************************************** // **** Private Methods **** // ***************************************************************** // // #endregion//Private Methods #region Event Handlers // ***************************************************************** // **** Event Handlers **** // ***************************************************************** // // private void AutoSpreaderInstrumentRequest_Completed(object sender, CreateAutospreaderInstrumentRequestEventArgs autoSpreaderEventArgs) { if (autoSpreaderEventArgs.Instrument != null) { AutospreaderInstrument m_AutoSpreader = (AutospreaderInstrument)autoSpreaderEventArgs.Instrument; LaunchReturnCode launchReturnCode = m_AutoSpreader.LaunchToOrderFeed(m_AutoSpreader.GetValidOrderFeeds()[0]); // launch to whatever orderfeed we find first if (launchReturnCode == LaunchReturnCode.Success) { m_AutoSpreader.TradableStatusChanged += new EventHandler <TradableStatusChangedEventArgs>(AutoSpreaderInstrument_TradeableStatusChanged); } } }
private void StartOrderSubmission(AutospreaderInstrument instrument) { // Submit an Autospreader order to the local Autospreader Engine. As a result, the // Autospreader Instrument need not be launched to it. If you are going to use any other // Autospreader Engine, you will need to launch the Autospreader Instrument to it. Console.WriteLine("Submitting the Autospreader order to the local Autospreader Engine..."); // An ASInstrumentTradeSubscription object is filtered by the given Autospreader instrument ts = new ASInstrumentTradeSubscription(apiInstance.Session, Dispatcher.Current, instrument); ts.OrderAdded += new EventHandler<OrderAddedEventArgs>(ts_OrderAdded); ts.OrderFilled += new EventHandler<OrderFilledEventArgs>(ts_OrderFilled); ts.OrderRejected += new EventHandler<OrderRejectedEventArgs>(ts_OrderRejected); ts.OrderDeleted += new EventHandler<OrderDeletedEventArgs>(ts_OrderDeleted); ts.OrderUpdated += new EventHandler<OrderUpdatedEventArgs>(ts_OrderUpdated); ts.Start(); AutospreaderSyntheticOrderProfile profile = new AutospreaderSyntheticOrderProfile( apiInstance.Session.MarketCatalog.LocalAutospreaderEngineOrderFeed, instrument); profile.QuantityToWork = Quantity.FromInt(instrument, 1); profile.OrderType = OrderType.Limit; profile.BuySell = BuySell.Buy; profile.LimitPrice = Price.FromInt(instrument, 0); if (apiInstance.Session.SendOrder(profile)) { orderKey = profile.SiteOrderKey; Console.WriteLine("Order Submitted, key: {0}", profile.SiteOrderKey); } else { Console.WriteLine("Send Order failed: {0}", profile.RoutingStatus.Message); Dispose(); } }