private void AdjustExitLevelsByTradeTime(Action <double, double> adjustExitLevels) { Func <double, IEnumerable <double> > rateSinceTrade = def => { var d = Trades.Max(t => t.Time); //d = d - ServerTime.Subtract(d); return(TradingMacroTrender(tm => tm.UseRates(rates => rates.BackwardsIterator() .TakeWhile(r => r.StartDate >= d) .Select(GetPriceMA))) .Concat() .Concat() .DefaultIfEmpty(def)); }; var buyLevel = Trades.HaveBuy() ? rateSinceTrade(BuyLevel.Rate).Min().Min(ExitByBuySellLevel ? BuyLevel.Rate : double.NaN) : BuyLevel.Rate; var sellLevel = Trades.HaveSell() ? rateSinceTrade(SellLevel.Rate).Max().Max(ExitByBuySellLevel ? SellLevel.Rate : double.NaN) : SellLevel.Rate; adjustExitLevels(buyLevel, sellLevel); }