diff --git a/filter.go b/filter.go index 68ae446..0cd77f5 100644 --- a/filter.go +++ b/filter.go @@ -63,7 +63,7 @@ func (filter *Filter) Apply(stocks []Stock) []Stock { values["avgVolume"] = stringToNumber(stock.AvgVolume) values["pe"] = stringToNumber(stock.PeRatio) values["peX"] = stringToNumber(stock.PeRatioX) - values["advancing"] = stock.Advancing // Remains bool. + values["direction"] = stock.Direction // Remains int. result, err := filter.profile.filterExpression.Evaluate(values) diff --git a/layout.go b/layout.go index e7549b4..4d88d2e 100644 --- a/layout.go +++ b/layout.go @@ -146,7 +146,7 @@ func (layout *Layout) prettify(quotes *Quotes) []Stock { // Iterate over the list of stocks and properly format all its columns. // for i, stock := range quotes.stocks { - pretty[i].Advancing = stock.Advancing + pretty[i].Direction = stock.Direction // // Iterate over the list of stock columns. For each column name: // - Get current column value. @@ -222,7 +222,7 @@ func buildQuotesTemplate() *template.Template { {{.Header}} -{{range.Stocks}}{{if .Advancing}}{{end}}{{.Ticker}}{{.LastTrade}}{{.Change}}{{.ChangePct}}{{.Open}}{{.Low}}{{.High}}{{.Low52}}{{.High52}}{{.Volume}}{{.AvgVolume}}{{.PeRatio}}{{.Dividend}}{{.Yield}}{{.MarketCap}}{{.PreOpen}}{{.AfterHours}} +{{range.Stocks}}{{if eq .Direction 1}}{{else if eq .Direction -1}}{{end}}{{.Ticker}}{{.LastTrade}}{{.Change}}{{.ChangePct}}{{.Open}}{{.Low}}{{.High}}{{.Low52}}{{.High52}}{{.Volume}}{{.AvgVolume}}{{.PeRatio}}{{.Dividend}}{{.Yield}}{{.MarketCap}}{{.PreOpen}}{{.AfterHours}} {{end}}` return template.Must(template.New(`quotes`).Parse(markup)) @@ -243,13 +243,13 @@ func group(stocks []Stock) []Stock { current := 0 for _, stock := range stocks { - if stock.Advancing { + if stock.Direction >= 0 { grouped[current] = stock current++ } } for _, stock := range stocks { - if !stock.Advancing { + if stock.Direction < 0 { grouped[current] = stock current++ } diff --git a/yahoo_quotes.go b/yahoo_quotes.go index c2523f6..d4fbe46 100644 --- a/yahoo_quotes.go +++ b/yahoo_quotes.go @@ -22,7 +22,7 @@ const quotesURLv7QueryParts = `&range=1d&interval=5m&indicators=close&includeTim const noDataIndicator = `N/A` // Stock stores quote information for the particular stock ticker. The data -// for all the fields except 'Advancing' is fetched using Yahoo market API. +// for all the fields except 'Direction' is fetched using Yahoo market API. type Stock struct { Ticker string `json:"symbol"` // Stock ticker. LastTrade string `json:"regularMarketPrice"` // l1: last trade. @@ -42,7 +42,7 @@ type Stock struct { MarketCap string `json:"marketCap"` // j3: market cap real time. MarketCapX string `json:"marketCap"` // j1: market cap (fallback when real time is N/A). Currency string `json:"currency"` // String code for currency of stock. - Advancing bool // True when change is >= $0. + Direction int // -1 when change is < $0, 0 when change is = $0, 1 when change is > $0. PreOpen string `json:"preMarketChangePercent,omitempty"` AfterHours string `json:"postMarketChangePercent,omitempty"` } @@ -188,8 +188,13 @@ func (quotes *Quotes) parse2(body []byte) (*Quotes, error) { fmt.Println("-------------------") */ adv, err := strconv.ParseFloat(quotes.stocks[i].Change, 64) + quotes.stocks[i].Direction = 0 if err == nil { - quotes.stocks[i].Advancing = adv >= 0.0 + if adv < 0.0 { + quotes.stocks[i].Direction = -1 + } else if adv > 0.0 { + quotes.stocks[i].Direction = 1 + } } } return quotes, nil @@ -202,7 +207,7 @@ func (quotes *Quotes) parse(body []byte) *Quotes { quotes.stocks = make([]Stock, len(lines)) // // Get the total number of fields in the Stock struct. Skip the last - // Advanicing field which is not fetched. + // Advancing field which is not fetched. // fieldsCount := reflect.ValueOf(quotes.stocks[0]).NumField() - 1 // @@ -226,10 +231,17 @@ func (quotes *Quotes) parse(body []byte) *Quotes { quotes.stocks[i].MarketCap = quotes.stocks[i].MarketCapX } // - // Stock is advancing if the change is not negative (i.e. $0.00 - // is also "advancing"). + // Get the direction of the stock // - quotes.stocks[i].Advancing = (quotes.stocks[i].Change[0:1] != `-`) + adv, err := strconv.ParseFloat(quotes.stocks[i].Change, 64) + quotes.stocks[i].Direction = 0 + if err == nil { + if adv < 0 { + quotes.stocks[i].Direction = -1 + } else if (adv > 0) { + quotes.stocks[i].Direction = 1 + } + } } return quotes