public override void RunSolution(GPSolution solution) { TradeSystem ts = solution.GetPropriedade(ConstsComuns.OBJ_TRADESYSTEM) as TradeSystem; ts.name = solution.name; Carteira carteira = gpController.RunBackTester(ts, solution.name); carteira.monteCarlo.properties = solution; float dif = carteira.GetCapital() - carteira.capitalInicial; if (dif > 0) { float?vExist = solution.GetPropriedade(ConstsComuns.OBJ_TOTAL_PROFIT) as float?; float v = vExist == null ? 0 : (float)vExist; v += dif; solution.SetPropriedade(ConstsComuns.OBJ_TOTAL_PROFIT, v); } else { float?vExist = solution.GetPropriedade(ConstsComuns.OBJ_TOTAL_LOSS) as float?; float v = vExist == null ? 0 : (float)vExist; v += dif; solution.SetPropriedade(ConstsComuns.OBJ_TOTAL_LOSS, v); } solution.iterations++; solution.SetPropriedade(ConstsComuns.OBJ_ITERATIONS, solution.iterations); solution.fitnessResult = carteira.monteCarlo.CalcFitness(); }
public override void EndSolution(GPSolution solution) { solution.RemovePropriedade(UsoComum.ConstsComuns.OBJ_MONTECARLO); if (solution.iterations >= config.saveMinIterations) { float totalProfit = solution.GetPropriedadeAsFloat(UsoComum.ConstsComuns.OBJ_TOTAL_PROFIT); float totalLoss = Math.Abs(solution.GetPropriedadeAsFloat(UsoComum.ConstsComuns.OBJ_TOTAL_LOSS)); float profitRatio = totalProfit / (totalProfit + totalLoss + 1); if (profitRatio > config.saveMinProfitRatio) { GPSolutionProxy proxy = new GPSolutionProxy(); proxy.solution = solution; proxy.tradeSystem = solution.GetPropriedade(UsoComum.ConstsComuns.OBJ_TRADESYSTEM) as TradeSystem; solution.RemovePropriedade(UsoComum.ConstsComuns.OBJ_TRADESYSTEM); SaveSolutionToCheck(proxy); } } }