Add 24H% change to holdings command

pull/133/head
Miguel Mota 3 years ago
parent f127de3048
commit baacfbd9ca
No known key found for this signature in database
GPG Key ID: 67EC1161588A00F9

@ -11,6 +11,7 @@ import (
func HoldingsCmd() *cobra.Command { func HoldingsCmd() *cobra.Command {
var help bool var help bool
var total bool var total bool
var percentChange24H bool
var noCache bool var noCache bool
var noHeader bool var noHeader bool
var config string var config string
@ -39,14 +40,24 @@ func HoldingsCmd() *cobra.Command {
return err return err
} }
if total || percentChange24H {
if percentChange24H {
return ct.PrintHoldings24HChange(&cointop.TablePrintOptions{
HumanReadable: humanReadable,
Format: format,
Filter: filter,
Convert: convert,
})
}
if total { if total {
return ct.PrintTotalHoldings(&cointop.TablePrintOptions{ return ct.PrintHoldingsTotal(&cointop.TablePrintOptions{
HumanReadable: humanReadable, HumanReadable: humanReadable,
Format: format, Format: format,
Filter: filter, Filter: filter,
Convert: convert, Convert: convert,
}) })
} }
}
return ct.PrintHoldingsTable(&cointop.TablePrintOptions{ return ct.PrintHoldingsTable(&cointop.TablePrintOptions{
SortBy: sortBy, SortBy: sortBy,
@ -62,7 +73,8 @@ func HoldingsCmd() *cobra.Command {
} }
holdingsCmd.Flags().BoolVarP(&help, "help", "", help, "Help for holdings") holdingsCmd.Flags().BoolVarP(&help, "help", "", help, "Help for holdings")
holdingsCmd.Flags().BoolVarP(&total, "total", "t", total, "Show total only") holdingsCmd.Flags().BoolVarP(&total, "total", "t", total, "Show portfolio total only")
holdingsCmd.Flags().BoolVarP(&percentChange24H, "24h", "", percentChange24H, "Show portfolio 24H change only")
holdingsCmd.Flags().BoolVarP(&noCache, "no-cache", "", noCache, "No cache") holdingsCmd.Flags().BoolVarP(&noCache, "no-cache", "", noCache, "No cache")
holdingsCmd.Flags().BoolVarP(&humanReadable, "human", "h", humanReadable, "Human readable output") holdingsCmd.Flags().BoolVarP(&humanReadable, "human", "h", humanReadable, "Human readable output")
holdingsCmd.Flags().BoolVarP(&noHeader, "no-header", "", noHeader, "Don't display header columns") holdingsCmd.Flags().BoolVarP(&noHeader, "no-header", "", noHeader, "Don't display header columns")

@ -596,6 +596,7 @@ type TablePrintOptions struct {
Cols []string Cols []string
Convert string Convert string
NoHeader bool NoHeader bool
PercentChange24H bool
} }
// outputFormats is list of valid output formats // outputFormats is list of valid output formats
@ -814,9 +815,9 @@ func (ct *Cointop) PrintHoldingsTable(options *TablePrintOptions) error {
return nil return nil
} }
// PrintTotalHoldings prints the total holdings amount // PrintHoldingsTotal prints the total holdings amount
func (ct *Cointop) PrintTotalHoldings(options *TablePrintOptions) error { func (ct *Cointop) PrintHoldingsTotal(options *TablePrintOptions) error {
ct.debuglog("printTotalHoldings()") ct.debuglog("PrintHoldingsTotal()")
if options == nil { if options == nil {
options = &TablePrintOptions{} options = &TablePrintOptions{}
} }
@ -888,6 +889,86 @@ func (ct *Cointop) PrintTotalHoldings(options *TablePrintOptions) error {
return nil return nil
} }
// PrintHoldings24HChange prints the total holdings amount
func (ct *Cointop) PrintHoldings24HChange(options *TablePrintOptions) error {
ct.debuglog("PrintHoldings24HChange()")
if options == nil {
options = &TablePrintOptions{}
}
if err := ct.SetCurrencyConverstion(options.Convert); err != nil {
return err
}
ct.RefreshPortfolioCoins()
humanReadable := options.HumanReadable
format := options.Format
filter := options.Filter
portfolio := ct.GetPortfolioSlice()
total := ct.GetPortfolioTotal()
var percentChange24H float64
for _, entry := range portfolio {
if len(filter) > 0 {
found := false
for _, item := range filter {
item = strings.ToLower(strings.TrimSpace(item))
if strings.ToLower(entry.Symbol) == item || strings.ToLower(entry.Name) == item {
found = true
break
}
}
if !found {
continue
}
}
n := ((entry.Balance / total) * entry.PercentChange24H)
if math.IsNaN(n) {
continue
}
percentChange24H += n
}
value := strconv.FormatFloat(percentChange24H, 'f', -1, 64)
if humanReadable {
value = fmt.Sprintf("%.2f%%", percentChange24H)
} else {
value = fmt.Sprintf("%.2f", percentChange24H)
}
if format == "csv" {
csvWriter := csv.NewWriter(os.Stdout)
if err := csvWriter.Write([]string{"24H%"}); err != nil {
return err
}
if err := csvWriter.Write([]string{value}); err != nil {
return err
}
csvWriter.Flush()
if err := csvWriter.Error(); err != nil {
return err
}
return nil
} else if format == "json" {
obj := map[string]string{"24H%": value}
output, err := json.Marshal(obj)
if err != nil {
return err
}
fmt.Println(string(output))
return nil
}
fmt.Println(value)
return nil
}
// GetPortfolioCoinIndex returns the row index of coin in portfolio // GetPortfolioCoinIndex returns the row index of coin in portfolio
func (ct *Cointop) GetPortfolioCoinIndex(coin *Coin) int { func (ct *Cointop) GetPortfolioCoinIndex(coin *Coin) int {
coins := ct.GetPortfolioSlice() coins := ct.GetPortfolioSlice()

Loading…
Cancel
Save