public void TestCarteira() { Config config = new Config(); TradeSystem tradeSystem = new TradeSystem(config); MonteCarlo mc = new MonteCarlo("Teste"); float valorInicial = 100000; Carteira carteira = new Carteira(facade, 100000, config, tradeSystem, mc); config.custoOperacao = 20f; Assert.IsTrue(carteira.capitalInicial == valorInicial); Assert.IsTrue(carteira.capitalLiq == valorInicial); Ativo ativoInex = new Ativo(facade, "ERR", 100); Ativo ativo = new Ativo(facade, "PETR4", 100); Periodo periodo1 = new Periodo("2015-06-05 00:00"); Periodo periodo2 = new Periodo("2015-06-06 00:00"); float closeInicial = 3; float closeFinal = 2.7f; Candle candleInicial = new Candle(periodo1, ativo, closeInicial * 0.9f, closeInicial, closeInicial * 1.2f, closeInicial * 0.9f, 1000); Candle candleFinal = new Candle(periodo2, ativo, closeFinal * 0.9f, closeFinal, closeFinal * 1.2f, closeFinal * 0.8f, 1000); ativo.AddCandle(candleInicial); ativo.AddCandle(candleFinal); Assert.IsTrue(carteira.capitalLiq == valorInicial); carteira.EfetuaEntrada(ativo, periodo1, 1, closeInicial, closeInicial * 0.8f, 1); Assert.IsTrue(carteira.capitalLiq < valorInicial, carteira.capitalLiq + ">=" + valorInicial); Posicao posicao = carteira.GetPosicaoDoAtivo(ativo); Assert.IsNotNull(posicao); Assert.IsTrue(posicao.ativo == ativo); Assert.IsTrue(posicao.operacoesAbertas.Count == 1); Operacao oper = posicao.operacoesAbertas[0]; Assert.IsTrue(oper.qtd > 0); Assert.IsTrue(carteira.capitalLiq + oper.qtd * oper.vlrEntrada + config.custoOperacao == valorInicial); carteira.periodoAtual = periodo1; carteira.AtualizaPosicao(); Assert.IsTrue(carteira.capitalLiq + carteira.capitalPosicao == valorInicial - config.custoOperacao, "Posicao: " + carteira.capitalPosicao); carteira.periodoAtual = periodo2; carteira.AtualizaPosicao(); Assert.IsTrue(carteira.capitalPosicao == 0, "vlr posicao:" + carteira.capitalPosicao); // cartAssert.IsTrue(oper.qtd>0);eira. /* int qtdAcoesOrdem = 350; int qtdAcoesEsperado = 300; * carteira.EfetuaCompra(candleInicial, qtdAcoesOrdem); * float capitalEsperado = valorInicial - config.custoOperacao - qtdAcoesEsperado * closeInicial; * Assert.IsTrue(carteira.capitalLiq == capitalEsperado, "Capital atual:" + carteira.capitalLiq + " <> " + capitalEsperado); * * Posicao posicao = carteira.GetPosicaoDoAtivo(ativo); * Assert.IsNotNull(posicao); * Assert.IsTrue(posicao.saldo == qtdAcoesEsperado); * * carteira.EfetuaCompra(candleInicial, qtdAcoesOrdem); * capitalEsperado = valorInicial - 2 * (config.custoOperacao + qtdAcoesEsperado * closeInicial); * Assert.IsTrue(carteira.capitalLiq == capitalEsperado, "Capital atual:" + carteira.capitalLiq + " <> " + capitalEsperado); * Assert.IsTrue(posicao.saldo == qtdAcoesEsperado * 2); * * int maxQtd = (int)(capitalEsperado / closeInicial); * maxQtd -= maxQtd % ativo.loteMin; * carteira.EfetuaCompra(candleInicial, maxQtd * 2); * qtdAcoesEsperado = qtdAcoesEsperado * 2 + maxQtd; * Assert.IsTrue(posicao.saldo == qtdAcoesEsperado); * capitalEsperado -= maxQtd * closeInicial + config.custoOperacao; * Assert.IsTrue(carteira.capitalLiq == capitalEsperado, "Capital atual:" + carteira.capitalLiq + " <> " + capitalEsperado); * * //Venda * carteira.EfetuaVenda(candleFinal, 150); * capitalEsperado = capitalEsperado + closeFinal * 100 - config.custoOperacao; * Assert.IsTrue(carteira.capitalLiq == capitalEsperado, "Capital atual:" + carteira.capitalLiq + " <> " + capitalEsperado); * qtdAcoesEsperado -= 100; * Assert.IsTrue(posicao.saldo == qtdAcoesEsperado); * * * carteira.EfetuaVenda(candleFinal, qtdAcoesEsperado * 100); * capitalEsperado = capitalEsperado + qtdAcoesEsperado * closeFinal - config.custoOperacao; * Assert.IsTrue(carteira.capitalLiq == capitalEsperado, "Capital atual:" + carteira.capitalLiq + " <> " + capitalEsperado); * Assert.IsTrue(posicao.saldo == 0);*/ }
public void TestBacktesterVars() { Config config = new Config(); config.capitalInicial = 100000; TradeSystem tradeSystem = new TradeSystem(config); facade.LoadAtivo("PETR4", 100, Consts.PERIODO_ACAO.DIARIO, "dados/petr4-diario.js", backend.Consts.TIPO_CARGA_ATIVOS.GERA_CANDIDATOS); Ativo ativo = facade.GetAtivo("PETR4"); Assert.IsNotNull(ativo); Assert.IsTrue(ativo.candles.Count > 0); Candle candle = ativo.firstCandle; Periodo periodo = candle.periodo; BackTester bt = new BackTester(facade, periodo, config, tradeSystem); Carteira carteira = bt.carteira; Assert.IsNotNull(carteira); Assert.IsTrue(carteira.posicoesFechadas.Count == 0); Assert.IsTrue(carteira.posicoesAbertas.Count == 0); float riscoTotal = carteira.GetRiscoCarteiraPercent(periodo); Assert.IsTrue(riscoTotal == 0); // carteira.EfetuaEntrada(ativo, periodo, 1, 10, 9, 1); //entro com um valor fixo (direto na carteira) Posicao posicao = new Posicao(carteira, ativo, 0); carteira.posicoesAbertas.Add(ativo, posicao); int qtd = 1000; posicao.saldo += qtd; Operacao oper1 = new Operacao(carteira, candle, 10, 9, qtd, 1, null); posicao.operacoesAbertas.Add(oper1); float capitalSobRisco = ((10 - 9) * qtd); float riscoEsperado = capitalSobRisco / carteira.GetCapital() * 100; carteira.capitalLiq -= oper1.vlrEntrada * oper1.qtd; candle.SetValor(FormulaManager.CLOSE, 10); carteira.periodoAtual = periodo; carteira.AtualizaPosicao(); Assert.IsTrue(carteira.GetCapital() == 100000, carteira.GetCapital() + "<>" + 100000); Assert.IsTrue(carteira.capitalPosicao == 10000, carteira.GetCapital() + "<>" + 10000); riscoTotal = carteira.GetRiscoCarteiraPercent(periodo); Assert.IsTrue(riscoTotal == riscoEsperado, riscoTotal + "<>" + riscoEsperado); //2a operacao Operacao oper2 = new Operacao(carteira, candle, 10, 9, qtd, 1, null); posicao.operacoesAbertas.Add(oper2); posicao.saldo += qtd; carteira.AtualizaPosicao(); carteira.capitalLiq -= oper1.vlrEntrada * oper1.qtd; capitalSobRisco *= 2; riscoEsperado = capitalSobRisco / carteira.GetCapital() * 100; Assert.IsTrue(carteira.GetCapital() == 100000, carteira.GetCapital() + "<>" + 100000); Assert.IsTrue(carteira.capitalPosicao == 20000, carteira.GetCapital() + "<>" + 20000); riscoTotal = carteira.GetRiscoCarteiraPercent(periodo); Assert.IsTrue(riscoTotal == riscoEsperado, riscoTotal + "<>" + riscoEsperado); tradeSystem.vm.GetVariavel(Consts.VAR_RISCO_TRADE).vlrAtual = 2; tradeSystem.vm.GetVariavel(Consts.VAR_RISCO_GLOBAL).vlrAtual = 5; float qtdTrade = carteira.CalculaQtdTrade(100000, 10, 12, periodo); Assert.IsTrue(qtdTrade == 980, qtdTrade + "<>" + 980); }