public void TestRemove() { for (var i = 0; i < 10; i++) { list.AddLast(i); } Assert.AreEqual(0, list.First.Value); Assert.AreEqual(9, list.Last.Value); list.RemoveFirst(); Assert.AreEqual(1, list.First.Value); Assert.AreEqual(9, list.Last.Value); list.RemoveLast(); Assert.AreEqual(1, list.First.Value); Assert.AreEqual(8, list.Last.Value); list.Remove(4); list.Remove(7); list.Remove(8); list.Remove(1); var node = list.First; Assert.AreEqual(2, node.Value); node = node.Next; Assert.AreEqual(3, node.Value); node = node.Next; Assert.AreEqual(5, node.Value); node = node.Next; Assert.AreEqual(6, node.Value); node = node.Next; Assert.AreEqual(null, node); }
public override void OnChangeTrade(TransactionPairBinary comboTrade, LogicalFill fill, LogicalOrder filledOrder) { var tick = Ticks[0]; var midpoint = (tick.Ask + tick.Bid) / 2; if (!fill.IsComplete) { return; } if (Position.Size > maxTradeSize) { maxTradeSize = Position.Size; } if (comboTrade.CurrentPosition > 0 && fill.Price < maxExcursionLine[0]) { maxExcursionLine[0] = fill.Price; } if (comboTrade.CurrentPosition < 0 && fill.Price > maxExcursionLine[0]) { maxExcursionLine[0] = fill.Price; } var size = Math.Abs(comboTrade.CurrentPosition); var lots = size / lotSize; var change = size - lastSize; lastSize = size; if (change > 0) { if (enableManageRisk) { state = StrategyState.HighRisk; } var tempIndifference = CalcIndifferencePrice(comboTrade); if (Position.IsLong && tempIndifference < bestIndifferenceLine[0]) { bestIndifferenceLine[0] = tempIndifference; } if (Position.IsShort && tempIndifference > bestIndifferenceLine[0]) { bestIndifferenceLine[0] = tempIndifference; } if (lots > nextIncreaseLots) { nextIncreaseLots = (nextIncreaseLots * 3) / 2; } sequentialIncreaseCount++; var changed = false; change = Math.Abs(change); if (fills.First != null) { var firstFill = fills.First.Value; if (firstFill.Size + change <= lotSize) { firstFill.Size += change; changed = true; } } if (!changed) { fills.AddFirst(new LocalFill(change, fill.Price, fill.Time)); } SetupBidAsk(fill.Price); } else { sequentialIncreaseCount = 0; change = Math.Abs(change); var prevFill = fills.First.Value; if (change <= prevFill.Size) { prevFill.Size -= change; if (prevFill.Size == 0) { fills.RemoveFirst(); if (fills.Count > 0) { SetupBidAsk(fill.Price); } } return; } change -= prevFill.Size; fills.RemoveFirst(); SetupBidAsk(fill.Price); return; //for (var current = fills.Last; current != null; current = current.Previous) //{ // prevFill = current.Value; // if (change > prevFill.Size) // { // change -= prevFill.Size; // fills.Remove(current); // if (fills.Count > 0) // { // SetupBidAsk(fill.Price); // } // } // else // { // prevFill.Size -= change; // if (prevFill.Size == 0) // { // fills.Remove(current); // if (fills.Count > 0) // { // SetupBidAsk(fill.Price); // } // } // break; // } //} } LogFills("OnChange"); }