void PerformInitialOptimization(BackgroundWorker worker, bool isBetter)
{
bool secondChance = (random.Next(100) < 10 && Backtester.NetBalance > 500);
int maxCycles = isBetter ? 3 : 1;
if (isBetter || secondChance)
{
for (int cycle = 0; cycle < maxCycles; cycle++)
{
// Change parameters
ChangeNumericParameters(worker);
// Change Permanent Stop Loss
ChangePermanentSL(worker);
// Change Permanent Take Profit
ChangePermanentTP(worker);
}
// Remove needless filters
RemoveNeedlessFilters(worker);
// Tries to clear the Same / Opposite Signals
NormalizeSameOppositeSignalBehaviour(worker);
// Remove Permanent Stop Loss
if (!chbPreservPermSL.Checked && strategyBest.PropertiesStatus == StrategySlotStatus.Open && Data.Strategy.UsePermanentSL && !worker.CancellationPending)
RemovePermanentSL();
// Remove Permanent Take Profit
if (!chbPreservPermTP.Checked && strategyBest.PropertiesStatus == StrategySlotStatus.Open && Data.Strategy.UsePermanentTP && !worker.CancellationPending)
RemovePermanentTP(worker);
// Reduce the value of numeric parameters
if (!chbUseDefaultIndicatorValues.Checked)
ReduceTheValuesOfNumericParams(worker);
}
}