/// <summary> /// Calculates the generated result /// </summary> private bool CalculateTheResult(bool isSaveEqualResult) { bool isBetter = false; _cycles++; Data.FirstBar = Data.Strategy.SetFirstBar(); Data.Strategy.AdjustUsePreviousBarValue(); // Sets default logical group for all slots that are open (not locked or linked). foreach (IndicatorSlot slot in Data.Strategy.Slot) { if (slot.SlotStatus == StrategySlotStatus.Open) { slot.LogicalGroup = Data.Strategy.GetDefaultGroup(slot.SlotNumber); } } #if !DEBUG try { #endif Backtester.Calculate(); int balance = (_isOOS ? Backtester.Balance(_barOOS) : Backtester.NetBalance); bool isLimitationsOK = IsLimitationsFulfilled(); if (isLimitationsOK) { if (_bestBalance < balance || (_bestBalance == balance && (isSaveEqualResult || Data.Strategy.Slots < _strategyBest.Slots))) { _strategyBest = Data.Strategy.Clone(); _strategyBest.PropertiesStatus = Data.Strategy.PropertiesStatus; for (int slot = 0; slot < Data.Strategy.Slots; slot++) { _strategyBest.Slot[slot].SlotStatus = Data.Strategy.Slot[slot].SlotStatus; } string description = GenerateDescription(); if (balance > _bestBalance) { AddStrategyToGeneratorHistory(description); } else { UpdateStrategyInGeneratorHistory(description); } SetStrategyDescriptionButton(); _bestBalance = balance; isBetter = true; _isStartegyChanged = true; RefreshSmallBalanceChart(); RefreshAccountStatisticas(); RebuildStrategyLayout(_strategyBest); Top10AddStrategy(); } else if (Top10Field.IsNominated(balance)) { Top10AddStrategy(); } } SetLabelCyclesText(_cycles.ToString(CultureInfo.InvariantCulture)); #if !DEBUG } catch (Exception exception) { string text = GenerateCalculationErrorMessage(exception.Message); const string caption = "Strategy Calculation Error"; ReportIndicatorError(text, caption); isBetter = false; } #endif return(isBetter); }