public void TestInicial() { string ativoName = "ABCD"; Ativo ativo = new Ativo(facade, ativoName, 100); facade.AddAtivo(ativo); Ativo ativoGet = facade.GetAtivo(ativoName); Assert.IsNotNull(ativoGet); Assert.IsTrue(ativoGet == ativo); Assert.IsTrue(ativo.loteMin == 100); Assert.IsTrue(ativo.name == ativoName); Periodo periodo1 = new Periodo("2015-06-05 00:00"); Periodo periodo2 = new Periodo("2015-06-06 00:00"); float open = 2; float close = 3; float high = 3.5f; float low = 1.5f; float vol = 100; Candle candle = new Candle(periodo1, ativo); ativo.AddCandle(candle); candle.SetValor(FormulaManager.CLOSE, close); candle.SetValor(FormulaManager.OPEN, open); candle.SetValor(FormulaManager.HIGH, high); candle.SetValor(FormulaManager.LOW, low); candle.SetValor(FormulaManager.VOL, vol); Candle candleDefinido = new Candle(periodo2, ativo, open, close, high, low, vol); ativo.AddCandle(candleDefinido); Assert.IsTrue(candleDefinido.GetValor(FormulaManager.CLOSE) == candle.GetValor(FormulaManager.CLOSE) && candle.GetValor(FormulaManager.CLOSE) == close); Assert.IsTrue(candleDefinido.GetValor(FormulaManager.OPEN) == candle.GetValor(FormulaManager.OPEN) && candle.GetValor(FormulaManager.OPEN) == open); Assert.IsTrue(candleDefinido.GetValor(FormulaManager.HIGH) == candle.GetValor(FormulaManager.HIGH) && candle.GetValor(FormulaManager.HIGH) == high); Assert.IsTrue(candleDefinido.GetValor(FormulaManager.LOW) == candle.GetValor(FormulaManager.LOW) && candle.GetValor(FormulaManager.LOW) == low); Assert.IsTrue(candleDefinido.GetValor(FormulaManager.VOL) == candle.GetValor(FormulaManager.VOL) && candle.GetValor(FormulaManager.VOL) == vol); Assert.IsTrue(ativo.GetCandle(periodo2) == candleDefinido); Assert.IsTrue(ativo.GetCandle(periodo1) == candle); }
internal Ativo GenerateAtivoMock(int seed) { Ativo ativo = GetOrCreateAtivo("Mock" + seed, 100); Random rnd = new Random(seed); float vlr = 10 + rnd.Next(120); float vol = 100000 + rnd.Next(100000); float percGap = rnd.Next(5); float animosity = 0; for (int i = 0; i < Consts.QTD_ATIVOS_MOCK; i++) { Periodo periodo = GetPeriodo(DateTime.Now.AddDays(i).ToShortDateString()); Candle candle = new Candle(periodo, ativo); candle.SetValor(FormulaManager.OPEN, vlr); candle.SetValor(FormulaManager.HIGH, vlr); candle.SetValor(FormulaManager.LOW, vlr); for (int j = 0; j < 10; j++) { vlr = GenerateMockData(rnd, candle, vlr, animosity); } float gapNext = Utils.Random(rnd, -2f, 2f); vlr *= (1 + gapNext / 100); gapNext = Utils.Random(rnd, -1f, 1f); animosity += gapNext; if (animosity > 5) { animosity = 5; } if (animosity < -5) { animosity = -5; } ativo.AddCandle(candle); } return(ativo); }
private void ProcessaCandle(Ativo ativo, ref Candle candleAnterior, ref Periodo periodoAnterior, Candle candle) { candle.candleAnterior = candleAnterior; //LimitaCandle(candle, 50); candle.periodo.AddCandle(candle); if (candle.periodo.periodoAnterior == null && periodoAnterior != null) { candle.periodo.periodoAnterior = periodoAnterior; periodoAnterior.proximoPeriodo = candle.periodo; } periodoAnterior = candle.periodo; ativo.AddCandle(candle); if (candleAnterior == null) { ativo.firstCandle = candle; } if (candleAnterior != null) { candleAnterior.proximoCandle = candle; } candleAnterior = candle; }
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);*/ }