ravivooda / stocks

1 stars 0 forks source link

Hardcoded 10 days split data #75

Open github-actions[bot] opened 1 year ago

github-actions[bot] commented 1 year ago

https://github.com/ravivooda/stocks/blob/bbb005a915aaff3eb8a2c17d4d7fa85c38b44636/website/stock.go#L29


        mappedHoldings[leverage] = letfHoldings
    }

    latestDate, latestData, linear5DaysData, err := s.fetchStockTradingData(stock, 5) // TODO: Hardcoded 10 days split data

    data := struct {
        Ticker                   string
        Description              string
        MappedHoldings           map[string][]models.LETFHolding
        Combinations             []models.StockCombination
        TemplateCustomMetadata   TemplateCustomMetadata
        TotalETFsCount           int
        TotalProvidersCount      int
        ShouldRenderAlphaVantage bool
        LatestData               alphavantage.DailyData
        LatestDate               string
        LinearDailyData          []alphavantage.LinearTimeSeriesDaily
    }{
        Ticker:                   stock,
        Description:              stockWrapper.Holdings[0].StockDescription, //TODO: Hardcoded stock description
        MappedHoldings:           mappedHoldings,
        TemplateCustomMetadata:   s.metadata.TemplateCustomMetadata,
        Combinations:             stockWrapper.Combinations,
        TotalETFsCount:           len(stockWrapper.Holdings),
        TotalProvidersCount:      len(s.metadata.ProvidersMap),
        ShouldRenderAlphaVantage: err == nil,
        LatestData:               latestData,
        LatestDate:               latestDate,
        LinearDailyData:          linear5DaysData,
    }
    c.HTML(http.StatusOK, StockSummaryTemplate, data)
}

func (s *server) fetchStockTradingData(ticker string, X int) (
    string,
    alphavantage.DailyData,
    []alphavantage.LinearTimeSeriesDaily,
    error,
) {
    // See if we can fetch data from alpha vantage about the stock
    tradingData, err := s.dependencies.AlphaVantage.FetchStockTradingData(ticker)
    if err != nil {
        fmt.Printf("Error when fetching trading data for %s, error is: %s\n", ticker, err)
        return "", alphavantage.DailyData{}, nil, err
    }

    latestDate := tradingData.LatestDate()
    if k, ok := tradingData.TimeSeriesDaily[latestDate]; ok {
        return latestDate, k, tradingData.SplitByXDates(X), nil
    }
    return "", alphavantage.DailyData{}, nil, errors.New(fmt.Sprintf("Hmm, did not find lastData for %s when combing through %+v\n", latestDate, tradingData))
}

func (s *server) mappedHoldings(holdings []models.LETFHolding) map[string][]models.LETFHolding {