private ArbitrageOrderSettlement CalculateSettlementResult() { USeArbitrageOrder arbitrageOrder = null; lock (m_syncObj) { arbitrageOrder = m_arbitrageOrder.Clone(); } List <USeOrderBook> orderBookList = arbitrageOrder.GetAllOrderBooks(); USeInstrument buyInstrument = arbitrageOrder.OpenArgument.BuyInstrument; USeInstrument sellInstrument = arbitrageOrder.OpenArgument.SellInstrument; USeMarketData buyMarketData = USeManager.Instance.QuoteDriver.Query(buyInstrument); USeMarketData sellMarketData = USeManager.Instance.QuoteDriver.Query(sellInstrument); USeInstrumentDetail buyInstrumentDetail = USeManager.Instance.OrderDriver.QueryInstrumentDetail(buyInstrument); USeInstrumentDetail sellInstrumentDetail = USeManager.Instance.OrderDriver.QueryInstrumentDetail(sellInstrument); decimal buyProfit = CalculateProfit(orderBookList, buyInstrumentDetail, buyMarketData); decimal sellProfit = CalculateProfit(orderBookList, sellInstrumentDetail, sellMarketData); decimal totalProfit = buyProfit + sellProfit; ArbitrageOrderSettlement settlemt = new ArbitrageOrderSettlement() { BuyInstrumentProfit = buyProfit, SellInstrumentProfit = sellProfit, Profit = totalProfit }; return(settlemt); }
/// <summary> /// 初始化套利下单机。 /// </summary> /// <param name="arbitrageOrder">套利单信息。</param> /// <param name="orderDriver">下单驱动。</param> /// <param name="quoteDriver">行情驱动。</param> /// <param name="alarmManager">预警管理类。</param> public void Initialize(USeArbitrageOrder arbitrageOrder, USeOrderDriver orderDriver, USeQuoteDriver quoteDriver, AlarmManager alarmManager) { if (m_initialized) { throw new ApplicationException(string.Format("{0} already initialized.", this)); } if (arbitrageOrder == null) { throw new ArgumentNullException("arbitrageOrder", "arbitrageOrder is null"); } if (orderDriver == null) { throw new ArgumentNullException("orderDriver", "orderDriver is null"); } if (quoteDriver == null) { throw new ArgumentNullException("quoteDrvier", "quoteDrvier is null"); } if (alarmManager == null) { throw new ArgumentNullException("alarmManager", "alarmManager is null"); } try { lock (m_syncObj) { m_arbitrageOrder = arbitrageOrder.Clone(); m_orderDriver = orderDriver; m_quoteDriver = quoteDriver; } m_orderDriver.OnOrderBookChanged += OrderDriver_OnOrderBookChanged; m_quoteDriver.OnMarketDataChanged += QuoteDriver_OnMarketDataChanged; if (arbitrageOrder.OpenArgument != null) { m_quoteDriver.Subscribe(arbitrageOrder.OpenArgument.BuyInstrument); m_quoteDriver.Subscribe(arbitrageOrder.OpenArgument.SellInstrument); } string text = string.Format("初始化套利单完成,当前状态为[{0}]", arbitrageOrder.State.ToDescription()); AutoTraderNotice notice = CreateTraderNotice(text); SafeFireAutoTraderNotice(notice); WriteTraderNoticeLog(notice); } catch (Exception ex) { string text = string.Format("初始化套利单失败,原因:{0}", ex.Message); AutoTraderNotice notice = CreateTraderNotice(text); SafeFireAutoTraderNotice(notice); WriteTraderNoticeLog(notice); throw new Exception("初始化自定下单机失败"); } m_initialized = true; }