public void TradeCorridorTurnOnIfManual(TradeDirections tds) { var bsl = new[] { BuyLevel, SellLevel }; if (tds.HasNone()) { if (!IsTurnOnOnly) { bsl.ForEach(sr => sr.CanTrade = false); } } else if (CanTriggerTradeDirection() && !TradeConditionsHaveTurnOff()) { var cps = new[] { CurrentEnterPrice(true), CurrentEnterPrice(false) }; var canTradeAny = bsl.Any(sr => sr.CanTrade); Func <bool> isIn = () => cps.All(cp => cp.Between(bsl[1].Rate, bsl[0].Rate)); Func <SuppRes, int> tradeCount = sr => sr.IsBuy ? tds.HasUp() ? 0 : 1 : tds.HasDown() ? 0 : 1; Func <SuppRes, bool> canTrade = sr => sr.IsBuy ? tds.HasUp() : tds.HasDown(); if (!canTradeAny && bsl.All(sr => sr.InManual /* && isIn()*/)) { bsl .Where(sr => sr.HasRateCanTradeChanged) .ForEach(sr => { sr.ResetPricePosition(); sr.CanTrade = canTrade(sr); sr.TradesCount = TradeCountStart; }); } } }