} // 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
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()); }