diff --git a/cointop/chart.go b/cointop/chart.go index 223fc6b..1c1e1bd 100644 --- a/cointop/chart.go +++ b/cointop/chart.go @@ -172,21 +172,24 @@ func (ct *Cointop) ChartPoints(symbol string, name string) error { } } - // Resample cachedata - timeQuantum := timedata.CalculateTimeQuantum(cacheData) - newStart := cacheData[0][0] // use the first data point - newEnd := time.Unix(end, 0).Add(-timeQuantum) - timeData := timedata.ResampleTimeSeriesData(cacheData, newStart, float64(newEnd.UnixMilli()), chart.GetChartDataSize(maxX)) - labels := timedata.BuildTimeSeriesLabels(timeData) - - // Extract just the values from the data + var labels []string var data []float64 - for i := range timeData { - value := timeData[i][1] - if math.IsNaN(value) { - value = 0.0 + timeQuantum := timedata.CalculateTimeQuantum(cacheData) // will be 0 if <2 points + if timeQuantum > 0 { + // Resample cachedata + newStart := cacheData[0][0] // use the first data point + newEnd := time.Unix(end, 0).Add(-timeQuantum) + timeData := timedata.ResampleTimeSeriesData(cacheData, newStart, float64(newEnd.UnixMilli()), chart.GetChartDataSize(maxX)) + labels = timedata.BuildTimeSeriesLabels(timeData) + + // Extract just the values from the data + for i := range timeData { + value := timeData[i][1] + if math.IsNaN(value) { + value = 0.0 + } + data = append(data, value) } - data = append(data, value) } chart.SetData(data) @@ -282,38 +285,42 @@ func (ct *Cointop) PortfolioChart() error { break // use the first one } } - newStart := time.Unix(start, 0).Add(timeQuantum) - newEnd := time.Unix(end, 0).Add(-timeQuantum) - // Resample and sum data + // If there is data, resample and sum var data []float64 var labels []string - for i, cacheData := range allCacheData { - coinData := timedata.ResampleTimeSeriesData(cacheData.data, float64(newStart.UnixMilli()), float64(newEnd.UnixMilli()), chart.GetChartDataSize(maxX)) - if i == 0 { - labels = timedata.BuildTimeSeriesLabels(coinData) - } - // sum (excluding NaN) - for i := range coinData { - price := coinData[i][1] - if math.IsNaN(price) { - price = 0.0 + if timeQuantum > 0 { + newStart := time.Unix(start, 0).Add(timeQuantum) + newEnd := time.Unix(end, 0).Add(-timeQuantum) + + // Resample and sum data + for i, cacheData := range allCacheData { + coinData := timedata.ResampleTimeSeriesData(cacheData.data, float64(newStart.UnixMilli()), float64(newEnd.UnixMilli()), chart.GetChartDataSize(maxX)) + if i == 0 { + labels = timedata.BuildTimeSeriesLabels(coinData) } - sum := cacheData.coin.Holdings * price - if i < len(data) { - data[i] += sum - } else { - data = append(data, sum) + // sum (excluding NaN) + for i := range coinData { + price := coinData[i][1] + if math.IsNaN(price) { + price = 0.0 + } + sum := cacheData.coin.Holdings * price + if i < len(data) { + data[i] += sum + } else { + data = append(data, sum) + } } } - } - // Scale Portfolio Balances to hide value - if ct.State.hidePortfolioBalances { - var lastPrice = data[len(data)-1] - if lastPrice > 0.0 { - for i, price := range data { - data[i] = 100 * price / lastPrice + // Scale Portfolio Balances to hide value + if ct.State.hidePortfolioBalances { + var lastPrice = data[len(data)-1] + if lastPrice > 0.0 { + for i, price := range data { + data[i] = 100 * price / lastPrice + } } } }