Exemplo n.º 1
0
        public void UpdateMyOpenOrders_UIResultHandler(RequestItemGroup resultResponse)
        {
            if (Helper.IsResultHasErrors(resultResponse))
            {
                return;
            }
            List <OpenOrder> myOpenOrders = (List <OpenOrder>)resultResponse.items[0].result.resultData;

            var dataView = myOpenOrders.Select(item => new
            {
                date      = item.openedDate,
                orderType = item.orderType,
                price     = Helper.PriceToStringBtc(item.price),
                amount    = Helper.PriceToStringBtc(item.quantity),
                remain    = Helper.PriceToStringBtc(item.quantityRemaining)
            }).ToList();
            List <DGVColumn> columns = new List <DGVColumn>()
            {
                new DGVColumn("date", "Date", "string"),
                new DGVColumn("orderType", "Type", "string"),
                new DGVColumn("price", "Price", "string"),
                new DGVColumn("amount", "Amount", "string"),
                new DGVColumn("remain", "Remain", "string")
            };
            DataGridViewWrapper gv = new DataGridViewWrapper(dgridOpenOrders, true);

            gv.Create(dataView, columns);
            gv.AutoSizeDisplayedExcept("price");
            gv.RowColorByCondition("orderType", "SELL LIMIT", Color.LightPink);
        }
Exemplo n.º 2
0
        public void UpdateOrderBook_UIResultHandler(RequestItemGroup resultResponse)
        {
            if (Helper.IsResultHasErrors(resultResponse))
            {
                return;
            }
            AllOrders orders = (AllOrders)resultResponse.items[0].result.resultData;

            var dataViewSell = orders.sellOrders.Select(item => new
            {
                amount = Helper.PriceToStringBtc(item.quantity),
                price  = Helper.PriceToStringBtc(item.rate)
            }).Take(150).ToList();
            List <DGVColumn> columnsSell = new List <DGVColumn>()
            {
                new DGVColumn("amount", "Amount", "string"),
                new DGVColumn("price", "Price", "string")
            };
            DataGridViewWrapper gvSell = new DataGridViewWrapper(dgridSellOrders, true);

            gvSell.Create(dataViewSell, columnsSell);
            gvSell.AutoSizeFillExcept("amount");

            var dataViewBuy = orders.buyOrders.Select(item => new
            {
                price  = Helper.PriceToStringBtc(item.rate),
                amount = Helper.PriceToStringBtc(item.quantity)
            }).Take(150).ToList();
            DataGridViewWrapper gvBuy = new DataGridViewWrapper(dgridBuyOrders, true);

            gvBuy.Create(dataViewBuy, columnsSell);
            gvBuy.AutoSizeFillExcept("amount");
        }
Exemplo n.º 3
0
        public void UpdateTradeHistory_UIResultHandler(RequestItemGroup resultResponse)
        {
            if (Helper.IsResultHasErrors(resultResponse))
            {
                return;
            }
            List <Trade> tradeHistory = (List <Trade>)resultResponse.items[0].result.resultData;

            var dataView = tradeHistory.Select(item => new
            {
                date      = item.tradeDate,
                orderType = item.orderType,
                price     = Helper.PriceToStringBtc(item.price),
                amount    = Helper.TradeAmountToString(item.quantity),
                fillType  = item.fillType
            }).Take(40).ToList();
            List <DGVColumn> columns = new List <DGVColumn>()
            {
                new DGVColumn("date", "Date", "string"),
                new DGVColumn("orderType", "Type", "string"),
                new DGVColumn("price", "Price", "string"),
                new DGVColumn("amount", "Amount", "string"),
                new DGVColumn("fillType", "Fill", "string")
            };
            DataGridViewWrapper gv = new DataGridViewWrapper(dgridTradeHistory, true);

            gv.Create(dataView, columns);
            gv.AutoSizeFillExcept("date");
            gv.RowColorByCondition("orderType", "SELL", Color.LightPink);
        }
Exemplo n.º 4
0
        public virtual void SendRequestToQueue(string requestString, Action <RequestItem> ProcessResultAction, Action <RequestItemGroup> ProcessResultUIAction, RequestParams reqparam = null)
        {
            RequestItemGroup itemgroup = new RequestItemGroup(ProcessResultUIAction);

            itemgroup.AddItem(requestString, ProcessResultAction, reqparam);
            RequestConsumer.requestManager.AddItemGroup(GetMarketName(), itemgroup);
        }
Exemplo n.º 5
0
        public void SetAsk_UIResultHandler(RequestItemGroup resultResponse)
        {
            if (Helper.IsResultHasErrors(resultResponse))
            {
                return;
            }
            //            TradeLast tradelast = (TradeLast)resultResponse.result.resultData;
            //            if (tradelast.ask != 0) textPrice.Text = Helper.PriceToStringBtc(tradelast.ask);
            AllOrders orders = (AllOrders)resultResponse.items[0].result.resultData;

            double quantityToBuy = 0;

            if (Helper.IsDouble(textAmount.Text))
            {
                quantityToBuy = Helper.ToDouble(textAmount.Text);
            }
            else
            {
                MessageBox.Show("Amount is Invalid");
                return;
            }

            List <SellOrder> sellOrders = orders.sellOrders.Where(o => o.quantity >= quantityToBuy).OrderBy(o => o.rate).ToList();

            if (sellOrders.Count > 0)
            {
//                double price = tradeLogic.LastAskFromOrderBook(quantity);
                textPrice.Text = Helper.PriceToStringBtc(sellOrders[0].rate);
            }
        }
Exemplo n.º 6
0
        public static bool IsResultHasErrors(RequestItemGroup requestGroup, bool log = true, bool display = true)
        {
            foreach (RequestItem item in requestGroup.items)
            {
                if (item.result.error != "")
                {
                    string msg = "RequestError->" + item.result.error;
                    if (log)
                    {
                        Logman.logger.Error(msg);
                    }
                    if (display)
                    {
                        if (item.result.errorLevel != ResultErrorLevel.IGNORE)
                        {
                            StatusBar.ShowMsg(msg);
                        }
                        //   Helper.Display(msg);
                    }
                    return(true);
                }
            }

            return(false);
        }
Exemplo n.º 7
0
        public void SetBid_UIResultHandler(RequestItemGroup resultResponse)
        {
            if (Helper.IsResultHasErrors(resultResponse))
            {
                return;
            }
            AllOrders orders = (AllOrders)resultResponse.items[0].result.resultData;

            double quantityToSell = 0;

            if (Helper.IsDouble(textAmount.Text))
            {
                quantityToSell = Helper.ToDouble(textAmount.Text);
            }
            else
            {
                MessageBox.Show("Amount is Invalid");  return;
            }

            List <BuyOrder> buyOrders = orders.buyOrders.Where(o => o.quantity >= quantityToSell).OrderByDescending(o => o.rate).ToList();

            if (buyOrders.Count > 0)
            {
                textPrice.Text = Helper.PriceToStringBtc(buyOrders[0].rate);
            }
        }
Exemplo n.º 8
0
        private void UpdateBalances(List <string> marketFilter)
        {
            if (requestBalancesStart)
            {
                return;
            }
            if (marketFilter.Count == 0)
            {
                return;
            }
            requestBalancesStart    = true;
            marketBalance           = new Dictionary <string, List <Balance> >();
            dgridBalance.DataSource = null;

            foreach (var itemMarket in marketFilter)
            {
                RequestItemGroup     itemgroup     = new RequestItemGroup(UpdateBalances_UIResultHandler);
                Market               market        = ExchangeManager.GetMarketByMarketName(itemMarket);
                TradeRequestHandlers tradeHandlers = new TradeRequestHandlers(market);
                itemgroup.AddItem(market.GetBalancesBegin(), tradeHandlers.GetBalances_RequestHandler);
                RequestConsumer.requestManager.AddItemGroup(market.MarketName(), itemgroup);
            }

            /*
             * foreach (var itemMarket in marketFilter)
             * {
             *  RequestItemGroup igroup = new RequestItemGroup(UpdateBala_UIRndler);
             *  Market imarket = ExchangeManager.GetMarketByMarketName("Bittrex");
             *  TradeRequestHandlers itradeHandlers = new TradeRequestHandlers(imarket);
             *  igroup.AddItem(imarket.GetBalan(), itradeHandlers.GetBala);
             *  RequestConsumer.requestManager.AddItemGroup(imarket.MarketName(), igroup);
             * }
             */
        }
Exemplo n.º 9
0
        public void UpdateBalances_UIResultHandler(RequestItemGroup resultResponse)
        {
            if (RequestManager.IsResultHasErrors(resultResponse))
            {
                return;
            }

            Dictionary <string, Balance> balancesDict = (Dictionary <string, Balance>)resultResponse.items[0].result.resultData;
            List <Balance> balances = balancesDict.Values.ToList();

            balances = balances.Where(i => i.balance != 0).ToList();
            marketBalance.Add(resultResponse.market, balances);

            if (marketBalance.Count == marketFilter.Count)
            {
                //            labelBalanceBaseValue.Text = Helper.PriceToStringBtc(tradeLogic.balanceBase.balance);
                //            TradeLast lastbtcInUsdtPrice = (TradeLast)resultResponse.items[2].result.resultData;
                //            double btcInUsd = (lastbtcInUsdtPrice.bid + lastbtcInUsdtPrice.ask) / 2;
                //                averageUsdPrice = averageBtcPrice * btcInUsd;
                //            labelAverage.Text = "Average: " + Helper.PriceToStringBtc(averageBtcPrice) + " = " + Helper.PriceToString(averageUsdPrice) + "$";
                List <ExchangeBalance> totalBalances = ConvertBalancesToList();
                CalcTotalBalance(totalBalances);
                CreateBalancesGridView(totalBalances);
                requestBalancesStart = false;
            }
        }
Exemplo n.º 10
0
        public void UpdateMyOrdersHistory_UIResultHandler(RequestItemGroup resultResponse)
        {
            if (Helper.IsResultHasErrors(resultResponse))
            {
                return;
            }
            List <OrderDone> ordersHistory = (List <OrderDone>)resultResponse.items[0].result.resultData;

            var dataView = ordersHistory.Select(item => new
            {
                date      = item.doneDate,
                orderType = item.orderType,
                price     = Helper.PriceToStringBtc(item.price),
                amount    = Helper.TradeAmountToString(item.quantity),
                remain    = item.quantityRemaining
            }).ToList();
            List <DGVColumn> columns = new List <DGVColumn>()
            {
                new DGVColumn("date", "Date", "string"),
                new DGVColumn("orderType", "Type", "string"),
                new DGVColumn("price", "Price", "string"),
                new DGVColumn("amount", "Amount", "string"),
                new DGVColumn("remain", "Remain", "string")
            };
            DataGridViewWrapper gv = new DataGridViewWrapper(dgridMyOrdersHistory, true);

            gv.Create(dataView, columns);
            gv.AutoSizeDisplayedExcept("remain");
        }
Exemplo n.º 11
0
        public virtual void UpdateTradeStateRequest(Action <RequestItemGroup> ProcessResultUIAction)
        {
            string usdTicker = "USD_BTC";

            if (Global.marketsState.curMarketPairs[GetMarketName()].ContainsKey("USDT_BTC"))
            {
                usdTicker = "USDT_BTC";
            }

            RequestParams reqparam = new RequestParams()
            {
                ticker = this.ticker
            };
            RequestItemGroup itemgroup = new RequestItemGroup(ProcessResultUIAction);

            itemgroup.AddItem(market.GetBalancesBegin(), tradeHandlers.GetBalances_RequestHandler);
            itemgroup.AddItem(market.GetTradeLastBegin(ticker), tradeHandlers.GetTradeLast_RequestHandler, reqparam);
            RequestParams reqparamusd = new RequestParams()
            {
                ticker = usdTicker
            };

            itemgroup.AddItem(market.GetTradeLastBegin(usdTicker), tradeHandlers.GetTradeLast_RequestHandler, reqparamusd);
            RequestConsumer.requestManager.AddItemGroup(GetMarketName(), itemgroup);
        }
Exemplo n.º 12
0
        public void UpdateTradeState_UIResultHandler(RequestItemGroup resultResponse)
        {
            if (RequestManager.IsResultHasErrors(resultResponse))
            {
                return;
            }

            Dictionary <string, Balance> balances = (Dictionary <string, Balance>)resultResponse.items[0].result.resultData;

            tradeLogic.UpdateBalance(balances);

            if (labelBalanceBase.Text != "_")
            {
                if (tradeLogic.balanceBase.balance != tradeLogic.prevBalanceBase.balance)
                {
                    labelBalanceBaseBold.Start();
                }
                if (tradeLogic.balanceCounter.balance != tradeLogic.prevBalanceCounter.balance)
                {
                    labelBalanceMarketBold.Start();
                }
            }
            labelBalanceBase.Text        = tradeLogic.baseCurrencyName;
            labelBalanceMarket.Text      = tradeLogic.counterCurrencyName;
            labelBalanceBaseValue.Text   = Helper.PriceToStringBtc(tradeLogic.balanceBase.balance);
            labelBalanceMarketValue.Text = Helper.PriceToStringBtc(tradeLogic.balanceCounter.balance);
            labelAmountBuy.Text          = tradeLogic.counterCurrencyName;
            labelAmountSell.Text         = tradeLogic.counterCurrencyName;

            TradeLast tradelast = (TradeLast)resultResponse.items[1].result.resultData;

            tradeLogic.lastMarketPrice = tradelast;

            TradeLast lastbtcInUsdtPrice = (TradeLast)resultResponse.items[2].result.resultData;
            TradeLast trade = tradeLogic.lastMarketPrice;

            buttonBuy.Text       = "BUY  " + Helper.PriceToStringBtc(trade.ask);
            buttonSell.Text      = "SELL  " + Helper.PriceToStringBtc(trade.bid);
            buttonBuy.BackColor  = Color.FromArgb(buttoncolor.ToArgb());
            buttonSell.BackColor = Color.FromArgb(buttoncolor.ToArgb());
            if (trade.last >= trade.ask)
            {
                buttonBuy.BackColor = Color.Aquamarine;
            }
            if (trade.last <= trade.bid)
            {
                buttonSell.BackColor = Color.LightPink;//Color.LightPink;;
            }
            labelSpread.Text = Helper.CalcSpread(trade.ask, trade.bid).ToString("0.00") + " %";
            double averageBtcPrice = (trade.ask + trade.bid) / 2;
            double btcInUsd        = (lastbtcInUsdtPrice.bid + lastbtcInUsdtPrice.ask) / 2;
            double averageUsdPrice = averageBtcPrice;

            if (tradeLogic.baseCurrencyName != "USDT" && tradeLogic.baseCurrencyName != "USD")
            {
                averageUsdPrice = averageBtcPrice * btcInUsd;
            }
            labelAverage.Text = "Average: " + Helper.PriceToStringBtc(averageBtcPrice) + " = " + Helper.PriceToString(averageUsdPrice) + "$";
        }
Exemplo n.º 13
0
 public void Sell_UIResultHandler(RequestItemGroup resultResponse)
 {
     if (Helper.IsResultHasErrors(resultResponse))
     {
         return;
     }
     UpdateMyOpenOrders();
 }
Exemplo n.º 14
0
 public void CancellOrder_UIResultHandler(RequestItemGroup resultResponse)
 {
     if (Helper.IsResultHasErrors(resultResponse))
     {
         return;
     }
     //            List<OpenOrder> myOpenOrders = (List<OpenOrder>)resultResponse.result.resultData;
     UpdateMyOpenOrders();
 }
Exemplo n.º 15
0
        public void LoadTickers_UIResultHandler(RequestItemGroup resultResponse)
        {
            /*
             * //Global.market.tradePairs = new Dictionary<string, TradePair>();
             * //Global.market.tradePairs.Add("BTC_LTC",new TradePair{currency1 = "BTC",currency2 = "LTC",ticker = "BTC_LTC",isActive =true});
             *
             * int btctickerCount = 0;
             * foreach (KeyValuePair<string, TradePair> pair in tradePairs)
             * {
             *  if (pair.Key.StartsWith("BTC"))
             *      btctickerCount++;
             * }
             *
             * ToolStripDropDown drop_downbtc = new ToolStripDropDown();
             * drop_downbtc.LayoutStyle = ToolStripLayoutStyle.Table;
             * //            drop_downbtc.
             * ((TableLayoutSettings)drop_downbtc.LayoutSettings).ColumnCount = btctickerCount / 23 + 1;
             * toolDropDownTickerBtc.DropDown = drop_downbtc;
             *
             * ToolStripDropDown drop_downusdt = new ToolStripDropDown();
             * drop_downusdt.LayoutStyle = ToolStripLayoutStyle.Table;
             * ((TableLayoutSettings)drop_downusdt.LayoutSettings).ColumnCount = (tradePairs.Count - btctickerCount) / 23 + 1;
             * toolDropDownTickerUsdt.DropDown = drop_downusdt;
             *
             * foreach (KeyValuePair<string, TradePair> pair in tradePairs.OrderBy(p => p.Key))
             * {
             *  if (pair.Key.StartsWith("BTC"))
             *      toolDropDownTickerBtc.DropDown.Items.Add(pair.Key);
             *  else //if (pair.Key.StartsWith("USDT"))
             *      toolDropDownTickerUsdt.DropDown.Items.Add(pair.Key);
             * }
             */
/*
 *          if (RequestManager.IsResultHasErrors(resultResponse))
 *              return;
 *          Dictionary<string, TradePair> pairs = (Dictionary<string, TradePair>)resultResponse.items[0].result.resultData;
 *
 *          tradePairs = new Dictionary<string, TradePair>();
 *
 *          foreach (KeyValuePair<string, TradePair> pair in pairs)
 *          {
 *              tradePairs.Add(pair.Key, pair.Value.Copy());
 *          }
 *
 *          if (ExchangeManager.GetMarketByMarketName(toolStripComboBoxMarket.Text).HaveKey())
 *          {
 *              toolButtonTickerBtc.Enabled = true;
 *              toolButtonTickerUsd.Enabled = true;
 * //                toolDropDownTickerBtc.Enabled = true;
 * //                toolDropDownTickerUsdt.Enabled = true;
 *              toolStripButtonAlerts.Enabled = true;
 *          }
 *          toolStripButtonChart.Enabled = true;
 *          labelInfo.Text = "";
 */
        }
Exemplo n.º 16
0
        private void UpdateMarket(string marketName)
        {
            Market market = ExchangeManager.GetMarketByMarketName(marketName);

            tradeHandlers = new TradeRequestHandlers(market);
            RequestItemGroup itemgroup = new RequestItemGroup(GetMarketCurrent_UIResultHandler);

            itemgroup.AddItem(market.GetMarketCurrentBegin(), tradeHandlers.GetMarketCurrent_RequestHandler);
            RequestConsumer.requestManager.AddItemGroup(market.MarketName(), itemgroup);
        }
Exemplo n.º 17
0
        public void UpdateMyOpenOrders_UIResultHandler(RequestItemGroup resultResponse)
        {
            if (RequestManager.IsResultHasErrors(resultResponse))
            {
                return;
            }
            List <OpenOrder> myOpenOrders = (List <OpenOrder>)resultResponse.items[0].result.resultData;

            var dataView = myOpenOrders.Select(item => new
            {
                openUuid  = item.openUuid,
                date      = item.openedDate,
                orderType = item.orderType,
                price     = Helper.PriceToStringBtc(item.price),
                amount    = Helper.PriceToStringBtc(item.quantity),
                remain    = Helper.PriceToStringBtc(item.quantityRemaining)
            }).ToList();

            GVButtonColumn  buttDeleteRow = new GVButtonColumn("delete", "", "c_button", "Cancel");
            List <GVColumn> columns       = new List <GVColumn>()
            {
                new GVColumn("openUuid", "Order Id", "string"),
                new GVColumn("date", "Date", "string"),
                new GVColumn("orderType", "Type", "string"),
                new GVColumn("price", "Price", "string"),
                new GVColumn("amount", "Amount", "string"),
                new GVColumn("remain", "Remain", "string"),
                buttDeleteRow
            };

            //            GVState gvstate = new GVState();
            if (gvMyOpenOrders == null)
            {
                gvMyOpenOrders = new DataGridViewExWrapper();
            }
            gvMyOpenOrders.Create(dgridOpenOrders, dataView, columns, true);
            gvMyOpenOrders.AutoSizeFillExcept("date");
            gvMyOpenOrders.RowColorByCondition("orderType", "SELL LIMIT", Color.LightPink);

            /*
             * List<DGVColumn> columns = new List<DGVColumn>()
             * {
             *  new DGVColumn( "date", "Date","string") ,
             *  new DGVColumn( "orderType", "Type","string") ,
             *  new DGVColumn( "price", "Price","string") ,
             *  new DGVColumn( "amount", "Amount","string") ,
             *  new DGVColumn( "remain", "Remain","string")
             * };
             * DataGridViewWrapper gv = new DataGridViewWrapper(dgridOpenOrders, true);
             * gv.Create(dataView, columns);
             * gv.AutoSizeDisplayedExcept("price");
             * gv.RowColorByCondition("orderType", "SELL LIMIT", Color.LightPink);
             */
        }
Exemplo n.º 18
0
        public void LoadTickers_UIResultHandler(RequestItemGroup resultResponse)
        {
            if (Helper.IsResultHasErrors(resultResponse))
            {
                return;
            }
            Dictionary <string, TradePair> tradePairs = (Dictionary <string, TradePair>)resultResponse.items[0].result.resultData;

            //Global.market.tradePairs = new Dictionary<string, TradePair>();
            //Global.market.tradePairs.Add("BTC_LTC",new TradePair{currency1 = "BTC",currency2 = "LTC",ticker = "BTC_LTC",isActive =true});

            int btctickerCount = 0;

            foreach (KeyValuePair <string, TradePair> pair in tradePairs)
            {
                if (pair.Key.StartsWith("BTC"))
                {
                    btctickerCount++;
                }
            }

            ToolStripDropDown drop_downbtc = new ToolStripDropDown();

            drop_downbtc.LayoutStyle = ToolStripLayoutStyle.Table;
            //            drop_downbtc.
            ((TableLayoutSettings)drop_downbtc.LayoutSettings).ColumnCount = btctickerCount / 23 + 1;
            toolDropDownTickerBtc.DropDown = drop_downbtc;

            ToolStripDropDown drop_downusdt = new ToolStripDropDown();

            drop_downusdt.LayoutStyle = ToolStripLayoutStyle.Table;
            ((TableLayoutSettings)drop_downusdt.LayoutSettings).ColumnCount = (tradePairs.Count - btctickerCount) / 23 + 1;
            toolDropDownTickerUsdt.DropDown = drop_downusdt;

            foreach (KeyValuePair <string, TradePair> pair in tradePairs.OrderBy(p => p.Key))
            {
                if (pair.Key.StartsWith("BTC"))
                {
                    toolDropDownTickerBtc.DropDown.Items.Add(pair.Key);
                }
                else //if (pair.Key.StartsWith("USDT"))
                {
                    toolDropDownTickerUsdt.DropDown.Items.Add(pair.Key);
                }
            }

            if (ExchangeManager.GetMarketByMarketName(toolStripComboBoxMarket.Text).HaveKey())
            {
                toolDropDownTickerBtc.Enabled  = true;
                toolDropDownTickerUsdt.Enabled = true;
            }
            toolStripButtonChart.Enabled = true;
        }
Exemplo n.º 19
0
        public static void ProcessAPIRequest(string marketName)
        {
            Stopwatch   stopTimer   = new Stopwatch();
            List <long> elapsedTime = new List <long>();

            stopTimer.Start();
            elapsedTime.Add(stopTimer.ElapsedMilliseconds);
            while (true)
            {
                // = new RequestItemGroup();
                BlockingCollection <RequestItemGroup> requestQueue = requestManager.GetQueue(marketName);
                RequestItemGroup itemgroup = requestQueue.Take();
                int curItemCount           = itemgroup.items.Count;
                int maxPerSecond           = 5;
                if (elapsedTime.Count > maxPerSecond - curItemCount)
                {
                    long startTime = elapsedTime[elapsedTime.Count - (maxPerSecond - curItemCount)];
                    while (stopTimer.ElapsedMilliseconds - startTime < 1100)
                    {
                        int totalReqDelay = (int)(stopTimer.ElapsedMilliseconds - startTime);
                        //itemgroup.items[0].item = itemgroup.items[0].item + "..Wait.." + (1170 - totalReqDelay).ToString() + "ms";
                        Thread.Sleep(1170 - totalReqDelay);
                    }
                }
                itemgroup.market = marketName;
                foreach (RequestItem reqitem in itemgroup.items)
                {
                    elapsedTime.Add(stopTimer.ElapsedMilliseconds);
                    if (elapsedTime.Count > 10)
                    {
                        elapsedTime.RemoveAt(0);
                    }
                }
                var taskList = new List <Task>();
                foreach (RequestItem reqitem in itemgroup.items)
                {
                    var task = Task.Run(() => reqitem.ProcessResultAction(reqitem));
                    taskList.Add(task);
                }
                Task.WaitAll(taskList.ToArray());
                Task.Factory.StartNew(() =>
                {
                    try
                    {
                        itemgroup.ProcessResultUIAction(itemgroup);
                    }
                    catch (ObjectDisposedException ex)
                    {
                    }
                }, CancellationToken.None, TaskCreationOptions.None, Global.uiScheduler).Wait();
            }
        }
Exemplo n.º 20
0
        public void LoadTickers_UIResultHandler(RequestItemGroup resultResponse)
        {
            if (Helper.IsResultHasErrors(resultResponse))
            {
                return;
            }
            Dictionary <string, TradePair> tradePairs = (Dictionary <string, TradePair>)resultResponse.items[0].result.resultData;

            foreach (KeyValuePair <string, TradePair> pair in tradePairs.OrderBy(p => p.Key))
            {
                listBoxTicker.Items.Add(pair.Key);
            }
        }
Exemplo n.º 21
0
        public void buttonCancellAllOrders_UIResultHandler(RequestItemGroup resultResponse)
        {
            if (Helper.IsResultHasErrors(resultResponse))
            {
                return;
            }
            List <OpenOrder> myOpenOrders = (List <OpenOrder>)resultResponse.items[0].result.resultData;

            foreach (OpenOrder order in myOpenOrders)
            {
                tradeLogic.CancellMyOrder(order, CancellOrder_UIResultHandler);
                break;
            }
        }
Exemplo n.º 22
0
        public void AddItemGroup(string marketName, RequestItemGroup itemgroup)
        {
            if (itemgroup.items.Count > 5)
            {
                throw new Exception("Can't process request, Limit=5 requests in sec");
            }

            BlockingCollection <RequestItemGroup> queue;

            lock (_locker)
            {
                queue = requestQueue[marketName];
            }
            queue.Add(itemgroup);
        }
Exemplo n.º 23
0
        public void listBoxTicker_SelectedIndexChanged_UIResultHandler(RequestItemGroup resultResponse)
        {
            if (Helper.IsResultHasErrors(resultResponse))
            {
                return;
            }
            Dictionary <int, PriceCandle> priceHistory = (Dictionary <int, PriceCandle>)resultResponse.items[0].result.resultData;

            chart = new PriceChart(ticker, Graphics.FromHwnd(panelChart.Handle), 0, 0, panelChart.Width, panelChart.Height);
            chart.SetData(priceHistory, ConvertDataType.BAR_5, ConvertDataType.BAR_15);
            chart.ReDrawFull();
            Text = "Chart " + market.MarketName() + "  " + ticker;

            timerLastPrice.Start();
        }
Exemplo n.º 24
0
        public void LastMarketPrice_UIResultHandler(RequestItemGroup resultResponse)
        {
            if (Helper.IsResultHasErrors(resultResponse))
            {
                return;
            }
            TradeLast tradelast = (TradeLast)resultResponse.items[0].result.resultData;

            if (chart == null)
            {
                return;
            }
            chart.UpdatePrice(tradelast.last);
            chart.ReDrawFull();
            timerLastPrice.Start();
        }
Exemplo n.º 25
0
        public virtual void UpdateTradeStateRequest(Action <RequestItemGroup> ProcessResultUIAction)
        {
            RequestParams reqparam = new RequestParams()
            {
                ticker = this.ticker
            };
            RequestItemGroup itemgroup = new RequestItemGroup(ProcessResultUIAction);

            itemgroup.AddItem(market.GetBalancesBegin(), tradeHandlers.GetBalances_RequestHandler);
            itemgroup.AddItem(market.GetTradeLastBegin(ticker), tradeHandlers.GetTradeLast_RequestHandler, reqparam);
            RequestParams reqparamusd = new RequestParams()
            {
                ticker = "USDT_BTC"
            };

            itemgroup.AddItem(market.GetTradeLastBegin("USDT_BTC"), tradeHandlers.GetTradeLast_RequestHandler, reqparamusd);
            RequestConsumer.requestManager.AddItemGroup(GetMarketName(), itemgroup);
        }
Exemplo n.º 26
0
        public void buttonLoadChartData_UIResultHandler(RequestItemGroup resultResponse)
        {
            if (Helper.IsResultHasErrors(resultResponse))
            {
                return;
            }
            Dictionary <int, PriceCandle> priceHistory = (Dictionary <int, PriceCandle>)resultResponse.items[0].result.resultData;

            if (chart == null || ticker == null)
            {
                return;
            }

            chart = new PriceChart(ticker, Graphics.FromHwnd(panelChart.Handle), 0, 0, panelChart.Width, panelChart.Height);
            chart.SetData(priceHistory, convertFromPeriod, viewResultPeriod);
            chart.ReDrawFull();
            loadRequeststarted = false;
            timerLastPrice.Start();
        }
Exemplo n.º 27
0
        public static bool IsResultHasErrors(RequestItemGroup requestGroup, bool log = true, bool display = true)
        {
            foreach (RequestItem item in requestGroup.items)
            {
                if (item.result.error != "")
                {
                    string msg = "Error UIErr->" + item.result.error;
                    if (log)
                    {
                        Helper.logger.Error(msg);
                    }
                    if (display)
                    {
                        Helper.Display(msg);
                    }
                    return(true);
                }
            }

            return(false);
        }
Exemplo n.º 28
0
        private void LoadTickers()
        {
            toolDropDownTickerBtc.DropDown.Items.Clear();
            toolDropDownTickerUsdt.DropDown.Items.Clear();
            toolDropDownTickerBtc.Enabled  = false;
            toolDropDownTickerUsdt.Enabled = false;

            // if (!ExchangeManager.GetMarketByMarketName(toolStripComboBoxMarket.Text).HaveKey())
            //     return;

            Market market = ExchangeManager.GetMarketByMarketName(toolStripComboBoxMarket.Text);

            tradeHandlers = new TradeRequestHandlers(market);

            RequestItemGroup itemgroup = new RequestItemGroup(LoadTickers_UIResultHandler);

            itemgroup.AddItem(market.GetTradePairsBegin(), tradeHandlers.GetTradePairs_RequestHandler);
            RequestConsumer.requestManager.AddItemGroup(market.MarketName(), itemgroup);

            UpdateMarkets();
        }
Exemplo n.º 29
0
        public void GetMarketCurrent_UIResultHandler(RequestItemGroup resultResponse)
        {
            if (RequestManager.IsResultHasErrors(resultResponse))
            {
                return;
            }
            Dictionary <string, MarketCurrent> currenciesDict = (Dictionary <string, MarketCurrent>)resultResponse.items[0].result.resultData;

            //            Dictionary<string, TradePair> pairs = (Dictionary<string, TradePair>)resultResponse.items[0].result.resultData;

            if (!marketsLoaded)
            {
                if (Global.marketsState.curMarketPairs[resultResponse.market] == null)
                {
                    Dictionary <string, TradePair> tradePairs = new Dictionary <string, TradePair>();
                    foreach (KeyValuePair <string, MarketCurrent> pair in currenciesDict)
                    {
                        Pair      pairinfo = new Pair(pair.Value.ticker);
                        TradePair tpair    = new TradePair
                        {
                            currency1 = pairinfo.currency1,
                            currency2 = pairinfo.currency2,
                            isActive  = true,
                            ticker    = pair.Value.ticker
                        };

                        tradePairs.Add(pair.Key, tpair);
                    }
                    Global.marketsState.SetPairs(resultResponse.market, tradePairs);
                }


                bool allMarketsReady = true;
                foreach (var marketName in Global.markets.GetMarketList())
                {
                    if (Global.marketsState.curMarketPairs[marketName] == null)
                    {
                        allMarketsReady = false;
                        break;
                    }
                }
                if (allMarketsReady)
                {
                    marketsLoaded = true;
                }
            }

            if (marketsLoaded)
            {
                Market curmarket = ExchangeManager.GetMarketByMarketName(toolStripComboBoxMarket.Text);
                if (curmarket.HaveKey())
                {
                    toolButtonTickerBtc.Enabled = true;
                    toolButtonTickerUsd.Enabled = true;
                    if (curmarket.Options().AllPairRatesSupported)
                    {
                        toolStripButtonAlerts.Enabled = true;
                    }
                }
                if (curmarket.Options().ChartDataSupported)
                {
                    toolStripButtonChart.Enabled = true;
                }
                toolStripButtonBalance.Enabled  = true;
                toolStripComboBoxMarket.Enabled = true;
                labelInfo.Text = "";
            }

            List <MarketCurrentView> currencies = currenciesDict.Values.Select(item => new MarketCurrentView
            {
                ticker        = item.ticker,
                origPrice     = item.lastPrice,
                lastPrice     = item.lastPrice,
                lastPriceUSD  = 0,
                percentChange = item.percentChange,
                volumeBtc     = item.volumeBtc,
                volumeUSDT    = item.volumeUSDT
            }).ToList();


            if (currenciesDict.ContainsKey("USDT_BTC"))
            {
                double btcPrice = currenciesDict["USDT_BTC"].lastPrice;
                foreach (var item in currencies)
                {
                    if (item.ticker.StartsWith("BTC"))
                    {
                        item.volumeUSDT = item.volumeBtc * btcPrice;
                    }

                    if (item.ticker.StartsWith("BTC"))
                    {
                        item.lastPriceUSD = item.lastPrice * btcPrice;
                    }
                    else if (item.ticker.StartsWith("USDT"))
                    {
                        double usdprice = item.lastPrice;
                        item.lastPriceUSD = usdprice;
                        item.lastPrice    = item.lastPrice / btcPrice;
                    }
                }
            }
            currencies = currencies.OrderByDescending(x => x.volumeUSDT).ToList();

            List <MarketCurrentView> currenciesCopy = new List <MarketCurrentView>();

            foreach (MarketCurrentView item in currencies)
            {
                MarketCurrentView newItem = new MarketCurrentView()
                {
                    ticker        = item.ticker,
                    origPrice     = item.origPrice,
                    lastPrice     = item.lastPrice,
                    lastPriceUSD  = item.lastPriceUSD,
                    percentChange = item.percentChange,
                    volumeBtc     = item.volumeBtc,
                    volumeUSDT    = item.volumeUSDT
                };
                currenciesCopy.Add(newItem);
            }
            if (ExchangeManager.GetMarketByMarketName(resultResponse.market).Options().AllPairRatesSupported)
            {
                Global.marketsState.Update(resultResponse.market, currenciesCopy);
            }


            if (resultResponse.market != toolStripComboBoxMarket.Text)
            {
                return;
            }


            var dataView = currencies.Select(item => new
            {
                ticker               = item.ticker,
                lastPrice            = item.lastPrice,
                lastPriceUSDT        = item.lastPriceUSD,
                percentChange        = item.percentChange,
                volumeBtc            = item.volumeBtc,
                volumeUSDT           = item.volumeUSDT,
                lastPriceDisplay     = Helper.PriceToStringBtc(item.lastPrice),
                lastPriceUSDTDisplay = item.lastPriceUSD.ToString("N3") + " $",
                percentChangeDisplay = item.percentChange.ToString("0") + " %",
                volumeBtcDisplay     = item.volumeBtc.ToString("N2"),
                volumeUSDTDisplay    = item.volumeUSDT.ToString("N0") + " $"
            }).ToList();
            List <GVColumn> columns = new List <GVColumn>()
            {
                new GVColumn("ticker", "Currency", "string"),
                new GVColumn("lastPrice", "Price BTC", "DisplayField", "lastPriceDisplay"),
                new GVColumn("lastPriceUSDT", "Price $", "DisplayField", "lastPriceUSDTDisplay"),
                new GVColumn("percentChange", "Change %", "DisplayField", "percentChangeDisplay"),
                new GVColumn("volumeBtc", "Volume BTC", "DisplayField", "volumeBtcDisplay"),
                new GVColumn("volumeUSDT", "Volume $", "DisplayField", "volumeUSDTDisplay"),
                new GVColumn("lastPriceDisplay", "Price BTC", "string", "", false),
                new GVColumn("lastPriceUSDTDisplay", "Price $", "string", "", false),
                new GVColumn("percentChangeDisplay", "Change %", "string", "", false),
                new GVColumn("volumeBtcDisplay", "Volume BTC", "string", "", false),
                new GVColumn("volumeUSDTDisplay", "Volume $", "string", "", false)
            };

            if (gvMarkets == null)
            {
                gvMarkets = new DataGridViewExWrapper();
            }
            gvMarkets.Create(dgridMarkets, dataView, columns, true);
            DataGridViewCellStyle styleTicker = new DataGridViewCellStyle {
                Font = new Font("Tahoma", 9.0F, FontStyle.Bold), ForeColor = Color.Black
            };
            DataGridViewCellStyle stylePrice = new DataGridViewCellStyle {
                Font = new Font("Tahoma", 9.0F, FontStyle.Regular), ForeColor = Color.Black
            };

            gvMarkets.SetColumnStyle("ticker", styleTicker);
            gvMarkets.SetColumnStyle("lastPrice", stylePrice);
            gvMarkets.SetColumnStyle("lastPriceUSDT", stylePrice);
            //gvMarkets.AutoSizeFillExcept("volumeUSDT");
            //            gv.RowColorByCondition("orderType", (string s) => { return s == "1"; }, Color.LightPink);


            timerMarkets.Start();
        }
Exemplo n.º 30
0
        public void GetMarketCurrent_UIResultHandler(RequestItemGroup resultResponse)
        {
            if (Helper.IsResultHasErrors(resultResponse))
            {
                return;
            }
            Dictionary <string, MarketCurrent> currenciesDict = (Dictionary <string, MarketCurrent>)resultResponse.items[0].result.resultData;

            List <MarketCurrentView> currencies = currenciesDict.Values.Select(item => new MarketCurrentView
            {
                ticker        = item.ticker,
                lastPrice     = item.lastPrice,
                lastPriceUSD  = 0,
                percentChange = item.percentChange,
                volumeBtc     = item.volumeBtc,
                volumeUSDT    = item.volumeUSDT
            }).ToList();

            if (currenciesDict.ContainsKey("USDT_BTC"))
            {
                double btcPrice = currenciesDict["USDT_BTC"].lastPrice;
                foreach (var item in currencies)
                {
                    if (item.ticker.StartsWith("BTC"))
                    {
                        item.volumeUSDT = item.volumeBtc * btcPrice;
                    }

                    if (item.ticker.StartsWith("BTC"))
                    {
                        item.lastPriceUSD = item.lastPrice * btcPrice;
                    }
                    else if (item.ticker.StartsWith("USDT"))
                    {
                        double usdprice = item.lastPrice;
                        item.lastPriceUSD = usdprice;
                        item.lastPrice    = item.lastPrice / btcPrice;
                    }
                }
            }
            currencies = currencies.OrderByDescending(x => x.volumeUSDT).ToList();

            var dataView = currencies.Select(item => new
            {
                ticker        = item.ticker,
                lastPrice     = Helper.PriceToStringBtc(item.lastPrice),
                lastPriceUSDT = item.lastPriceUSD.ToString("N3") + " $",
                percentChange = item.percentChange.ToString("0") + " %",
                volumeBtc     = item.volumeBtc.ToString("N2"),
                volumeUSDT    = item.volumeUSDT.ToString("N0") + " $"
            }).ToList();
            List <DGVColumn> columns = new List <DGVColumn>()
            {
                new DGVColumn("ticker", "Currency", "string"),
                new DGVColumn("lastPrice", "Price BTC", "string"),
                new DGVColumn("lastPriceUSDT", "Price $", "string"),
                new DGVColumn("percentChange", "Change %", "string"),
                new DGVColumn("volumeBtc", "Volume BTC", "string"),
                new DGVColumn("volumeUSDT", "Volume $", "string")
            };

            gvMarkets = new DataGridViewWrapper(dgridMarkets, true);
            gvMarkets.Create(dataView, columns);
            DataGridViewCellStyle styleTicker = new DataGridViewCellStyle {
                Font = new Font("Tahoma", 9.0F, FontStyle.Bold), ForeColor = Color.Black
            };
            DataGridViewCellStyle stylePrice = new DataGridViewCellStyle {
                Font = new Font("Tahoma", 9.0F, FontStyle.Regular), ForeColor = Color.Black
            };

            gvMarkets.SetColumnStyle("ticker", styleTicker);
            gvMarkets.SetColumnStyle("lastPrice", stylePrice);
            gvMarkets.SetColumnStyle("lastPriceUSDT", stylePrice);
            gvMarkets.AutoSizeFillExcept("volumeUSDT");
            //            gv.RowColorByCondition("orderType", (string s) => { return s == "1"; }, Color.LightPink);

            timerMarkets.Start();
        }