Esempio n. 1
0
        private DTOMBOrder setCancelTrade(MBEnumerables.CoinType pTipoMoeda, double pNumberOrder)
        {
            string     _parameters = string.Empty;
            string     _json;
            DTOMBOrder _order = new DTOMBOrder();

            _parameters += "&";

            switch (pTipoMoeda)
            {
            case MBEnumerables.CoinType.Bit:
                _parameters += "coin_pair=BRLBTC&";
                break;

            case MBEnumerables.CoinType.Lit:
                _parameters += "coin_pair=BRLLTC&";
                break;
            }

            _parameters += string.Format("order_id={0}", Convert.ToString(pNumberOrder));

            _json = _mbAcess.getRequestPrivate(MBEnumerables.MethodAPI.CancelOrder, _parameters);

            if (validateJsonReturn(_json))
            {
                _order = new DTOMBOrder(_json);
            }
            else
            {
                _order = null;
            }

            return(_order);
        }
Esempio n. 2
0
        private DTOMBOrder setTrade(MBEnumerables.CoinType pCoinType, MBEnumerables.OperationType pOperationType, double pVolume, double pPrice)
        {
            string     _parameters = string.Empty;
            string     _json;
            DTOMBOrder _myorders;

            _parameters += "&";

            switch (pCoinType)
            {
            case MBEnumerables.CoinType.Bit:
                _parameters += "coin_pair=BRLBTC&";
                break;

            case MBEnumerables.CoinType.Lit:
                _parameters += "coin_pair=BRLLTC&";
                break;
            }

            _parameters += string.Format("quantity={0}", Convert.ToString(pVolume).Replace(",", ".")) + "&";
            _parameters += string.Format("limit_price={0}", Convert.ToString(pPrice).Replace(",", "."));

            if (pOperationType == MBEnumerables.OperationType.Buy)
            {
                _json = _mbAcess.getRequestPrivate(MBEnumerables.MethodAPI.Buy, _parameters);
            }
            else if (pOperationType == MBEnumerables.OperationType.Sell)
            {
                _json = _mbAcess.getRequestPrivate(MBEnumerables.MethodAPI.Sell, _parameters);
            }
            else if (pOperationType == MBEnumerables.OperationType.Market_Buy)
            {
                _json = _mbAcess.getRequestPrivate(MBEnumerables.MethodAPI.Market_Buy, _parameters);
            }
            else if (pOperationType == MBEnumerables.OperationType.Market_Sell)
            {
                _json = _mbAcess.getRequestPrivate(MBEnumerables.MethodAPI.Market_Sell, _parameters);
            }
            else
            {
                _json = string.Empty;
            }

            if (validateJsonReturn(_json))
            {
                _myorders = new DTOMBOrder(_json);
            }
            else
            {
                _myorders = null;
            }

            return(_myorders);
        }
Esempio n. 3
0
        public JsonResult BuyBitCoin(string volume, string price)
        {
            loadTradeAPI();
            double     _volume;
            double     _price;
            double     _valCalc;
            object     _result;
            DTOMBOrder _order   = null;
            bool       _success = false;
            string     _message = string.Empty;

            if (_tapi != null)
            {
                if (double.TryParse(volume, out _volume) && double.TryParse(price, out _price))
                {
                    DTOMBMyFunds _funds;
                    _funds = _tapi.getMyInfoAccount();

                    _valCalc = _volume * _price;

                    if (Math.Round(_funds.balanceBRLAvaliable, 5) <= Math.Round(_valCalc, 5))
                    {
                        _order = _tapi.setBitCoinTradeBuy(_volume, _price);
                        if (_order == null)
                        {
                            _success = true;
                        }
                        else
                        {
                            _message = _tapi.Error;
                        }
                    }
                    else
                    {
                        _message = "Não possui saldo";
                    }
                }
            }
            else
            {
                _message = "Não foi possivel conectar ao servidor do Mercado Bitcoin.";
            }

            _result = new
            {
                returnExecute = _success,
                returnData    = _order,
                message       = _message
            };


            return(Json(_result));
        }
Esempio n. 4
0
        /// <summary>
        /// Função que retorna todas as suas ordens em aberto, fazendo filtro pelos parâmentros
        /// passados pela função
        /// </summary>
        /// <param name="pCoinType"></param>
        /// <param name="pNumberDays"></param>
        /// <returns></returns>
        public List <DTOMBOrder> getMyOrders(MBEnumerables.CoinType pCoinType, int pNumberDays = 1)
        {
            string            _parameters = string.Empty;
            string            _json;
            List <DTOMBOrder> _listOrders = new List <DTOMBOrder>();

            _parameters += "&";

            //_parameters += "status_list=[2]&";

            switch (pCoinType)
            {
            case MBEnumerables.CoinType.Bit:
                _parameters += "coin_pair=BRLBTC";
                break;

            case MBEnumerables.CoinType.Lit:
                _parameters += "coin_pair=BRLLTC";
                break;
            }

            TimeSpan _t = (DateTime.UtcNow.AddDays(pNumberDays * -1) - new DateTime(1970, 1, 1));
            string   _time;

            _time = Convert.ToString((int)_t.TotalSeconds);

            _json = _mbAcess.getRequestPrivate(MBEnumerables.MethodAPI.OrderList, _parameters);

            if (validateJsonReturn(_json))
            {
                DTOMBOrder _orderBase = new DTOMBOrder();

                foreach (DTOMBOrder _order in _orderBase.convertJsonToObject(_json))
                {
                    _listOrders.Add(_order);
                }
            }
            else
            {
                _listOrders = null;
            }

            return(_listOrders);
        }
Esempio n. 5
0
        public JsonResult cancelOrder(string orderId)
        {
            loadTradeAPI();
            long       _orderId;
            DTOMBOrder _order   = null;
            string     _message = "";
            bool       _success = false;

            if (_tapi != null)
            {
                if (long.TryParse(orderId, out _orderId))
                {
                    _order = _tapi.cancelOrderBit(_orderId);

                    _message = _order == null ? _tapi.Error : "";
                    _success = _order == null ? false : true;
                }
                else
                {
                    _message = "Numero de ordem invalido.";
                }
            }
            else
            {
                _message = "Não foi possivel conectar ao servidor do Mercado Bitcoin.";
            }

            var _result = new
            {
                returnExecute = _success,
                returnData    = _order,
                message       = _message
            };


            return(Json(_result));
        }
Esempio n. 6
0
        static void Main(string[] args)
        {
            //theFirst();
            while (true)
            {
                //teste();

                //LogisticRegression.teste();
                try
                {
                    MBAccess mbAccess = new MBAccess();
                    MBPublic mbPublic = new MBPublic();



                    Pubtrades = new List <DTOMBPublicTrades>();

                    decimal unixS      = new DateTimeOffset(DateTime.UtcNow, TimeSpan.Zero).ToUnixTimeSeconds();
                    decimal unixSMenor = new DateTimeOffset(DateTime.UtcNow.AddSeconds(-400), TimeSpan.Zero).ToUnixTimeSeconds();

                    Pubtrades = mbPublic.getPublicTrades30s(MBEnumerables.CoinType.Bit, unixSMenor, unixS); //Ultimas transações realizadas no mercado bitcoin

                    var ultValores = Pubtrades.Except(Pubtrades.Take(4)).ToList();

                    var    myOrders    = mbTapi.getMyOrders(MBEnumerables.CoinType.Bit);
                    var    myLastOrder = myOrders.Where(p => p.status == 4).First(); //Ultima transação realizada na minha conta
                    double valorOp     = 0;

                    if (myLastOrder.type == MBEnumerables.OperationType.Buy)
                    {                                                                                                                                                                                                   //TODO:VENDER!
                        var valMed2L = (Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).Take(3).Sum(x => x.price) - Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).First().price) / 2; //media do secundo e terceiro
                        var valMed   = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).Average(x => x.price);
                        var valMed4  = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).Take(4).Average(x => x.price);

                        //var val1 = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).First().price;
                        //var val2 = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).Take(2).Last().price;
                        //var val3 = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).Take(3).Last().price;
                        var maiorVal = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).Take(3).Select(x => x.price).Max();

                        //if ((maiorVal > valMed2L || maiorVal > valMed) || valMed4 > valMed) continue;

                        //else
                        //{
                        var valVenda = Math.Round((maiorVal > valMed2L ? maiorVal : 0), 2);

                        try
                        {
                            if ((Pubtrades.Take(4).Where(x => x.type == MBEnumerables.OperationType.Sell).Count() >= 2))
                            {
                                if (myLastOrder.price > 0 && valVenda >= (myLastOrder.price + (myLastOrder.price * 0.006)))
                                {
                                    if (ultValores.Where(x => x.type == MBEnumerables.OperationType.Buy).Count() >= (ultValores.Where(x => x.type == MBEnumerables.OperationType.Sell).Count() * 0.8))
                                    {
                                        if (ultValores.Take((int)Math.Round(ultValores.Count() * 0.3)).Where(x => x.type == MBEnumerables.OperationType.Buy).Count() >= (ultValores.Take((int)Math.Round(ultValores.Count() * 0.3)).Where(x => x.type == MBEnumerables.OperationType.Sell).Count() * 0.8))
                                        {
                                            valorOp = valVenda;
                                        }
                                    }
                                }
                                else if (valVenda < myLastOrder.price - 600)
                                {
                                    valorOp = valVenda;
                                }
                            }
                            //}
                        }
                        catch { Console.WriteLine("deu erro1"); }
                    }
                    else if (myLastOrder.type == MBEnumerables.OperationType.Sell)
                    {                                                                                                                                                                                                   //TODO:COMPRAR!(preco + (preco * 0.006))
                        var valMed2L = (Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).Take(3).Sum(x => x.price) - Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).First().price) / 2; //media do secundo e terceiro
                        var valMed   = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).Average(x => x.price);
                        var valMed4  = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).Take(4).Average(x => x.price);

                        //var val1 = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).First().price;
                        //var val2 = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).Take(2).Last().price;
                        //var val3 = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).Take(3).Last().price;
                        var menorVal = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).Take(3).Select(x => x.price).Min();

                        //if ((menorVal < valMed2L && menorVal < valMed) || valMed4 < valMed) continue;

                        //else
                        //{

                        var valCompra = Math.Round((menorVal < valMed2L ? menorVal : 0), 2);


                        if ((Pubtrades.Take(4).Where(x => x.type == MBEnumerables.OperationType.Buy).Count() >= 2))
                        {
                            if (valCompra <= (myLastOrder.price - (myLastOrder.price * 0.003)))//ultValores.Take(ultValores.Count() / 2).Average(h => h.price) > myLastOrder.price + 200 || myLastOrder.price > 0 && valCompra <= (myLastOrder.price - (myLastOrder.price * 0.003)))
                            {
                                if (ultValores.Where(x => x.type == MBEnumerables.OperationType.Sell).Count() >= (ultValores.Where(x => x.type == MBEnumerables.OperationType.Buy).Count() * 0.8))
                                {
                                    if (ultValores.Take((int)Math.Round(ultValores.Count() * 0.3)).Where(x => x.type == MBEnumerables.OperationType.Sell).Count() >= (ultValores.Take((int)Math.Round(ultValores.Count() * 0.3)).Where(x => x.type == MBEnumerables.OperationType.Buy).Count() * 0.8))
                                    {
                                        valorOp = valCompra;
                                    }
                                }
                            }
                            else if (valCompra > myLastOrder.price - 600)
                            {
                                valorOp = valCompra;
                            }
                        }
                        //}
                    }


                    if (valorOp != 0)
                    {
                        try
                        {
                            myFounds = mbAccess.getMyInfoAccount();

                            if (myLastOrder.type == MBEnumerables.OperationType.Buy)
                            {//TODO:VENDER!
                                DTOMBOrder ordemVenda = mbTapi.setBitCoinTradeSell(myFounds.balanceBTCAvaliable, valorOp);
                            }
                            else if (myLastOrder.type == MBEnumerables.OperationType.Sell)
                            {                                                                                              //TODO:COMPRAR!
                                var        qtdeBTC     = (myFounds.balanceBRLAvaliable * Pubtrades.First().amount) / Pubtrades.First().price;
                                DTOMBOrder ordemCompra = mbTapi.setBitCoinTradeBuy(myLastOrder.quantity - 0.002, valorOp); //TODO: o valor da quantidade de btc que será comprado deve avaliar a diferença entre valores de antigas compras realizadas com as atuais
                            }
                        }
                        catch { Console.WriteLine("deu erro2"); }
                    }
                }
                catch { }
            }
        }
Esempio n. 7
0
        public async Task theFirst()
        {
            bool buy  = false;
            bool sell = false;

            while (true)
            {
                double porcent;

                /*int bCount1;
                *  int sCount1;*/

                int bCount = 0;
                int sCount = 0;
                int compra = 0;
                int venda  = 0;

                MBPublic mbPublic = new MBPublic();
                MBAccess mbAccess = new MBAccess();

                DTOMBMyFunds myFounds = mbAccess.getMyInfoAccount();

                porcent = myFounds.balanceBTCAvaliable * 0.05;


                List <DTOMBPublicTrades> Pubtrades = null;

                for (int count = 0; count < 15; count++)
                {
                    Pubtrades = new List <DTOMBPublicTrades>();

                    decimal unixS      = new DateTimeOffset(DateTime.UtcNow, TimeSpan.Zero).ToUnixTimeSeconds();
                    decimal unixSMenor = new DateTimeOffset(DateTime.UtcNow.AddSeconds(-200), TimeSpan.Zero).ToUnixTimeSeconds();

                    Pubtrades = mbPublic.getPublicTrades30s(MBEnumerables.CoinType.Bit, unixSMenor, unixS);



                    /*bTotal = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).Sum(x => x.amount);
                     * sTotal = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Sell).Sum(x => x.amount);
                     * total = Pubtrades.Sum(x => x.amount);*/

                    bCount = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).Count();
                    sCount = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Sell).Count();

                    if (bCount > sCount)
                    {
                        compra++;
                    }
                    else
                    {
                        venda++;
                    }


                    //O IF que quebrar o FOR precisa estar fora do for pra receber a decisão
                    if (compra >= 6 && venda <= compra / 6)
                    {
                        sell = true; buy = false;
                    }                             //mercado subindo, quase na hora de vender
                    if (venda >= 6 && compra <= venda / 6)
                    {
                        buy = true; sell = false;
                    }                                                //mercado descendo, quase na hora de comprar

                    if (compra >= 6 && sCount >= bCount - 2 && sell) //TODO: esse if defini o ponto quase exato da venda
                    {
                        count  = 0;
                        compra = 0;
                        venda  = 0;
                        break;
                    }
                    if (venda >= 6 && bCount >= sCount - 2 && buy)
                    {
                        count  = 0;
                        compra = 0;
                        venda  = 0;
                        break;
                    }

                    System.Threading.Thread.Sleep(600);
                }

                if (myFounds == null)
                {
                    myFounds = mbAccess.getMyInfoAccount();
                }
                List <DTOMBOrder> myOrders = mbTapi.getMyOrders(MBEnumerables.CoinType.Bit);

                if (buy && myFounds.balanceBRLAvaliable >= 70)
                {
                    decimal unixS      = new DateTimeOffset(DateTime.UtcNow, TimeSpan.Zero).ToUnixTimeSeconds();
                    decimal unixSMenor = new DateTimeOffset(DateTime.UtcNow.AddSeconds(-300), TimeSpan.Zero).ToUnixTimeSeconds();
                    Pubtrades = mbPublic.getPublicTrades30s(MBEnumerables.CoinType.Bit, unixSMenor, unixS).ToList();

                    var listaSell      = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Sell).ToList();//para definir o valor da compra, é necessario observar o por quanto esta sendo vendido
                    var primeiros      = listaSell.Take(Convert.ToInt32(Math.Round((Pubtrades.Count() / 10f)))).ToList();
                    var ultimosValores = listaSell.Except(primeiros).ToList();

                    var menorValor = Math.Round(((primeiros.Sum(c => c.price) / primeiros.Count()) <= (ultimosValores.Sum(c => c.price) / ultimosValores.Count()) ? (primeiros.Sum(c => c.price) / primeiros.Count()) : (ultimosValores.Sum(c => c.price) / ultimosValores.Count())), 2);

                    var preco = myOrders.Where(p => p.type == MBEnumerables.OperationType.Sell && p.status == 4).First().price;

                    if (preco > 0 && (menorValor <= (preco + (preco * 0.006))))                                                                                                            //É necessário usar o valor da ultima venda para realizar COMPRA
                    {
                        DTOMBOrder ordemCompra = mbTapi.setBitCoinTradeBuy(myOrders.Where(p => p.type == MBEnumerables.OperationType.Sell && p.status == 4).First().quantity, menorValor); //TODO: o valor da quantidade de btc que será comprado deve avaliar a diferença entre valores de antigas compras realizadas com as atuais
                    }
                }

                if (sell && myFounds.balanceBTCAvaliable >= 0.001)
                {
                    decimal unixS      = new DateTimeOffset(DateTime.UtcNow, TimeSpan.Zero).ToUnixTimeSeconds();
                    decimal unixSMenor = new DateTimeOffset(DateTime.UtcNow.AddSeconds(-200), TimeSpan.Zero).ToUnixTimeSeconds();
                    Pubtrades = mbPublic.getPublicTrades30s(MBEnumerables.CoinType.Bit, unixSMenor, unixS);
                    //bCount = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).Count();
                    //sCount = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Sell).Count();
                    //var mediaOps = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Sell).Take(5).Sum(x => x.price) / 5;


                    var listaBuy       = Pubtrades.Where(x => x.type == MBEnumerables.OperationType.Buy).ToList();
                    var primeiros      = listaBuy.Take(Convert.ToInt32(Math.Round((Pubtrades.Count() / 10f)))).ToList();
                    var ultimosValores = listaBuy.Except(primeiros).ToList();

                    var menorValor = Math.Round(((primeiros.Sum(c => c.price) / primeiros.Count()) >= (ultimosValores.Sum(c => c.price) / ultimosValores.Count()) ? (primeiros.Sum(c => c.price) / primeiros.Count()) : (ultimosValores.Sum(c => c.price) / ultimosValores.Count())), 2);

                    var preco = myOrders.Where(p => p.type == MBEnumerables.OperationType.Buy && p.status == 4).First().price;

                    if (preco > 0 && menorValor >= (preco + (preco * 0.006))) //É necessário usar o valor da ultima compra para realizar venda
                    {
                        DTOMBOrder ordemVenda = mbTapi.setBitCoinTradeSell(myFounds.balanceBTCAvaliable, menorValor);
                    }
                }
            }
        }