private void SaveMarketTrends(List <string> formKeys) { List <MarketTrend> newMarketTrends = new List <MarketTrend>(); List <string> marketTrendFormKeys = formKeys.FindAll(k => k.StartsWith("MarketAnalyzer_MarketTrend_") && k.EndsWith("|Name")); foreach (string marketTrendFormKey in marketTrendFormKeys) { MarketTrend mt = null; string originalNameSimplified = marketTrendFormKey.Replace("MarketAnalyzer_MarketTrend_", "").Replace("|Name", ""); string mtFormKey = "MarketAnalyzer_MarketTrend_" + originalNameSimplified + "|"; if (originalNameSimplified.Equals("")) { mt = new MarketTrend(); } else { mt = PTMagicConfiguration.AnalyzerSettings.MarketAnalyzer.MarketTrends.Find(m => SystemHelper.StripBadCode(m.Name, Constants.WhiteListNames).Equals(originalNameSimplified)); } mt.Name = HttpContext.Request.Form[marketTrendFormKey]; mt.Platform = HttpContext.Request.Form[mtFormKey + "Platform"]; mt.MaxMarkets = SystemHelper.TextToInteger(HttpContext.Request.Form[mtFormKey + "MaxMarkets"], mt.MaxMarkets); mt.TrendMinutes = SystemHelper.TextToInteger(HttpContext.Request.Form[mtFormKey + "TrendMinutes"], mt.TrendMinutes); mt.TrendCurrency = HttpContext.Request.Form[mtFormKey + "TrendCurrency"]; mt.IgnoredMarkets = HttpContext.Request.Form[mtFormKey + "IgnoredMarkets"]; mt.AllowedMarkets = HttpContext.Request.Form[mtFormKey + "AllowedMarkets"]; mt.DisplayGraph = HttpContext.Request.Form[mtFormKey + "DisplayGraph"].Equals("on"); mt.ExcludeMainCurrency = HttpContext.Request.Form[mtFormKey + "ExcludeMainCurrency"].Equals("on"); newMarketTrends.Add(mt); } PTMagicConfiguration.AnalyzerSettings.MarketAnalyzer.MarketTrends = newMarketTrends; }
private void BindData() { MarketTrendName = this.GetStringParameter("mt", ""); if (!MarketTrendName.Equals("")) { MarketTrend = PTMagicConfiguration.AnalyzerSettings.MarketAnalyzer.MarketTrends.Find(m => SystemHelper.StripBadCode(m.Name, Constants.WhiteListNames).Equals(MarketTrendName)); } else { MarketTrend = new MarketTrend(); MarketTrend.Name = "New Market Trend"; } }
public static List <MarketTrendChange> GetMarketTrendChanges(string platform, string mainMarket, MarketTrend marketTrend, List <string> marketList, Dictionary <string, Market> recentMarkets, Dictionary <string, Market> trendMarkets, string sortBy, bool isGlobal, PTMagicConfiguration systemConfiguration, LogHelper log) { List <MarketTrendChange> result = new List <MarketTrendChange>(); var sortedMarkets = new SortedDictionary <string, Market>(recentMarkets).OrderBy(m => m.Value.Position); if (sortBy.Equals("Volume")) { sortedMarkets = new SortedDictionary <string, Market>(recentMarkets).OrderByDescending(m => m.Value.Volume24h); } int marketCount = 1; foreach (KeyValuePair <string, Market> recentMarketPair in sortedMarkets) { if (marketList.Count == 0 || marketList.Contains(recentMarketPair.Key)) { bool excludeMainCurrency = systemConfiguration.AnalyzerSettings.MarketAnalyzer.ExcludeMainCurrency; if (!marketTrend.ExcludeMainCurrency) { excludeMainCurrency = marketTrend.ExcludeMainCurrency; } if (platform.Equals("CoinMarketCap", StringComparison.InvariantCulture) && excludeMainCurrency) { // Check if this is the main currency (only for CoinMarketCap) if (recentMarketPair.Value.Symbol.Equals(mainMarket, StringComparison.InvariantCultureIgnoreCase)) { // If the current market is the main currency, skip it continue; } } Market recentMarket = recentMarkets[recentMarketPair.Key]; if (trendMarkets.ContainsKey(recentMarketPair.Key)) { List <string> ignoredMarkets = SystemHelper.ConvertTokenStringToList(marketTrend.IgnoredMarkets, ","); if (ignoredMarkets.Contains(recentMarketPair.Value.Symbol)) { log.DoLogDebug(platform + " - Market trend '" + marketTrend.Name + "' for '" + recentMarketPair.Key + "' is ignored in this trend."); continue; } List <string> allowedMarkets = SystemHelper.ConvertTokenStringToList(marketTrend.AllowedMarkets, ","); if (allowedMarkets.Count > 0 && !allowedMarkets.Contains(recentMarketPair.Value.Symbol)) { log.DoLogDebug(platform + " - Market trend '" + marketTrend.Name + "' for '" + recentMarketPair.Key + "' is not allowed in this trend."); continue; } Market trendMarket = trendMarkets[recentMarketPair.Key]; if (trendMarket != null) { double recentMarketPrice = recentMarket.Price; double trendMarketPrice = trendMarket.Price; if (!platform.Equals("CoinMarketCap", StringComparison.InvariantCulture) && marketTrend.TrendCurrency.Equals("Fiat", StringComparison.InvariantCultureIgnoreCase)) { if (recentMarket.MainCurrencyPriceUSD > 0 && trendMarket.MainCurrencyPriceUSD > 0) { recentMarketPrice = recentMarketPrice * recentMarket.MainCurrencyPriceUSD; trendMarketPrice = trendMarketPrice * trendMarket.MainCurrencyPriceUSD; } } double trendMarketChange = (recentMarketPrice - trendMarketPrice) / trendMarketPrice * 100; MarketTrendChange mtc = new MarketTrendChange(); mtc.MarketTrendName = marketTrend.Name; mtc.TrendMinutes = marketTrend.TrendMinutes; mtc.TrendChange = trendMarketChange; mtc.Market = recentMarket.Name; mtc.LastPrice = recentMarket.Price; mtc.Volume24h = recentMarket.Volume24h; mtc.TrendDateTime = DateTime.Now; result.Add(mtc); log.DoLogDebug(platform + " - Market trend '" + marketTrend.Name + "' for '" + recentMarketPair.Key + "' (Vol. " + recentMarket.Volume24h.ToString("#,#0.00") + ") is " + trendMarketChange.ToString("#,#0.00") + "% in " + SystemHelper.GetProperDurationTime(marketTrend.TrendMinutes * 60).ToLower() + "."); marketCount++; } } } } if (marketTrend.MaxMarkets > 0 && isGlobal) { int maxMarkets = (marketTrend.MaxMarkets <= result.Count) ? marketTrend.MaxMarkets : result.Count; result = result.GetRange(0, maxMarkets); } return(result); }