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);
                }
            }
        }