示例#1
0
        public void criaOrdens()
        {
            if (api.saldo.saldoBRL > 0 || api.saldo.saldoBTC > 0)
            {
                TickerBitstamp bitstamp      = api.obterTickerBitstamp();
                decimal        dolar         = api.obterCotacaoDolar();
                decimal        precoBitstamp = Convert.ToDecimal(bitstamp.last);
                OrderList      orderList     = null;


                decimal precoCompra = ((precoBitstamp * api.parametros.spreadCompra / 100) + precoBitstamp) * dolar;
                if (api.saldo.saldoBRL > api.parametros.quantidadeOrdem * precoCompra)
                {
                    orderList = api.criarOrdemCompra(api.parametros.quantidadeOrdem, precoCompra);
                    foreach (Ordem ordem in orderList.oReturn)
                    {
                        api.imprimirOrdem("Nova ordem", ordem);
                        ListaOrdem.Add(ordem);
                    }
                }

                if (api.saldo.saldoBTC > api.parametros.quantidadeOrdem)
                {
                    decimal precoVenda = ((precoBitstamp * api.parametros.spreadVenda / 100) + precoBitstamp) * dolar;
                    orderList = api.criarOrdemVenda(api.parametros.quantidadeOrdem, precoVenda);
                    foreach (Ordem ordem in orderList.oReturn)
                    {
                        api.imprimirOrdem("Nova ordem", ordem);
                        ListaOrdem.Add(ordem);
                    }
                }
            }
        }
示例#2
0
        public void monitorarArbitragem()
        {
            //Se preço variar em 0.1% cancela ordens e cria outra
            TickerBitstamp bitstamp      = api.obterTickerBitstamp();
            decimal        dolar         = api.obterCotacaoDolar();
            decimal        precoBitstamp = Convert.ToDecimal(bitstamp.last);
            bool           temOC         = false;
            bool           temOV         = false;

            popularListaOrdens();
            Console.WriteLine("Inicio monitorando ordens Arbitragem: " + ListaOrdem.oReturn.Count);
            for (int i = ListaOrdem.oReturn.Count - 1; i >= 0; --i)
            {
                Ordem ordem = ListaOrdem.oReturn[i];
                api.imprimirOrdem("", ordem);
                if (ordem.action == Constantes.TIPO_ORDEM_COMPRA)
                {
                    temOC = true;
                    decimal precoCompraBRL             = obterPrecoCompraBRL();
                    decimal precoOrdemAtual            = Convert.ToDecimal(ordem.price);
                    decimal limitePrecoCompraPermitido = (precoCompraBRL * 0.1M / 100) + precoCompraBRL;

                    if (precoOrdemAtual > limitePrecoCompraPermitido)
                    {
                        deletarOrdem(ordem, i);

                        criarOrdemResidualNovoPreco(ordem, obterPrecoCompraBRL());
                    }
                }
                else if (ordem.action == Constantes.TIPO_ORDEM_VENDA)
                {
                    temOV = true;
                    decimal precoVendaBRL             = obterPrecoVendaBRL();
                    decimal precoOrdemAtual           = Convert.ToDecimal(ordem.price);
                    decimal limitePrecoVendaPermitido = precoVendaBRL - (precoVendaBRL * 0.1M / 100);
                    if (precoOrdemAtual < limitePrecoVendaPermitido)
                    {
                        deletarOrdem(ordem, i);

                        criarOrdemResidualNovoPreco(ordem, obterPrecoVendaBRL());
                    }
                }
            }

            if (!temOC)
            {
                temOC = false;
                criarOrdemCompraArbitragem();
            }
            if (!temOV)
            {
                temOV = false;
                criarOrdemVendaArbitragem();
            }

            Console.WriteLine("Fim do ciclo arbitragem, qtd ordens :" + ListaOrdem.oReturn.Count);
            System.Threading.Thread.Sleep(3000);
            monitorarArbitragem();
        }
示例#3
0
 private void tratarOrdemDolar(ref bool criarOCDolar, ref bool criarOVDolar, Ordem ordemAtualizada, int i)
 {
     if (ordemAtualizada.action == Constantes.TIPO_ORDEM_COMPRA)
     {
         criarOCDolar = false;
     }
     else if (ordemAtualizada.action == Constantes.TIPO_ORDEM_VENDA)
     {
         criarOVDolar = false;
     }
     api.imprimirOrdem("Ordem dolar encontrada", ordemAtualizada);
     if (ordemAtualizada.status.ToUpper().Trim() == Constantes.STATUS_ORDEM_CANCELADA)
     {
         removerOrdem(ordemAtualizada, i);
         criarOrdemDolarDoMesmoTipo(ordemAtualizada);
     }
     else if (ordemAtualizada.status.ToUpper().Trim() == Constantes.STATUS_ORDEM_EXECUTADA)
     {
         removerOrdem(ordemAtualizada, i);
         criarOrdemDolarDoMesmoTipo(ordemAtualizada);
         criarOrdemInversa(ordemAtualizada);
         api.atualizarSaldoOrdemExecutada(ordemAtualizada);
     }
     else if (ordemAtualizada.status.ToUpper().Trim() == Constantes.STATUS_ORDEM_PENDENTE &&
              Convert.ToDecimal(ordemAtualizada.executedAmount) > 0)
     {
         cancelarOrdem(ordemAtualizada, i);
         criarOrdemDolarDoMesmoTipo(ordemAtualizada); //Criar nova ordem dolar cheia do mesmo tipo
         criarOrdemInversaResidual(ordemAtualizada);  //criar ordem inversa de trade
         api.atualizarSaldoOrdemExecutada(ordemAtualizada);
     }
     else
     {
         ajustarPrecoDolar(ordemAtualizada, i);
     }
 }