static void Main(string[] args) { List<ProjectToRun> projects = new List<ProjectToRun>(); projects.Add(ProjectToRun.NewInstance.WithProjectTemplate(CloseOrderTemplate.AtCloseOrder).WithProjectIndex(1)); projects.Add(ProjectToRun.NewInstance.WithProjectTemplate(OpenLongTemplate.AtCloseOrder).WithProjectIndex(2)); projects.Add(ProjectToRun.NewInstance.WithProjectTemplate(OpenShortTemplate.AtCloseOrder).WithProjectIndex(3)); RiskCalculator calculator = new RiskCalculator(); RiskCalculationOutput output = calculator.Calculate( new RiskCalculationInput() { TotalPortfolioAmount = 15000, PortfolioAllocationPercentage = 100, NumberOfPositions = 3, MaxPortfolioRisk = 10, MaxPositionRisk = 2 }); var answer = output.MaximumAllocatedPositionAmount; }
private static void SetCalculatedPositionSizeValue(BaseOpeningStrategy strategy) { RiskCalculator calculator = new RiskCalculator(); RiskCalculationOutput output = calculator.Calculate( new RiskCalculationInput() { TotalPortfolioAmount = strategy.GrandTotalPortfolioAmount, PortfolioAllocationPercentage = strategy.PortfolioAllocationPercentage, NumberOfPositions = strategy.NumberOfPortfolioPositions, MaxPortfolioRisk = strategy.MaxPortfolioRisk, MaxPositionRisk = strategy.MaxPositionRisk }); strategy.EffectiveAmountToInvest = output.MaximumAllocatedPositionAmount; }
private static void SetCalculatedRiskAmountValue(BaseOpeningStrategy strategy) { if (strategy.RiskAmountCalculationStrategy == RiskAmountCalculationStrategy.FixedAmount) { strategy.EffectiveAmountToRisk = strategy.FixedAmountToRiskPerPosition; } else if (strategy.RiskAmountCalculationStrategy == RiskAmountCalculationStrategy.CalculatedBasedOnPortfolioAmount) { RiskCalculator calculator = new RiskCalculator(); RiskCalculationOutput output = calculator.Calculate( new RiskCalculationInput() { TotalPortfolioAmount = strategy.GrandTotalPortfolioAmount, PortfolioAllocationPercentage = strategy.PortfolioAllocationPercentage, NumberOfPositions = strategy.NumberOfPortfolioPositions, MaxPortfolioRisk = strategy.MaxPortfolioRisk, MaxPositionRisk = strategy.MaxPositionRisk }); strategy.EffectiveAmountToInvest = output.MaximumAllocatedPositionAmount; if (strategy.RiskAppetiteStrategy == RiskAppetiteStrategy.MinRisk) strategy.EffectiveAmountToRisk = new double[] { output.MaximumAllocatedPositionRiskAmountByPortfolioRisk, output.MaximumAllocatedPositionRiskAmountByPositionRisk }.Min(); else strategy.EffectiveAmountToRisk = new double[] { output.MaximumAllocatedPositionRiskAmountByPortfolioRisk, output.MaximumAllocatedPositionRiskAmountByPositionRisk }.Max(); } else { throw new NotImplementedException("RiskAmountCalculationStrategy not implemented"); } }