Merge pull request #87 from djbadders/develop
Fixes to marketdata in non UTC timezones + small tweaks
This commit is contained in:
commit
9e04e59007
|
@ -604,6 +604,7 @@ namespace Core.Main
|
||||||
this.Log.DoLogInfo("Detected a '" + e.ChangeType.ToString() + "' change in the following preset file: " + e.FullPath);
|
this.Log.DoLogInfo("Detected a '" + e.ChangeType.ToString() + "' change in the following preset file: " + e.FullPath);
|
||||||
|
|
||||||
// Reprocess now
|
// Reprocess now
|
||||||
|
this.EnforceSettingsReapply = true;
|
||||||
PTMagicIntervalTimer_Elapsed(new object(), null);
|
PTMagicIntervalTimer_Elapsed(new object(), null);
|
||||||
|
|
||||||
// Enable the file watcher again
|
// Enable the file watcher again
|
||||||
|
@ -964,7 +965,7 @@ namespace Core.Main
|
||||||
|
|
||||||
FileInfo generalSettingsFile = new FileInfo(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "settings.general.json");
|
FileInfo generalSettingsFile = new FileInfo(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "settings.general.json");
|
||||||
FileInfo analyzerSettingsFile = new FileInfo(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "settings.analyzer.json");
|
FileInfo analyzerSettingsFile = new FileInfo(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "settings.analyzer.json");
|
||||||
if (generalSettingsFile.LastWriteTimeUtc > this.LastSettingFileCheck || analyzerSettingsFile.LastWriteTimeUtc > this.LastSettingFileCheck || EnforceSettingsReapply)
|
if (generalSettingsFile.LastWriteTimeUtc > this.LastSettingFileCheck || analyzerSettingsFile.LastWriteTimeUtc > this.LastSettingFileCheck)
|
||||||
{
|
{
|
||||||
Log.DoLogInfo("Detected configuration changes. Reloading settings...");
|
Log.DoLogInfo("Detected configuration changes. Reloading settings...");
|
||||||
|
|
||||||
|
@ -1202,7 +1203,6 @@ namespace Core.Main
|
||||||
}
|
}
|
||||||
else if (this.PTMagicConfiguration.GeneralSettings.Application.Exchange.Equals("Binance", StringComparison.InvariantCultureIgnoreCase))
|
else if (this.PTMagicConfiguration.GeneralSettings.Application.Exchange.Equals("Binance", StringComparison.InvariantCultureIgnoreCase))
|
||||||
{
|
{
|
||||||
|
|
||||||
// Get most recent market data from Binance
|
// Get most recent market data from Binance
|
||||||
this.ExchangeMarketList = Binance.GetMarketData(this.LastRuntimeSummary.MainMarket, this.MarketInfos, this.PTMagicConfiguration, this.Log);
|
this.ExchangeMarketList = Binance.GetMarketData(this.LastRuntimeSummary.MainMarket, this.MarketInfos, this.PTMagicConfiguration, this.Log);
|
||||||
}
|
}
|
||||||
|
@ -1382,14 +1382,7 @@ namespace Core.Main
|
||||||
if (this.EnforceSettingsReapply || !activeSettingName.Equals(triggeredSetting.SettingName, StringComparison.InvariantCultureIgnoreCase))
|
if (this.EnforceSettingsReapply || !activeSettingName.Equals(triggeredSetting.SettingName, StringComparison.InvariantCultureIgnoreCase))
|
||||||
{
|
{
|
||||||
// Check if we need to force a refresh of the settings
|
// Check if we need to force a refresh of the settings
|
||||||
if (this.EnforceSettingsReapply)
|
this.Log.DoLogInfo("Setting '" + activeSettingName + "' currently active. Checking for flood protection...");
|
||||||
{
|
|
||||||
this.Log.DoLogInfo("Reapplying '" + activeSettingName + "' as the settings.analyzer.json or a preset file got changed.");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.Log.DoLogInfo("Setting '" + activeSettingName + "' currently active. Checking for flood protection...");
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the setting we are about to activate is the default one, do not list matched triggers
|
// If the setting we are about to activate is the default one, do not list matched triggers
|
||||||
if (triggeredSetting.SettingName.Equals(this.DefaultSettingName, StringComparison.InvariantCultureIgnoreCase))
|
if (triggeredSetting.SettingName.Equals(this.DefaultSettingName, StringComparison.InvariantCultureIgnoreCase))
|
||||||
|
@ -1405,6 +1398,10 @@ namespace Core.Main
|
||||||
{
|
{
|
||||||
this.Log.DoLogInfo("Switching global settings to '" + triggeredSetting.SettingName + "'...");
|
this.Log.DoLogInfo("Switching global settings to '" + triggeredSetting.SettingName + "'...");
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.Log.DoLogInfo("Applying '" + triggeredSetting.SettingName + "' as the settings.analyzer.json or a preset file got changed.");
|
||||||
|
}
|
||||||
|
|
||||||
SettingsHandler.CompileProperties(this, triggeredSetting);
|
SettingsHandler.CompileProperties(this, triggeredSetting);
|
||||||
this.GlobalSettingWritten = true;
|
this.GlobalSettingWritten = true;
|
||||||
|
@ -1415,35 +1412,31 @@ namespace Core.Main
|
||||||
|
|
||||||
// Build Telegram message
|
// Build Telegram message
|
||||||
string telegramMessage;
|
string telegramMessage;
|
||||||
if (!EnforceSettingsReapply)
|
telegramMessage = this.PTMagicConfiguration.GeneralSettings.Application.InstanceName + ": Setting switched to '*" + SystemHelper.SplitCamelCase(triggeredSetting.SettingName) + "*'.";
|
||||||
|
|
||||||
|
if (matchedTriggers.Count > 0)
|
||||||
{
|
{
|
||||||
telegramMessage = this.PTMagicConfiguration.GeneralSettings.Application.InstanceName + ": Setting switched to '*" + SystemHelper.SplitCamelCase(triggeredSetting.SettingName) + "*'.";
|
telegramMessage += "\n\n*Matching Triggers:*";
|
||||||
|
foreach (string triggerResult in matchedTriggers)
|
||||||
if (matchedTriggers.Count > 0)
|
|
||||||
{
|
{
|
||||||
telegramMessage += "\n\n*Matching Triggers:*";
|
telegramMessage += "\n" + triggerResult;
|
||||||
foreach (string triggerResult in matchedTriggers)
|
|
||||||
{
|
|
||||||
telegramMessage += "\n" + triggerResult;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.AverageMarketTrendChanges.Keys.Count > 0)
|
|
||||||
{
|
|
||||||
telegramMessage += "\n\n*Market Trends:*";
|
|
||||||
foreach (string key in this.AverageMarketTrendChanges.Keys)
|
|
||||||
{
|
|
||||||
telegramMessage += "\n" + key + ": " + this.AverageMarketTrendChanges[key].ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")) + "%";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (this.AverageMarketTrendChanges.Keys.Count > 0)
|
||||||
{
|
{
|
||||||
telegramMessage = this.PTMagicConfiguration.GeneralSettings.Application.InstanceName + ": Reapplying settings '*" + SystemHelper.SplitCamelCase(triggeredSetting.SettingName) + "*'.";
|
telegramMessage += "\n\n*Market Trends:*";
|
||||||
|
foreach (string key in this.AverageMarketTrendChanges.Keys)
|
||||||
|
{
|
||||||
|
telegramMessage += "\n" + key + ": " + this.AverageMarketTrendChanges[key].ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")) + "%";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send Telegram message
|
// Send Telegram message
|
||||||
if (this.PTMagicConfiguration.GeneralSettings.Telegram.IsEnabled) TelegramHelper.SendMessage(this.PTMagicConfiguration.GeneralSettings.Telegram.BotToken, this.PTMagicConfiguration.GeneralSettings.Telegram.ChatId, telegramMessage, this.PTMagicConfiguration.GeneralSettings.Telegram.SilentMode, this.Log);
|
if (this.PTMagicConfiguration.GeneralSettings.Telegram.IsEnabled)
|
||||||
|
{
|
||||||
|
TelegramHelper.SendMessage(this.PTMagicConfiguration.GeneralSettings.Telegram.BotToken, this.PTMagicConfiguration.GeneralSettings.Telegram.ChatId, telegramMessage, this.PTMagicConfiguration.GeneralSettings.Telegram.SilentMode, this.Log);
|
||||||
|
}
|
||||||
|
|
||||||
// Record last settings run
|
// Record last settings run
|
||||||
this.LastSetting = activeSettingName;
|
this.LastSetting = activeSettingName;
|
||||||
|
@ -2486,10 +2479,7 @@ namespace Core.Main
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.LastRuntimeSummary.MarketSummary.ContainsKey(marketPair))
|
this.LastRuntimeSummary.MarketSummary.Add(marketPair, mpSummary);
|
||||||
{
|
|
||||||
this.LastRuntimeSummary.MarketSummary.Add(marketPair, mpSummary);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.Log.DoLogInfo("Summary: Current single market properties saved.");
|
this.Log.DoLogInfo("Summary: Current single market properties saved.");
|
||||||
|
|
|
@ -345,7 +345,17 @@ namespace Core.MarketAnalyzer
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
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>();
|
List<MarketTrendChange> result = new List<MarketTrendChange>();
|
||||||
|
|
||||||
|
@ -368,7 +378,6 @@ namespace Core.MarketAnalyzer
|
||||||
|
|
||||||
if (platform.Equals("CoinMarketCap", StringComparison.InvariantCulture) && excludeMainCurrency)
|
if (platform.Equals("CoinMarketCap", StringComparison.InvariantCulture) && excludeMainCurrency)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Check if this is the main currency (only for CoinMarketCap)
|
// Check if this is the main currency (only for CoinMarketCap)
|
||||||
if (recentMarketPair.Value.Symbol.Equals(mainMarket, StringComparison.InvariantCultureIgnoreCase))
|
if (recentMarketPair.Value.Symbol.Equals(mainMarket, StringComparison.InvariantCultureIgnoreCase))
|
||||||
{
|
{
|
||||||
|
@ -377,6 +386,7 @@ namespace Core.MarketAnalyzer
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Market recentMarket = recentMarkets[recentMarketPair.Key];
|
Market recentMarket = recentMarkets[recentMarketPair.Key];
|
||||||
|
|
||||||
if (trendMarkets.ContainsKey(recentMarketPair.Key))
|
if (trendMarkets.ContainsKey(recentMarketPair.Key))
|
||||||
|
|
|
@ -11,6 +11,7 @@ using Core.ProfitTrailer;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
|
|
||||||
namespace Core.MarketAnalyzer
|
namespace Core.MarketAnalyzer
|
||||||
{
|
{
|
||||||
|
@ -75,24 +76,24 @@ namespace Core.MarketAnalyzer
|
||||||
float marketVolume = currencyTicker["volume"].ToObject<float>();
|
float marketVolume = currencyTicker["volume"].ToObject<float>();
|
||||||
if (marketName.EndsWith(mainMarket, StringComparison.InvariantCultureIgnoreCase))
|
if (marketName.EndsWith(mainMarket, StringComparison.InvariantCultureIgnoreCase))
|
||||||
{
|
{
|
||||||
if(marketLastPrice > 0 && marketVolume > 0 )
|
if (marketLastPrice > 0 && marketVolume > 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Set last values in case any error occurs
|
// Set last values in case any error occurs
|
||||||
lastMarket = marketName;
|
lastMarket = marketName;
|
||||||
lastTicker = currencyTicker;
|
lastTicker = currencyTicker;
|
||||||
|
|
||||||
Market market = new Market();
|
Market market = new Market();
|
||||||
market.Position = markets.Count + 1;
|
market.Position = markets.Count + 1;
|
||||||
market.Name = marketName;
|
market.Name = marketName;
|
||||||
market.Symbol = currencyTicker["symbol"].ToString();
|
market.Symbol = currencyTicker["symbol"].ToString();
|
||||||
market.Price = SystemHelper.TextToDouble(currencyTicker["lastPrice"].ToString(), 0, "en-US");
|
market.Price = SystemHelper.TextToDouble(currencyTicker["lastPrice"].ToString(), 0, "en-US");
|
||||||
market.Volume24h = SystemHelper.TextToDouble(currencyTicker["quoteVolume"].ToString(), 0, "en-US");
|
market.Volume24h = SystemHelper.TextToDouble(currencyTicker["quoteVolume"].ToString(), 0, "en-US");
|
||||||
market.MainCurrencyPriceUSD = mainCurrencyPrice;
|
market.MainCurrencyPriceUSD = mainCurrencyPrice;
|
||||||
|
|
||||||
markets.Add(market.Name, market);
|
markets.Add(market.Name, market);
|
||||||
|
|
||||||
result.Add(market.Name);
|
result.Add(market.Name);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -108,7 +109,7 @@ namespace Core.MarketAnalyzer
|
||||||
|
|
||||||
Binance.CheckForMarketDataRecreation(mainMarket, markets, systemConfiguration, log);
|
Binance.CheckForMarketDataRecreation(mainMarket, markets, systemConfiguration, log);
|
||||||
|
|
||||||
DateTime fileDateTime = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, DateTime.UtcNow.Hour, DateTime.UtcNow.Minute, 0).ToUniversalTime();
|
DateTime fileDateTime = DateTime.UtcNow;
|
||||||
|
|
||||||
FileHelper.WriteTextToFile(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + Constants.PTMagicPathData + Path.DirectorySeparatorChar + Constants.PTMagicPathExchange + Path.DirectorySeparatorChar, "MarketData_" + fileDateTime.ToString("yyyy-MM-dd_HH.mm") + ".json", JsonConvert.SerializeObject(markets), fileDateTime, fileDateTime);
|
FileHelper.WriteTextToFile(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + Constants.PTMagicPathData + Path.DirectorySeparatorChar + Constants.PTMagicPathExchange + Path.DirectorySeparatorChar, "MarketData_" + fileDateTime.ToString("yyyy-MM-dd_HH.mm") + ".json", JsonConvert.SerializeObject(markets), fileDateTime, fileDateTime);
|
||||||
|
|
||||||
|
@ -167,7 +168,7 @@ namespace Core.MarketAnalyzer
|
||||||
log.DoLogInfo("Binance - Checking first seen dates for " + markets.Count + " markets. This may take a while...");
|
log.DoLogInfo("Binance - Checking first seen dates for " + markets.Count + " markets. This may take a while...");
|
||||||
|
|
||||||
int marketsChecked = 0;
|
int marketsChecked = 0;
|
||||||
|
|
||||||
foreach (string key in markets.Keys)
|
foreach (string key in markets.Keys)
|
||||||
{
|
{
|
||||||
// Save market info
|
// Save market info
|
||||||
|
@ -360,13 +361,17 @@ namespace Core.MarketAnalyzer
|
||||||
|
|
||||||
// Get Ticks for all markets
|
// Get Ticks for all markets
|
||||||
log.DoLogDebug("Binance - Getting ticks for '" + markets.Count + "' markets");
|
log.DoLogDebug("Binance - Getting ticks for '" + markets.Count + "' markets");
|
||||||
Dictionary<string, List<MarketTick>> marketTicks = new Dictionary<string, List<MarketTick>>();
|
ConcurrentDictionary<string, List<MarketTick>> marketTicks = new ConcurrentDictionary<string, List<MarketTick>>();
|
||||||
|
|
||||||
Parallel.ForEach( markets.Keys,
|
Parallel.ForEach(markets.Keys,
|
||||||
new ParallelOptions { MaxDegreeOfParallelism = 5 },
|
new ParallelOptions { MaxDegreeOfParallelism = 5 },
|
||||||
(key) =>
|
(key) =>
|
||||||
{
|
{
|
||||||
marketTicks.Add(key, Binance.GetMarketTicks(key, totalTicks, systemConfiguration, log));
|
if (!marketTicks.TryAdd(key, GetMarketTicks(key, totalTicks, systemConfiguration, log)))
|
||||||
|
{
|
||||||
|
// Failed to add ticks to dictionary
|
||||||
|
throw new Exception("Failed to add ticks for " + key + " to the memory dictionary, results may be incorrectly calculated!");
|
||||||
|
}
|
||||||
|
|
||||||
if ((marketTicks.Count % 10) == 0)
|
if ((marketTicks.Count % 10) == 0)
|
||||||
{
|
{
|
||||||
|
@ -436,4 +441,4 @@ namespace Core.MarketAnalyzer
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -115,7 +115,7 @@ namespace Core.MarketAnalyzer
|
||||||
|
|
||||||
Bittrex.CheckForMarketDataRecreation(mainMarket, markets, systemConfiguration, log);
|
Bittrex.CheckForMarketDataRecreation(mainMarket, markets, systemConfiguration, log);
|
||||||
|
|
||||||
DateTime fileDateTime = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, DateTime.UtcNow.Hour, DateTime.UtcNow.Minute, 0).ToUniversalTime();
|
DateTime fileDateTime = DateTime.UtcNow;
|
||||||
|
|
||||||
FileHelper.WriteTextToFile(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + Constants.PTMagicPathData + Path.DirectorySeparatorChar + Constants.PTMagicPathExchange + Path.DirectorySeparatorChar, "MarketData_" + fileDateTime.ToString("yyyy-MM-dd_HH.mm") + ".json", JsonConvert.SerializeObject(markets), fileDateTime, fileDateTime);
|
FileHelper.WriteTextToFile(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + Constants.PTMagicPathData + Path.DirectorySeparatorChar + Constants.PTMagicPathExchange + Path.DirectorySeparatorChar, "MarketData_" + fileDateTime.ToString("yyyy-MM-dd_HH.mm") + ".json", JsonConvert.SerializeObject(markets), fileDateTime, fileDateTime);
|
||||||
|
|
||||||
|
@ -235,11 +235,15 @@ namespace Core.MarketAnalyzer
|
||||||
log.DoLogDebug("Bittrex - Getting ticks for '" + markets.Count + "' markets");
|
log.DoLogDebug("Bittrex - Getting ticks for '" + markets.Count + "' markets");
|
||||||
Dictionary<string, List<MarketTick>> marketTicks = new Dictionary<string, List<MarketTick>>();
|
Dictionary<string, List<MarketTick>> marketTicks = new Dictionary<string, List<MarketTick>>();
|
||||||
|
|
||||||
Parallel.ForEach( markets.Keys,
|
Parallel.ForEach(markets.Keys,
|
||||||
new ParallelOptions { MaxDegreeOfParallelism = 5 },
|
new ParallelOptions { MaxDegreeOfParallelism = 5 },
|
||||||
(key) =>
|
(key) =>
|
||||||
{
|
{
|
||||||
marketTicks.Add(key, Bittrex.GetMarketTicks(key, systemConfiguration, log));
|
if (!marketTicks.TryAdd(key, Bittrex.GetMarketTicks(key, systemConfiguration, log)))
|
||||||
|
{
|
||||||
|
// Failed to add ticks to dictionary
|
||||||
|
throw new Exception("Failed to add ticks for " + key + " to the memory dictionary, results may be incorrectly calculated!");
|
||||||
|
}
|
||||||
|
|
||||||
if ((marketTicks.Count % 10) == 0)
|
if ((marketTicks.Count % 10) == 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -53,11 +53,10 @@ namespace Core.MarketAnalyzer
|
||||||
|
|
||||||
CoinMarketCap.CheckForMarketDataRecreation(markets, systemConfiguration, log);
|
CoinMarketCap.CheckForMarketDataRecreation(markets, systemConfiguration, log);
|
||||||
|
|
||||||
DateTime fileDateTime = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, DateTime.UtcNow.Hour, DateTime.UtcNow.Minute, 0).ToUniversalTime();
|
// Save the data
|
||||||
|
DateTime fileDateTime = DateTime.UtcNow;
|
||||||
FileHelper.WriteTextToFile(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + Constants.PTMagicPathData + Path.DirectorySeparatorChar + Constants.PTMagicPathCoinMarketCap + Path.DirectorySeparatorChar, "MarketData_" + fileDateTime.ToString("yyyy-MM-dd_HH.mm") + ".json", JsonConvert.SerializeObject(markets), fileDateTime, fileDateTime);
|
FileHelper.WriteTextToFile(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + Constants.PTMagicPathData + Path.DirectorySeparatorChar + Constants.PTMagicPathCoinMarketCap + Path.DirectorySeparatorChar, "MarketData_" + fileDateTime.ToString("yyyy-MM-dd_HH.mm") + ".json", JsonConvert.SerializeObject(markets), fileDateTime, fileDateTime);
|
||||||
|
|
||||||
|
|
||||||
log.DoLogInfo("CoinMarketCap - Market data saved.");
|
log.DoLogInfo("CoinMarketCap - Market data saved.");
|
||||||
|
|
||||||
FileHelper.CleanupFiles(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + Constants.PTMagicPathData + Path.DirectorySeparatorChar + Constants.PTMagicPathCoinMarketCap + Path.DirectorySeparatorChar, systemConfiguration.AnalyzerSettings.MarketAnalyzer.StoreDataMaxHours);
|
FileHelper.CleanupFiles(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + Constants.PTMagicPathData + Path.DirectorySeparatorChar + Constants.PTMagicPathCoinMarketCap + Path.DirectorySeparatorChar, systemConfiguration.AnalyzerSettings.MarketAnalyzer.StoreDataMaxHours);
|
||||||
|
@ -139,11 +138,10 @@ namespace Core.MarketAnalyzer
|
||||||
markets24h.Add(markets[key].Name, market24h);
|
markets24h.Add(markets[key].Name, market24h);
|
||||||
}
|
}
|
||||||
|
|
||||||
DateTime fileDateTime = new DateTime(DateTime.UtcNow.ToLocalTime().AddHours(-24).Year, DateTime.UtcNow.ToLocalTime().AddHours(-24).Month, DateTime.UtcNow.ToLocalTime().AddHours(-24).Day, DateTime.UtcNow.ToLocalTime().AddHours(-24).Hour, DateTime.UtcNow.ToLocalTime().AddHours(-24).Minute, 0).ToUniversalTime();
|
// Save the 24hr market data
|
||||||
|
DateTime fileDateTime = DateTime.UtcNow.AddHours(-24);
|
||||||
FileHelper.WriteTextToFile(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + Constants.PTMagicPathData + Path.DirectorySeparatorChar + Constants.PTMagicPathCoinMarketCap + Path.DirectorySeparatorChar, "MarketData_" + fileDateTime.ToString("yyyy-MM-dd_HH.mm") + ".json", JsonConvert.SerializeObject(markets24h), fileDateTime, fileDateTime);
|
FileHelper.WriteTextToFile(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + Constants.PTMagicPathData + Path.DirectorySeparatorChar + Constants.PTMagicPathCoinMarketCap + Path.DirectorySeparatorChar, "MarketData_" + fileDateTime.ToString("yyyy-MM-dd_HH.mm") + ".json", JsonConvert.SerializeObject(markets24h), fileDateTime, fileDateTime);
|
||||||
|
|
||||||
|
|
||||||
log.DoLogInfo("CoinMarketCap - 24h market data rebuilt.");
|
log.DoLogInfo("CoinMarketCap - 24h market data rebuilt.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,7 +99,7 @@ namespace Core.MarketAnalyzer
|
||||||
|
|
||||||
Poloniex.CheckForMarketDataRecreation(mainMarket, markets, systemConfiguration, log);
|
Poloniex.CheckForMarketDataRecreation(mainMarket, markets, systemConfiguration, log);
|
||||||
|
|
||||||
DateTime fileDateTime = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, DateTime.UtcNow.Hour, DateTime.UtcNow.Minute, 0).ToUniversalTime();
|
DateTime fileDateTime = DateTime.UtcNow;
|
||||||
|
|
||||||
FileHelper.WriteTextToFile(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + Constants.PTMagicPathData + Path.DirectorySeparatorChar + Constants.PTMagicPathExchange + Path.DirectorySeparatorChar, "MarketData_" + fileDateTime.ToString("yyyy-MM-dd_HH.mm") + ".json", JsonConvert.SerializeObject(markets), fileDateTime, fileDateTime);
|
FileHelper.WriteTextToFile(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + Constants.PTMagicPathData + Path.DirectorySeparatorChar + Constants.PTMagicPathExchange + Path.DirectorySeparatorChar, "MarketData_" + fileDateTime.ToString("yyyy-MM-dd_HH.mm") + ".json", JsonConvert.SerializeObject(markets), fileDateTime, fileDateTime);
|
||||||
|
|
||||||
|
@ -269,11 +269,15 @@ namespace Core.MarketAnalyzer
|
||||||
log.DoLogDebug("Poloniex - Getting ticks for '" + markets.Count + "' markets");
|
log.DoLogDebug("Poloniex - Getting ticks for '" + markets.Count + "' markets");
|
||||||
Dictionary<string, List<MarketTick>> marketTicks = new Dictionary<string, List<MarketTick>>();
|
Dictionary<string, List<MarketTick>> marketTicks = new Dictionary<string, List<MarketTick>>();
|
||||||
|
|
||||||
Parallel.ForEach( markets.Keys,
|
Parallel.ForEach(markets.Keys,
|
||||||
new ParallelOptions { MaxDegreeOfParallelism = 5 },
|
new ParallelOptions { MaxDegreeOfParallelism = 5 },
|
||||||
(key) =>
|
(key) =>
|
||||||
{
|
{
|
||||||
marketTicks.Add(key, Poloniex.GetMarketTicks(key, systemConfiguration, log));
|
if (!marketTicks.TryAdd(key, Bittrex.GetMarketTicks(key, systemConfiguration, log)))
|
||||||
|
{
|
||||||
|
// Failed to add ticks to dictionary
|
||||||
|
throw new Exception("Failed to add ticks for " + key + " to the memory dictionary, results may be incorrectly calculated!");
|
||||||
|
}
|
||||||
|
|
||||||
if ((marketTicks.Count % 10) == 0)
|
if ((marketTicks.Count % 10) == 0)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue