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}"); } }
/// <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ó..."); } }
public void SendCoinMessage(CoinDataModel coinData, bool type) { SendPublicMessage(CreatePublicMessage(type, ref coinData)); }