public void AddToPosition_NewVolPositive__ClosesCurrent_CreatesNewWithNewVolume(PositionDir dir, float open, float vol, float addPrice, float addVol) { Position pos = CreatePosition(dir, open, vol); _testObj.PositionsActive.Add(pos); _testObj.AddToPosition(0, CurrentTS, addPrice, addVol, EntrySignal, _slippage, _commission); _testObj.Cash.ShouldBe(CashValue - pos.DirectionMultiplier() * (addPrice * addVol) - 2 * Commission); _testObj.PositionsClosed.Count.ShouldBe(1); _testObj.ClosedPositionsEquity.Count.ShouldBe(1); CheckClosedPosition(0, dir, open, addPrice, vol, Commission, CurrentTS, 0); _testObj.PositionsActive.Count.ShouldBe(1); CheckOpenedPosition(_testObj.PositionsActive[0], _stock, dir, addPrice, vol + addVol, Commission, CurrentTS, StockDataRange.Daily, 0); }
public static void ReducePosition(this SystemState systemState, int positionIndex, DateTime ts, float price, float volume, Signal signal, ISlippage slippage, ICommission commission) { systemState.AddToPosition(positionIndex, ts, price, -volume, signal, slippage, commission); }