public Carteira RunSingle(string name, ICaller caller, model.system.Config config, model.system.TradeSystem ts) { backTester = new BackTester(this, dh.periodos[0], config, ts); return(backTester.runMonteCarlo(caller, name)); }
public Carteira RunValidation(ICaller caller, model.system.Config config, model.system.TradeSystem ts, string name = "??") { backTester = new BackTester(this, dh.periodos[0], config, ts); return(backTester.runSingleBackTest(caller, new MonteCarlo(name))); }
public void FinishStats(FormulaManager fm, Carteira carteira) { TradeSystem tradeSystem = carteira.tradeSystem; if (ERROR_STOP_0) { fitness -= PENALTY * 100; carteira.tradeSystem.AddError("Stop 0"); } if (ERROR_VLR_STOP_ERRADO) { fitness -= PENALTY * 100; } if (ERROR_DISTANCIA_SUPERADA > 0) { fitness -= PENALTY * ERROR_DISTANCIA_SUPERADA * 100; } //O tradesystem tentou entrar em todo candle... o que é ruim... if (tentouEntrarTodoCandle) { fitness -= PENALTY * 10000; carteira.tradeSystem.AddError("Tentou entrar em todo candle (condicao entrada sempre true)"); } //tentou usar um de sizing fora do range 0 a 100 if (flagSizingForaRange) { fitness -= PENALTY * 1000; carteira.tradeSystem.AddError("Sizing fora do range"); } if (qtdTrades == 0) { fitness -= PENALTY * 10000f; carteira.tradeSystem.AddError("Zero trades Gerados"); } fitness += qtdTradesGanhadores * BONUS * 10f; if (qtdTradesGanhadores < QTD_MINIMA_TRADES / 4) { fitness -= PENALTY * 10000f; carteira.tradeSystem.AddWarning("Qtd. Trades Ganhadores muito baixa."); } bool viciadaCompra = carteira.config.flagCompra && ((tradeSystem.usaStopMovel && clarify.VerificaFormulaViciada(fm, tradeSystem.stopMovelC)) || clarify.VerificaFormulaViciada(fm, tradeSystem.condicaoEntradaC) || clarify.VerificaFormulaViciada(fm, tradeSystem.stopInicialC)); bool viciadaVenda = carteira.config.flagVenda && ((tradeSystem.usaStopMovel && clarify.VerificaFormulaViciada(fm, tradeSystem.stopMovelV)) || clarify.VerificaFormulaViciada(fm, tradeSystem.condicaoEntradaV) || clarify.VerificaFormulaViciada(fm, tradeSystem.stopInicialV)); if (viciadaCompra || viciadaVenda) { fitness -= PENALTY * 10000f; carteira.tradeSystem.AddError("TradeSystem dependendo de números para gerar resultados."); } //TODO: Rever essa conta... acho que está prejudicando os que começam a dar lucro... /* if (global.maxCapital > carteira.capitalInicial) * { * float difMaxCapital = (global.maxCapital - carteira.GetCapital()) * 10; * fitness -= difMaxCapital; * }*/ //Conta a variedade nas ações ganhadoras: acerta 2 ações é melhor que 1 ação fitness += CalcBonusVariedade(carteira); float difCapital = carteira.GetCapital() - carteira.capitalInicial; fitness += BONUS * difCapital / 1000; if (difCapital <= 0) { fitness -= PENALTY * 100; } fitness += VerificaNumerosFormula(carteira); int difTrades = QTD_MINIMA_TRADES - qtdTrades; if (difTrades > 0) { fitness -= PENALTY * difTrades * 1000; carteira.tradeSystem.AddWarning("Não atingiu a quantidade mínima de trades."); } else if (difCapital > 0) { fitness += percAcerto * BONUS * 100; } /*//só dou bonus de acerto para os que estiverem acima do objetivo de qtd minima de trades * if (difTrades == 0) * { * FitnessQtdAcoes(); * FitnessPercUsoCapital(); * fitness += BONUS * percAcerto / 10; * float avgDias = global.getGeral().getAmbasPontas().getTodosTrades().getAvgDias(); * //bonus até 50 dias... * if (avgDias < AVG_DIAS_GOAL) * { * fitness += BONUS; * } * } */ fitness /= 1000; }
public Carteira Run(ICaller caller, model.system.Config config, model.system.TradeSystem ts, string name = "??") { backTester = new BackTester(this, dh.periodos[0], config, ts); backTester.runBackTest(caller, name); return(backTester.carteira); }
public Carteira(FacadeBacktester facade, float capitalInicial, system.Config config, system.TradeSystem tradeSystem, MonteCarlo mc) { this.facade = facade; this.capitalInicial = capitalInicial; this.capitalLiq = capitalInicial; posicoesAbertas = new Dictionary <Ativo, Posicao>(); this.config = config; posicoesFechadas = new List <Posicao>(); capitalPosicao = 0; this.tradeSystem = tradeSystem; estatistica = new Estatistica(capitalInicial); capitalMes = capitalInicial; this.monteCarlo = mc; }