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); }
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); }
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); }