private void CoinMath(BookPayload[] bd, CoinDataModel cd)
        {
            foreach (BookPayload p in bd)
            {
                string Ttype;

                cd.CountTradesTotal++;
                cd.Price = p.PriceMXN;
                cd.MinuteAmountTrades += p.AmountMXN;

                cd.Promedio = decimal.Round(cd.PriceHistory.Average(), 2, MidpointRounding.AwayFromZero);
                cd.MinPrice = cd.PriceHistory.Min();
                cd.MaxPrice = cd.PriceHistory.Max();

                if (p.Type)
                {
                    Ttype = "Venta  - Alza";
                    cd.CountTradesUp++;
                    cd.MinuteAmountTradesUp += p.AmountMXN;
                    OnTradeUp?.Invoke(this, cd);
                }
                else
                {
                    Ttype = "Compra - Baja";
                    cd.CountTradesDown++;
                    cd.MinuteAmountTradesDown += p.AmountMXN;
                    OnTradeDown?.Invoke(this, cd);
                }

                Console.WriteLine($"{timeTrading.Hour.ToString("D2")}:{timeTrading.Minute.ToString("D2")}:{timeTrading.Second.ToString("D2")} {cd.CoinName} {Ttype}");
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Creates telegram message
        /// </summary>
        /// <param name="type">Trade type, true = buying, false = selling</param>
        /// <param name="coinData">CoinData</param>
        /// <returns></returns>
        private string CreatePublicMessage(bool type, ref CoinDataModel coinData)
        {
            string  message    = string.Empty;
            decimal percentage = decimal.Round((coinData.Price * 100 / coinData.LastPrice) - 100, 2, MidpointRounding.AwayFromZero);

            if (type)
            {
                message += $"{coinData.CoinName} ↑↑ALZA {percentage}%\n";
            }
            else
            {
                message += $"{coinData.CoinName} ↓↓BAJA {percentage}%\n";
            }

            message += $"[POld: ${coinData.LastPrice.ToString("F")}]\n";
            message += $"[PNew: ${coinData.Price.ToString("F")}]\n";
            message += $"[PAvg: ${coinData.Promedio.ToString("F")}]\n";
            message += $"[Pmax: ${coinData.MaxPrice.ToString("F")}]\n";
            message += $"[Pmin: ${coinData.MinPrice.ToString("F")}]\n";

            message += $"[Tm: {coinData.MinuteCountTotal} - ${coinData.MinuteAmountTrades.ToString("F")}]\n";
            message += $"[Tm↑: {coinData.MinuteCountUp} - ${coinData.MinuteAmountTradesUp.ToString("F")}]\n";
            message += $"[Tm↓: {coinData.MinuteCountDown} - ${coinData.MinuteAmountTradesDown.ToString("F")}]";

            return(message);
        }
        private void CheckMinuteData(object timerState)
        {
            Task.Run(() => {
                foreach (KeyValuePair <string, CoinDataModel> cd in coinsData)
                {
                    CoinDataModel coinInfo = cd.Value;

                    coinInfo.MinuteCountTotal = coinInfo.CountTradesTotal - coinInfo.LastCountTradesTotal;
                    coinInfo.MinuteCountDown  = coinInfo.CountTradesDown - coinInfo.LastCountTradesDown;
                    coinInfo.MinuteCountUp    = coinInfo.CountTradesUp - coinInfo.LastCountTradesUp;

                    if (coinInfo.MinuteCountUp > 20 && coinInfo.LastPrice > 0)
                    {
                        tr?.SendCoinMessage(coinInfo, true);
                        OnLotTradeUp?.Invoke(this, coinInfo);
                    }

                    if (coinInfo.MinuteCountDown > 20 && coinInfo.LastPrice > 0)
                    {
                        tr?.SendCoinMessage(coinInfo, false);
                    }

                    coinInfo.LastCountTradesTotal = coinInfo.CountTradesTotal;
                    coinInfo.LastCountTradesUp    = coinInfo.CountTradesUp;
                    coinInfo.LastCountTradesDown  = coinInfo.CountTradesDown;
                    coinInfo.LastPrice            = coinInfo.Price;

                    coinInfo.MinuteAmountTrades     = 0;
                    coinInfo.MinuteAmountTradesUp   = 0;
                    coinInfo.MinuteAmountTradesDown = 0;
                }
            }).ConfigureAwait(false);


            if (controlDate.Day != DateTime.Now.Day)
            {
                ResetData();
                controlDate = DateTime.Now;
                tr?.SendMessage(">> Limpieza de datos, media noche...");
            }

            if (DateTime.Now.Subtract(timeTrading).TotalMinutes > 5)
            {
                APIWs.Restart();
                timeTrading = DateTime.Now;
                tr?.SendMessage(">> Servicio se reinició...");
            }
        }
Exemplo n.º 4
0
 public void SendCoinMessage(CoinDataModel coinData, bool type)
 {
     SendPublicMessage(CreatePublicMessage(type, ref coinData));
 }