Example #1
0
        private void ShowDDCharts(SystemStateSummary summary)
        {
            const string SimulationDDTooltipFormat = "#VALX{N2}%, Length: #VAL";

            chartDDTicks.LoadData(SystemDrawDown2PointChartMapper.Map(summary.DDTicks), SimulationDDTooltipFormat);
            chartDDPositions.LoadData(SystemDrawDown2PointChartMapper.Map(summary.DDClosedPositions), SimulationDDTooltipFormat);
        }
Example #2
0
 private void ShowSimulationResult(SystemState systemState, SystemStateSummary summary)
 {
     DisplaySummary(summary);
     ShowPositions(systemState);
     ShowEquityCharts(systemState);
     ShowDDCharts(summary);
     ShowProfitCharts(systemState);
 }
 private static void CalcProbabilities(SystemStateSummary summary)
 {
     if (summary.ClosedPositionsCount == 0)
     {
         return;
     }
     summary.WinProbability  = summary.Wins / (float)summary.ClosedPositionsCount;
     summary.LossProbability = summary.Losses / (float)summary.ClosedPositionsCount;
 }
 public static void Calculate(SystemStateSummary summary, SystemState systemState)
 {
     summary.ProcessedTicks       = systemState.Equity.Count;
     summary.ClosedPositionsCount = systemState.PositionsClosed.Count;
     SumWinsLossesAndCalcAvgs(summary, systemState);
     CalcProbabilities(summary);
     summary.ExpectedPositionValue = ExpectedValue(summary.WinProbability, summary.AvgWin, summary.AvgLoss);
     summary.ExpectedUnitReturn    = ExpectedValue(summary.WinProbability, summary.AvgWinLossRatio, 1);
 }
Example #5
0
        public static SystemStateSummary Calculate(SystemState systemState)
        {
            SystemStateSummary summary = CreateNewSummary();

            GetSystemValues(summary, systemState);
            ProcessWinsLosses(summary, systemState);
            CalculateDrawDowns(summary, systemState);
            CalculateEquityDistribution(summary, systemState);
            return(summary);
        }
Example #6
0
        private static void GetSystemValues(SystemStateSummary summary, SystemState systemState)
        {
            summary.StartTS = systemState.Equity.FirstOrDefault().TS;
            summary.StopTS  = systemState.Equity.LastOrDefault().TS;

            summary.InitialValue                = systemState.InitialCash;
            summary.FinalValueOnLastTick        = systemState.Equity.LastOrDefault().Value;
            summary.FinalValueOnClosedPositions = systemState.ClosedPositionsEquity.LastOrDefault().Value;

            double yearsOfSim = (summary.StopTS - summary.StartTS).TotalDays / 365.0;

            summary.CummYProfitPcntOnTicks = (float)Math.Pow(summary.FinalValueOnLastTick / summary.InitialValue, 1 / yearsOfSim) - 1f;
        }
        private static void SumWinsLossesAndCalcAvgs(SystemStateSummary summary, SystemState systemState)
        {
            float sumPcntWins   = 0;
            float sumPcntLosses = 0;

            systemState.PositionsClosed.ForEach(p =>
            {
                float value = p.Value();
                if (value > 0)
                {
                    summary.Wins++;
                    summary.SumWins += value;
                    sumPcntWins     += value / p.OpenValue();
                }
                else
                {
                    summary.Losses++;
                    summary.SumLosses -= value;
                    sumPcntLosses     += value / p.OpenValue();
                }
            });
            if (summary.Wins > 0)
            {
                summary.AvgWin     = summary.SumWins / summary.Wins;
                summary.AvgPcntWin = sumPcntWins / summary.Wins;
            }
            if (summary.Losses > 0)
            {
                summary.AvgLoss     = summary.SumLosses / summary.Losses;
                summary.AvgPcntLoss = sumPcntLosses / summary.Losses;
            }
            if (summary.AvgLoss != 0)
            {
                summary.AvgWinLossRatio = summary.AvgWin / summary.AvgLoss;
            }
        }
Example #8
0
        private void DisplaySummary(SystemStateSummary summary)
        {
            lblSDRStartTS.Text        = summary.StartTS.ToDisplay();
            lblSDRStopTS.Text         = summary.StopTS.ToDisplay();
            lblSDRProcessedTicks.Text = summary.ProcessedTicks.ToDisplay();

            lblSDRInitialValue.Text = summary.InitialValue.ToDisplay();
            lblSDRFinalValueOnClosedPositions.Text = summary.FinalValueOnClosedPositions.ToDisplay();
            lblSDRFinalValueOnLastTick.Text        = summary.FinalValueOnLastTick.ToDisplay();
            lblSDRProfitPcntOnTicks.Text           = summary.CummYProfitPcntOnTicks.ToDisplayPcnt();

            lblSDRClosedPositionsCount.Text = summary.ClosedPositionsCount.ToDisplay();
            lblSDRWins.Text                  = summary.Wins.ToDisplay();
            lblSDRWinProbability.Text        = summary.WinProbability.ToDisplay();
            lblSDRLosses.Text                = summary.Losses.ToDisplay();
            lblSDRLossProbability.Text       = summary.LossProbability.ToDisplay();
            lblSDRSumWins.Text               = summary.SumWins.ToDisplay();
            lblSDRAvgWin.Text                = summary.AvgWin.ToDisplay();
            lblSDRAvgPcntWin.Text            = summary.AvgPcntWin.ToDisplayPcnt();
            lblSDRSumLosses.Text             = summary.SumLosses.ToDisplay();
            lblSDRAvgLoss.Text               = summary.AvgLoss.ToDisplay();
            lblSDRAvgPcntLoss.Text           = summary.AvgPcntLoss.ToDisplayPcnt();
            lblSDRAvgWinLossRatio.Text       = summary.AvgLoss != 0 ? summary.AvgWinLossRatio.ToDisplay() : "---";
            lblSDRExpectedUnitReturn.Text    = summary.AvgLoss != 0 ? summary.ExpectedUnitReturn.ToDisplay() : "---";
            lblSDRExpectedPositionValue.Text = summary.AvgLoss != 0 ? summary.ExpectedPositionValue.ToDisplay() : "---";

            lblSDRMaxDDOnTicks.Text     = summary.DDTicks.MaxDD().ToDisplayPcnt();
            lblSDRMaxDDOnPositions.Text = summary.DDClosedPositions.MaxDD().ToDisplayPcnt();

            lblSDREqDistrAvg.Text    = summary.EquityDistribution.Average.ToDisplay(4);
            lblSDREqDistrStdDev.Text = summary.EquityDistribution.StdDev.ToDisplay(4);

            edtMonteCarloWinProb.Value     = (decimal)summary.WinProbability;
            edtMonteCarloAvgPcntWin.Value  = (decimal)(100f * summary.AvgPcntWin);
            edtMonteCarloAvgPcntLoss.Value = (decimal)(100f * summary.AvgPcntLoss);
        }
Example #9
0
        private async void btnSim_Click(object sender, EventArgs e)
        {
            if (_currentSimSystemDef == null)
            {
                _msgDisplay.Error("System definition not loaded.");
                return;
            }

            edtSimDataLog.Clear();
            while (tcSimulationCharts.TabCount > 2)
            {
                tcSimulationCharts.TabPages.RemoveAt(tcSimulationCharts.TabCount - 1);
            }
            paramsSim.SaveParams(_currentSimSystemDef.SystemParams);

            //using (var frm = new FormLongLastingWork())
            //    await frm.Execute("Processing simulation...", "Simulation error", () =>
            //    {
            //        _currentSimSystemState = new SystemState() { InitialCash = (float)edtInitialCash.Value, Cash = (float)edtInitialCash.Value };
            //        SystemRunner runner = new SystemRunner(_dataProvider, _systemDataLoader);
            //        runner.Run(_currentSimSystemDef, _currentSimSystemState, dtpSimFrom.Value.Date, dtpSimTo.Value.Date);
            //        _currentSimSystemSummary = SystemStateSummaryCalculator.Calculate(_currentSimSystemState);
            //        //ShowSimulationResult(_currentSimSystemState, _currentSimSystemSummary);
            //    });
            //ShowSimulationResult(_currentSimSystemState, _currentSimSystemSummary);

            _currentSimSystemState = new SystemState()
            {
                InitialCash = (float)edtInitialCash.Value, Cash = (float)edtInitialCash.Value
            };
            SystemRunner runner = new SystemRunner(_dataProvider, _systemDataLoader);

            runner.Run(_currentSimSystemDef, _currentSimSystemState, dtpSimFrom.Value.Date, dtpSimTo.Value.Date);
            _currentSimSystemSummary = SystemStateSummaryCalculator.Calculate(_currentSimSystemState);
            ShowSimulationResult(_currentSimSystemState, _currentSimSystemSummary);
        }
 public void SetUp()
 {
     _state   = new SystemState();
     _summary = new SystemStateSummary();
 }
Example #11
0
 private static void CalculateEquityDistribution(SystemStateSummary summary, SystemState systemState)
 {
     summary.EquityDistribution = EquityDistributionCalculator.Calculate(systemState.Equity);
 }
Example #12
0
 private static void CalculateDrawDowns(SystemStateSummary summary, SystemState systemState)
 {
     summary.DDTicks           = DrawDownsCalculator.Calculate(systemState.Equity);
     summary.DDClosedPositions = DrawDownsCalculator.Calculate(systemState.ClosedPositionsEquity);
 }
Example #13
0
 private static void ProcessWinsLosses(SystemStateSummary summary, SystemState systemState) =>
 WinsLossesCalculator.Calculate(summary, systemState);