예제 #1
0
        }     // Update().

        //
        //
        //
        //
        //
        // ****                 Update Stop Levels()                ****
        //
        public void NewFill(UV.Lib.Fills.Fill aFill)
        {
            UpdateNewFill(aFill.Qty, aFill.Price, m_LastPosition);
            m_LastPosition       += aFill.Qty;
            this.IsUpdateRequired = true;
            BroadcastParameters();
        }//UpdateStopLevels
예제 #2
0
        public void TryProcessFills(UV.Lib.Fills.Fill fill)
        {
            int filledQty = fill.Qty;

            m_NetPosition += filledQty;
            Log.NewEntry(LogLevel.Minor, "****Filled {0} @ {1} at {2}. Start Level:{3} / {4} Net Position:{5}****", filledQty, fill.Price, fill.LocalTime, m_CurrentBuyNodes.Count, m_CurrentSellNodes.Count, m_NetPosition);
            Log.NewEntry(LogLevel.Minor, "Start : {0}", DumpCurrentNodesInfo());
            TradeSide   tradeSide    = (filledQty > 0) ? TradeSide.Buy : TradeSide.Sell;
            int         absFilledQty = Math.Abs(filledQty);
            TradingNode tradingNode  = null;

            if (filledQty > 0)
            {
                int buyLevel = m_CurrentBuyNodes.Count - 1;
                while (absFilledQty > 0 && buyLevel >= 0)
                {
                    tradingNode = m_CurrentBuyNodes[buyLevel];
                    switch (tradingNode.TradeSide)
                    {
                    case TradeSide.Unknown:
                        break;

                    case TradeSide.Buy:
                        if (tradingNode.WorkingEnterQty >= absFilledQty)
                        {
                            tradingNode.WorkingExitQty  += absFilledQty;
                            tradingNode.WorkingEnterQty -= absFilledQty;
                            absFilledQty = 0;
                        }
                        else
                        {
                            tradingNode.WorkingExitQty += tradingNode.WorkingEnterQty;
                            absFilledQty -= tradingNode.WorkingEnterQty;
                            tradingNode.WorkingEnterQty = 0;
                        }
                        break;

                    case TradeSide.Sell:
                        if (tradingNode.WorkingExitQty >= absFilledQty)
                        {
                            tradingNode.WorkingEnterQty += absFilledQty;
                            tradingNode.WorkingExitQty  -= absFilledQty;
                            absFilledQty = 0;
                        }
                        else
                        {
                            absFilledQty -= tradingNode.WorkingExitQty;
                            tradingNode.WorkingEnterQty += tradingNode.WorkingExitQty;
                            tradingNode.WorkingExitQty   = 0;
                        }
                        break;
                    }
                    buyLevel--;
                }
            }
            else
            {
                int sellLevel = m_CurrentSellNodes.Count - 1;
                while (absFilledQty > 0 && sellLevel >= 0)
                {
                    tradingNode = m_CurrentSellNodes[sellLevel];
                    switch (tradingNode.TradeSide)
                    {
                    case TradeSide.Unknown:
                        break;

                    case TradeSide.Buy:
                        if (tradingNode.WorkingExitQty >= absFilledQty)
                        {
                            tradingNode.WorkingEnterQty += absFilledQty;
                            tradingNode.WorkingExitQty  -= absFilledQty;
                            absFilledQty = 0;
                        }
                        else
                        {
                            absFilledQty -= tradingNode.WorkingExitQty;
                            tradingNode.WorkingEnterQty += tradingNode.WorkingExitQty;
                            tradingNode.WorkingExitQty   = 0;
                        }
                        break;

                    case TradeSide.Sell:
                        if (tradingNode.WorkingEnterQty >= absFilledQty)
                        {
                            tradingNode.WorkingExitQty  += absFilledQty;
                            tradingNode.WorkingEnterQty -= absFilledQty;
                            absFilledQty = 0;
                        }
                        else
                        {
                            tradingNode.WorkingExitQty += tradingNode.WorkingEnterQty;
                            absFilledQty -= tradingNode.WorkingEnterQty;
                            tradingNode.WorkingEnterQty = 0;
                        }
                        break;
                    }
                    sellLevel--;
                }
            }
            if (absFilledQty > 0)
            {
                Log.NewEntry(LogLevel.Minor, "There is overfill at {0} @ {1}", absFilledQty, tradeSide);
                switch (tradeSide)
                {
                case TradeSide.Unknown:
                    break;

                case TradeSide.Buy:
                    break;

                case TradeSide.Sell:
                    break;
                }
            }
            Log.NewEntry(LogLevel.Minor, "End : {0}", DumpCurrentNodesInfo());
        }