Ejemplo n.º 1
0
 protected void OnStopOrderTriggered(StopOrderEventArgs e)
 {
     if (StopOrderTriggered != null)
     {
         StopOrderTriggered(this, e);
     }
 }
Ejemplo n.º 2
0
        public void TryGetCurrentWorkingFlagQtyPrice(double[] marketPrices, out bool[] flags, out int[] qtys, out double[] prices)
        {
            m_BidPrice = marketPrices[0];
            m_AskPrice = marketPrices[1];
            m_MidPrice = marketPrices[2];

            flags  = new bool[2];
            qtys   = new int[2];
            prices = new double[2];
            prices[OrderSide.BuySide]  = double.NaN;
            prices[OrderSide.SellSide] = double.NaN;

            m_CurrentBuyNodes.Clear();
            m_CurrentSellNodes.Clear();

            StopOrderEventType stopOrderEventType;
            TradeSide          tradeSide;
            int    stopQty;
            double stopPrice = double.NaN;

            if (TryDetectStopOrderTriggers(out stopOrderEventType, out tradeSide, out stopQty, out stopPrice))
            {
                StopOrderEventArgs stopOrderEventArgs = new StopOrderEventArgs();
                stopOrderEventArgs.StopOrderEventType = stopOrderEventType;
                stopOrderEventArgs.TradeSide          = tradeSide;
                stopOrderEventArgs.StopQty            = stopQty;
                stopOrderEventArgs.StopPrice          = stopPrice;
                OnStopOrderTriggered(stopOrderEventArgs);

                switch (tradeSide)
                {
                case TradeSide.Unknown:
                    break;

                case TradeSide.Buy:
                    flags[OrderSide.SellSide]  = true;
                    qtys[OrderSide.SellSide]   = stopQty;
                    prices[OrderSide.SellSide] = stopPrice;
                    break;

                case TradeSide.Sell:
                    flags[OrderSide.BuySide]  = true;
                    qtys[OrderSide.BuySide]   = stopQty;
                    prices[OrderSide.BuySide] = stopPrice;
                    break;
                }

                if (prices[OrderSide.SellSide] <= m_BidPrice)
                {
                    prices[OrderSide.SellSide] = m_AskPrice;
                }
                if (prices[OrderSide.BuySide] >= m_AskPrice)
                {
                    prices[OrderSide.BuySide] = m_BidPrice;
                }

                Log.NewEntry(LogLevel.Major, "Stop Orders Triggered for {0} on {1} side with {2} @ {3}:", stopOrderEventType, tradeSide, stopQty, stopPrice);
                Log.NewEntry(LogLevel.Major, DumpCurrentNodesInfo());
            }
            else
            {
                double maxBuyPrice = double.NaN;
                int    buyQty;
                if (TryGetValidBuys(out maxBuyPrice, out buyQty))
                {
                    flags[OrderSide.BuySide]  = true;
                    qtys[OrderSide.BuySide]   = buyQty;
                    prices[OrderSide.BuySide] = maxBuyPrice;
                }

                double minSellPrice = double.NaN;
                int    sellQty;
                if (TryGetValidSells(out minSellPrice, out sellQty))
                {
                    flags[OrderSide.SellSide]  = true;
                    qtys[OrderSide.SellSide]   = sellQty;
                    prices[OrderSide.SellSide] = minSellPrice;
                }
            }
        }