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);
try
{
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);
SetSrategyDescriptionButton();
bestBalance = balance;
isBetter = true;
isStartegyChanged = true;
RefreshSmallBalanceChart();
RefreshAccountStatisticas();
RebuildStrategyLayout(strategyBest);
Top10AddStrategy();
}
else if (top10Layout.IsNominated(balance))
{
Top10AddStrategy();
}
}
SetLabelCyclesText(cycles.ToString());
}
catch (Exception excaption)
{
string text = GenerateCalculationErrorMessage(excaption.Message);
string caption = "Strategy Calculation Error";
ReportIndicatorError(text, caption);
isBetter = false;
}
return isBetter;
}