/// <summary> /// Gets the transitive dependent pips that can have outputs /// </summary> protected static HashSet <PipId> GetClosureWithOutputs( IPipFilterContext context, HashSet <PipId> pipIds, Func <IPipFilterContext, PipId, IEnumerable <PipId> > getPips, ClosureMode closureMode) { HashSet <PipId> closure = new HashSet <PipId>(); if (closureMode == ClosureMode.TransitiveIncludingSelf) { var stack = new Stack <PipId>(); foreach (var rootPipId in pipIds) { stack.Push(rootPipId); } while (stack.Count > 0) { var pipId = stack.Pop(); foreach (PipId neighbor in getPips(context, pipId)) { if (MayHaveOutputs(context, neighbor) && closure.Add(neighbor)) { stack.Push(neighbor); } } } } else { Contract.Assert(closureMode == ClosureMode.DirectExcludingSelf); foreach (var pipId in pipIds) { foreach (PipId neighbor in getPips(context, pipId)) { if (MayHaveOutputs(context, neighbor)) { closure.Add(neighbor); } } } } return(closure); }
internal void AnalyzeConditionalClosure() { TotalNetProfit = Grids.Where(x => x.Status == TradeStatus.Active).Select(x => x.RobotPosition.NetProfit).Sum(); ClosureMode closureMode = c.ClosureParameters.ClosureMode; if (closureMode == ClosureMode.Fixed) { var ClosureCondition1 = TotalNetProfit >= robot.ClosureFixedTP.FallbackIfZero(c.ClosureParameters.Fixed.TakeProfit); var ClosureCondition2 = (new[] { Grids.Where(x => x.Status == TradeStatus.Active && x.Side == GridSide.UpperGround).Count(), Grids.Where(x => x.Status == TradeStatus.Active && x.Side == GridSide.UnderGround).Count() }).All(x => x == GridSize) && c.GridParameters.OrderType == OrderType.STOP; var IsPassingMaxDuration = c.ClosureParameters.FallbackClosureMode == FallbackClosureMode.MaxDuration && robot.Time.ToLocalTime() > ActiveSince.ToLocalTime().Add(c.ClosureParameters.MaxDurationSpan); if (ClosureCondition1 || ClosureCondition2 || IsPassingMaxDuration) { CloseCycle(); } } }
/// <summary> /// Class constructor /// </summary> protected ClosureFunctionFilter(PipFilter inner, ClosureMode closureMode = ClosureMode.TransitiveIncludingSelf) { Inner = inner; ClosureMode = closureMode; m_cachedHashCode = HashCodeHelper.Combine(Inner.GetHashCode(), GetType().GetHashCode(), (int)ClosureMode); }
/// <summary> /// Class constructor /// </summary> public DependenciesFilter(PipFilter inner, ClosureMode closureMode = ClosureMode.TransitiveIncludingSelf) : base(inner, closureMode) { }