Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
 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;
 }
Example #4
0
        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);*/
        }