public void Liquidate() { RemovePendingLimitOrders(); MarkStopTicketsFilled(); foreach (var tradeProfile in _tradeProfiles.Where(x => !x.IsTradeFinished)) { tradeProfile.ExitTicket = _orderMethods.MarketOrder(_symbol, -(int)tradeProfile.OpenTicket.QuantityFilled); tradeProfile.StopTicket.Cancel(); tradeProfile.IsTradeFinished = true; } RemoveAllFinishedTrades(); }
/// <summary> /// Executes all the logic when the Enter Signal is triggered /// </summary> /// <param name="data"></param> public void EnterTradeSignal(TradeBar data, Security symbol) { EnterSignal.Scan(data); if (symbol.IsTradable && EnterSignal.Signal == SignalType.Long || EnterSignal.Signal == SignalType.Short) { //Creates a new trade profile once it enters a trade var profile = new TradeProfile(_symbol, _security.VolatilityModel.Volatility, _risk, data.Close, _maximumTradeSize); profile.ExitSignal = ExitSignal.ExitSignalFactory(profile); var profileQuantity = profile.Quantity; if (profileQuantity > 0) { profile.OpenTicket = _orderMethods.MarketOrder(_symbol, (int)EnterSignal.Signal * profile.Quantity); profile.StopTicket = _orderMethods.StopMarketOrder(_symbol, -(int)EnterSignal.Signal * profile.Quantity, profile.OpenTicket.AverageFillPrice - (int)EnterSignal.Signal * profile.DeltaStopLoss); _tradeProfiles.Add(profile); } } }