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 {
var help bool
var total bool
var percentChange24H bool
var noCache bool
var noHeader bool
var config string
@ -39,13 +40,23 @@ func HoldingsCmd() *cobra.Command {
return err
}
if total {
return ct.PrintTotalHoldings(&cointop.TablePrintOptions{
HumanReadable: humanReadable,
Format: format,
Filter: filter,
Convert: convert,
})
if total || percentChange24H {
if percentChange24H {
return ct.PrintHoldings24HChange(&cointop.TablePrintOptions{
HumanReadable: humanReadable,
Format: format,
Filter: filter,
Convert: convert,
})
}
if total {
return ct.PrintHoldingsTotal(&cointop.TablePrintOptions{
HumanReadable: humanReadable,
Format: format,
Filter: filter,
Convert: convert,
})
}
}
return ct.PrintHoldingsTable(&cointop.TablePrintOptions{
@ -62,7 +73,8 @@ func HoldingsCmd() *cobra.Command {
}
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(&humanReadable, "human", "h", humanReadable, "Human readable output")
holdingsCmd.Flags().BoolVarP(&noHeader, "no-header", "", noHeader, "Don't display header columns")

@ -588,14 +588,15 @@ func (ct *Cointop) RefreshPortfolioCoins() error {
// TablePrintOptions are options for ascii table output.
type TablePrintOptions struct {
SortBy string
SortDesc bool
HumanReadable bool
Format string
Filter []string
Cols []string
Convert string
NoHeader bool
SortBy string
SortDesc bool
HumanReadable bool
Format string
Filter []string
Cols []string
Convert string
NoHeader bool
PercentChange24H bool
}
// outputFormats is list of valid output formats
@ -814,9 +815,9 @@ func (ct *Cointop) PrintHoldingsTable(options *TablePrintOptions) error {
return nil
}
// PrintTotalHoldings prints the total holdings amount
func (ct *Cointop) PrintTotalHoldings(options *TablePrintOptions) error {
ct.debuglog("printTotalHoldings()")
// PrintHoldingsTotal prints the total holdings amount
func (ct *Cointop) PrintHoldingsTotal(options *TablePrintOptions) error {
ct.debuglog("PrintHoldingsTotal()")
if options == nil {
options = &TablePrintOptions{}
}
@ -888,6 +889,86 @@ func (ct *Cointop) PrintTotalHoldings(options *TablePrintOptions) error {
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
func (ct *Cointop) GetPortfolioCoinIndex(coin *Coin) int {
coins := ct.GetPortfolioSlice()

Loading…
Cancel
Save