Пример #1
0
        public override PositionSizingComponentResult EstimatePositionSize(ITradingObject tradingObject, double price, double stopLossGap, int totalNumberOfObjectsToBeEstimated)
        {
            var result = new PositionSizingComponentResult();

            if (totalNumberOfObjectsToBeEstimated > MaxObjectNumberToBeEstimated)
            {
                return(result);
            }

            var currentEquity = Context.GetCurrentEquity(CurrentPeriod, EquityEvaluationMethod);

            var maxParts = MaxPartsOfAdpativeAllocation == 0 ? MinPartsOfAdpativeAllocation : MaxPartsOfAdpativeAllocation;

            int parts = PartsOfEquity == 0
                ? Math.Max(Math.Min(totalNumberOfObjectsToBeEstimated, maxParts), MinPartsOfAdpativeAllocation)
                : PartsOfEquity;

            double equityUtilization = GetDynamicEquityUtilization(tradingObject);

            result.Comments = string.Format(
                "positionsize = currentEquity({0:0.000}) * equityUtilization({1:0.000}) / Parts ({2}) / price({3:0.000})",
                currentEquity,
                equityUtilization,
                parts,
                price);

            result.PositionSize = (int)(currentEquity * equityUtilization / parts / price);

            return(result);
        }
Пример #2
0
        public override PositionSizingComponentResult EstimatePositionSize(ITradingObject tradingObject, double price, double stopLossGap, int totalNumberOfObjectsToBeEstimated)
        {
            var result = new PositionSizingComponentResult();

            if (totalNumberOfObjectsToBeEstimated > MaxObjectNumberToBeEstimated)
            {
                return(result);
            }

            var currentEquity = Context.GetCurrentEquity(CurrentPeriod, EquityEvaluationMethod);

            int parts = GetParts(totalNumberOfObjectsToBeEstimated);

            double totalEquityUtilization = GetDynamicEquityUtilization(tradingObject);

            double boardIndexUtilization = _calculator.CalculateEquityUtilization(tradingObject);

            double finalUtilization = totalEquityUtilization * boardIndexUtilization;

            result.Comments = string.Format(
                "positionsize = currentEquity({0:0.000}) * equityUtilization({1:0.000}) / Parts ({2}) / price({3:0.000})",
                currentEquity,
                finalUtilization,
                parts,
                price);

            result.PositionSize = (int)(currentEquity * finalUtilization / parts / price);

            return(result);
        }
Пример #3
0
        public override PositionSizingComponentResult EstimatePositionSize(ITradingObject tradingObject, double price, double stopLossGap, int totalNumberOfObjectsToBeEstimated)
        {
            var currentEquity = Context.GetCurrentEquity(CurrentPeriod, EquityEvaluationMethod);

            var result = new PositionSizingComponentResult();

            if (Math.Abs(stopLossGap) < 1e-6)
            {
                result.Comments     = "positionsize = 0 because stopLossGap is too small";
                result.PositionSize = 0;
            }
            else
            {
                var size = (int)(currentEquity * PercentageOfEquityForEachRisk / 100.0 / Math.Abs(stopLossGap));

                result.Comments = string.Format(
                    "positionsize({3}) = CurrentEquity({0:0.000}) * PercentageOfEquityForEachRisk({1:0.000}) / 100.0 / Risk({2:0.000})",
                    currentEquity,
                    PercentageOfEquityForEachRisk,
                    Math.Abs(stopLossGap),
                    size);
                result.PositionSize = size;
            }

            return(result);
        }