示例#1
0
        public async void CandlePull(CandleWidth width, Coins Coin, Coins Pair, CancellationToken token)
        {
            await Task.Run(() =>
            {
                try
                {
                    RestClient client = new RestClient(ApiUrl);
                    RestRequest request;
                    CandleWidth _width = width;
                    List <CandleBinance> clist;
                    int limit = maxLimit;
                    dictCandle.TryGetValue(_width, out clist);
                    bool newList = false;

                    if (width == CandleWidth.INIT)
                    {
                        width   = CandleWidth.m5;
                        request = new RestRequest("/klines?symbol=" + Coin + Pair + "&interval=" + App.candleStickWidthToString(width) + "&limit=" + minLimit);
                    }
                    else
                    {
                        request = new RestRequest("/klines?symbol=" + Coin + Pair + "&interval=" + App.candleStickWidthToString(width) + "&limit=" + maxLimit);
                    }

                    while (!token.IsCancellationRequested)
                    {
                        if (clist.Count <= maxLimit && clist.Count > minLimit)
                        {
                            limit = minLimit;
                            if (_width != CandleWidth.INIT)
                            {
                                request = new RestRequest("/klines?symbol=" + Coin + Pair + "&interval=" + App.candleStickWidthToString(width) + "&limit=" + limit);
                            }
                        }
                        else if (clist.Count == 0)
                        {
                            request = new RestRequest("/klines?symbol=" + Coin + Pair + "&interval=" + App.candleStickWidthToString(width) + "&limit=" + limit);
                        }

                        IRestResponse response = client.Execute(request);

                        System.Diagnostics.Debug.WriteLine("Response Candle: " + response.ErrorMessage + " " + response.StatusCode + " " + response.IsSuccessful + " " + response.StatusDescription + " " + response.ErrorMessage + " " + response.ResponseStatus);

                        if ((int)response.StatusCode == 429)
                        {
                            sleepTime = 3000;
                        }

                        if (response.IsSuccessful == false)
                        {
                            if (clist.Count > 0)
                            {
                                clist.Clear();
                                limit   = maxLimit;
                                newList = true;
                            }
                            Thread.Sleep(5000);
                            continue;
                        }


                        List <CandleBinance> list = JsonConvert.DeserializeObject <List <CandleBinance> >(response.Content);
                        if (_width == CandleWidth.INIT || (list.Count > minLimit && list.Count <= maxLimit))
                        {
                            clist = list;
                        }
                        else if (list.Count == minLimit && clist.Count <= maxLimit)
                        {
                            CandleBinance clast = clist[clist.Count - 1];
                            CandleBinance last  = list[list.Count - 1];

                            if (last.OpenTime == clast.OpenTime)
                            {
                                clist[clist.Count - 1] = last;
                                ;
                                clast = last;
                            }
                            else if (last.OpenTime > clast.OpenTime)
                            {
                                clist.RemoveAt(0);
                                clist.Add(last);
                            }

                            /*System.Diagnostics.Debug.WriteLine("Pulled: " + clast.OpenTime + " " + last.OpenTime);
                             *
                             * foreach(CandleBinance cb in clist)
                             * {
                             *  System.Diagnostics.Debug.WriteLine(cb.OpenTime);
                             * }
                             * System.Diagnostics.Debug.WriteLine("---------------");*/
                        }

                        CandlePullEventArgs args = new CandlePullEventArgs();
                        args.Width      = _width;
                        args.candleList = clist.ToList <CandleIF>();
                        args.newList    = newList;
                        OnCandlePull(args);


                        Thread.Sleep(sleepTime);
                    }
                } catch (Exception e)
                {
                    System.Diagnostics.Debug.WriteLine(e.Message + " " + e.StackTrace);
                    throw;
                }
            }, token);
        }
示例#2
0
 protected virtual void OnCandlePull(CandlePullEventArgs e)
 {
     candlePulled?.Invoke(this, e);
 }