示例#1
0
        /// <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();
                }
            }
        }
示例#3
0
 /// <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);
 }
示例#4
0
 /// <summary>
 /// Class constructor
 /// </summary>
 public DependenciesFilter(PipFilter inner, ClosureMode closureMode = ClosureMode.TransitiveIncludingSelf)
     : base(inner, closureMode)
 {
 }