{"id":13393479,"url":"https://github.com/achannarasappa/ticker","last_synced_at":"2026-10-18T23:11:02.184Z","repository":{"id":38178934,"uuid":"332361864","full_name":"achannarasappa/ticker","owner":"achannarasappa","description":"Track stocks, crypto, and derivatives prices and positions in real time from your terminal","archived":false,"fork":false,"pushed_at":"2026-06-28T21:50:24.000Z","size":2383,"stargazers_count":6245,"open_issues_count":34,"forks_count":344,"subscribers_count":62,"default_branch":"master","last_synced_at":"2026-10-10T21:33:12.466Z","etag":null,"topics":["bitcoin","crypto-trading","cryptocurrencies","derivatives","financial-markets","golang","golang-application","stock-market","stock-positions","stocks","stocks-app","terminal","terminal-app","ticker","trading","trading-software","tui"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/achannarasappa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["achannarasappa"]}},"created_at":"2021-01-24T03:50:46.000Z","updated_at":"2026-10-10T09:21:33.000Z","dependencies_parsed_at":"2024-01-30T04:46:39.482Z","dependency_job_id":"643f295d-dacb-42bc-b293-a6accb2d409e","html_url":"https://github.com/achannarasappa/ticker","commit_stats":{"total_commits":332,"total_committers":17,"mean_commits":"19.529411764705884","dds":"0.054216867469879526","last_synced_commit":"d7d0b2ad607fdd6720326945452ead4518b1c508"},"previous_names":[],"tags_count":90,"template":false,"template_full_name":null,"purl":"pkg:github/achannarasappa/ticker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/achannarasappa%2Fticker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/achannarasappa%2Fticker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/achannarasappa%2Fticker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/achannarasappa%2Fticker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/achannarasappa","download_url":"https://codeload.github.com/achannarasappa/ticker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/achannarasappa%2Fticker/sbom","scorecard":{"id":162674,"data":{"date":"2025-08-11","repo":{"name":"github.com/achannarasappa/ticker","commit":"5eca70e9d52832733df87d92c0d99a93eed0785e"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"26 commit(s) and 8 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/close-stale-issue.yaml:1","Warn: no topLevel permission defined: .github/workflows/lint-commit.yml:1","Warn: no topLevel permission defined: .github/workflows/lint.yml:1","Warn: no topLevel permission defined: .github/workflows/release.yml:1","Warn: no topLevel permission defined: .github/workflows/test-contract.yml:1","Warn: no topLevel permission defined: .github/workflows/test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/close-stale-issue.yaml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/close-stale-issue.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint-commit.yml:8: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/lint-commit.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint-commit.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/lint-commit.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:9: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/lint.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:44: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-contract.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/test-contract.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-contract.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/test-contract.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/achannarasappa/ticker/test.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating alpine:3 to alpine:3@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1","Info:   0 out of  12 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   8 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v5.0.5 not signed: https://api.github.com/repos/achannarasappa/ticker/releases/221713144","Warn: release artifact v5.0.4 not signed: https://api.github.com/repos/achannarasappa/ticker/releases/221704213","Warn: release artifact v5.0.3 not signed: https://api.github.com/repos/achannarasappa/ticker/releases/219764265","Warn: release artifact v5.0.2 not signed: https://api.github.com/repos/achannarasappa/ticker/releases/219597106","Warn: release artifact v5.0.1 not signed: https://api.github.com/repos/achannarasappa/ticker/releases/219551181","Warn: release artifact v5.0.5 does not have provenance: https://api.github.com/repos/achannarasappa/ticker/releases/221713144","Warn: release artifact v5.0.4 does not have provenance: https://api.github.com/repos/achannarasappa/ticker/releases/221704213","Warn: release artifact v5.0.3 does not have provenance: https://api.github.com/repos/achannarasappa/ticker/releases/219764265","Warn: release artifact v5.0.2 does not have provenance: https://api.github.com/repos/achannarasappa/ticker/releases/219597106","Warn: release artifact v5.0.1 does not have provenance: https://api.github.com/repos/achannarasappa/ticker/releases/219551181"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/release.yml:10"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-16T13:57:42.866Z","repository_id":38178934,"created_at":"2025-08-16T13:57:42.866Z","updated_at":"2025-08-16T13:57:42.866Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38343411,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-18T02:00:06.448Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bitcoin","crypto-trading","cryptocurrencies","derivatives","financial-markets","golang","golang-application","stock-market","stock-positions","stocks","stocks-app","terminal","terminal-app","ticker","trading","trading-software","tui"],"created_at":"2024-07-30T17:00:53.900Z","updated_at":"2026-10-18T23:11:02.178Z","avatar_url":"https://github.com/achannarasappa.png","language":"Go","funding_links":["https://github.com/sponsors/achannarasappa"],"categories":["Go","Financial","Productivity","tui","Other","Tools","Applications","Uncategorized","金融","Table of Contents","\u003ca name=\"financial\"\u003e\u003c/a\u003eFinancial tools","Relational Databases","金融股票"],"sub_categories":["Search and Analytic Databases","Finance","General Purpose Libraries","Go","Directory Navigation","Uncategorized","检索及分析资料库","Productivity and Organization","Advanced Console UIs","资源传输下载"],"readme":"\u003cp\u003e\n    \u003ca href=\"https://github.com/achannarasappa/ticker/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/achannarasappa/ticker\" alt=\"Latest Release\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/achannarasappa/ticker/actions\"\u003e\u003cimg src=\"https://github.com/achannarasappa/ticker/workflows/test/badge.svg\" alt=\"Build Status\"\u003e\u003c/a\u003e\n    \u003ca href='https://coveralls.io/github/achannarasappa/ticker?branch=master'\u003e\u003cimg src='https://coveralls.io/repos/github/achannarasappa/ticker/badge.svg?branch=master' alt='Coverage Status' /\u003e\u003c/a\u003e\n    \u003ca href='https://goreportcard.com/badge/github.com/achannarasappa/ticker'\u003e\u003cimg src='https://goreportcard.com/badge/github.com/achannarasappa/ticker' alt='Report Card' /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eTicker\u003c/h2\u003e\n\u003cp align=\"center\"\u003e\nTerminal stock \u0026 crypto price watcher and position tracker\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\u003cimg align=\"center\" src=\"./docs/ticker.gif\" /\u003e\n\u003c/p\u003e\n\n## Features\n\n* Live stock \u0026 crypto price quotes\n* Track value of your stock positions\n* Support for multiple cost basis lots\n* Support for pre and post market price quotes\n\n## Install\n\nDownload the pre-compiled binaries from the [releases page](https://github.com/achannarasappa/ticker/releases) and copy to a location in `PATH` or see quick installs below\n\n**homebrew**\n```\nbrew install achannarasappa/tap/ticker\n```\n\n**linux**\n```sh\ncurl -Ls https://api.github.com/repos/achannarasappa/ticker/releases/latest \\\n| grep -wo \"https.*linux-amd64*.tar.gz\" \\\n| wget -qi - \\\n\u0026\u0026 tar -xvf ticker*.tar.gz ticker \\\n\u0026\u0026 chmod +x ./ticker \\\n\u0026\u0026 sudo mv ticker /usr/local/bin/\n```\n\n**windows**\n```\nwinget install -e --id achannarasappa.ticker\n```\n\n**docker**\n```sh\ndocker run -it --rm achannarasappa/ticker\n```\n\nNote: config file can be mounted from the host machine by using a bind mount with `-v ~/.ticker.yaml:/.ticker.yaml`\n\n**snap**\n```sh\nsudo snap install ticker\nsudo snap connect ticker:ticker-config\n```\n\nNote: config file will need to be set with `--config $HOME/ticker.yaml` since Snap does not allow access to dotfiles\n\n### Third-party repositories\nThese repositories are maintained by a third-party and may not have the latest versions available\n\n**MacPorts**\n```\nsudo port selfupdate\nsudo port install ticker\n```\n\n## Quick Start\n\n```sh\nticker -w NET,AAPL,TSLA\n```\n\n## Usage\n|Option Name|Alias|Flag|Default|Description|\n|-------------------|--|-------------------|----------------|-------------------------------------------------|\n|                   |  |--config           |`~/.ticker.yaml`|config file location with watchlist and positions|\n|`interval`         |-i|--interval         |`5`             |Refresh interval in seconds|\n|`watchlist`        |-w|--watchlist        |                |comma separated list of symbols to watch|\n|`show-tags`        |  |--show-tags        |                |display currency, exchange name, and quote delay for each quote |\n|`show-fundamentals`|  |--show-fundamentals|                |display open price, previous close, and day range |\n|`show-separator`   |  |--show-separator   |                |layout with separators between each quote|\n|`show-summary`     |  |--show-summary     |                |show total day change, total value, and total value change|\n|`show-positions`   |  |--show-positions   |                |show positions including weight, average cost, and quantity|\n|`sort`             |  |--sort             |                |sort quotes on the UI - options are change percent (default), `alpha`, `value`, and `user`|\n|`version`          |  |--version          |                |print the current version number|\n|`cache`            |  |--no-cache         |`true`          |cache data retrieved at startup|\n|`debug`            |  |--debug            |                |enable debug logging to `./ticker-log-\u003cdate\u003e.log`|\n\n## Configuration\n\nConfiguration is not required to watch stock price but is helpful when always watching the same stocks. Configuration can also be used to set cost basis lots which will in turn be used to show total gain or loss on any position.\n\n```yaml\n# ~/.ticker.yaml\nshow-summary: true\nshow-tags: true\nshow-fundamentals: true\nshow-separator: true\nshow-positions: true\ninterval: 5\ncurrency: USD\ncurrency-summary-only: false\nwatchlist:\n  - NET\n  - TEAM\n  - ESTC\n  - BTC-USD # Bitcoin price via Yahoo\n  - SOL.X # Solana price via Coinbase\n  - BIT-30MAY25-CDE.CB # Bitcoin futures contract price via Coinbase\nlots:\n  - symbol: \"ABNB\"\n    quantity: 35.0\n    unit_cost: 146.00\n  - symbol: \"ARKW\"\n    quantity: 20.0\n    unit_cost: 152.25\n  - symbol: \"ARKW\"\n    quantity: 20.0\n    unit_cost: 145.35\n    fixed_cost: 7.00 # e.g. brokerage commission fee\ngroups:\n  - name: crypto\n    watchlist:\n      - SHIB-USD\n      - VGX-USD\n    lots:\n      - symbol: SOL1-USD\n        quantity: 17\n        unit_cost: 159.10\n```\n\n* All properties in `.ticker.yaml` are optional\n* Symbols not on the watchlist that exists in `lots` are implicitly added to the watchlist\n* To add multiple cost basis lots (`quantity`, `unit_cost`) for the same `symbol`, include two or more entries - see `ARKW` example above\n* `.ticker.yaml` can be set in user home directory, the current directory, or [XDG config home](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html)\n* Quantities can be negative to represent closed positions (position netting), short positions, borrowed assets, and other concepts\n\n### Display Options\n\nWith  `--show-summary`, `--show-tags`, `--show-fundamentals`, `--show-positions`, and `--show-separator` options set, the layout and information displayed expands:\n\n\u003cimg src=\"./docs/ticker-all-options.png\" /\u003e\n\n### Sorting\n\nIt's possible to set a custom sort order with the `--sort` flag or `sort:` config option with these options:\n\n* Default - change percent with closed markets at the end\n* `alpha` to sort alphabetically by symbol\n* `value` to sort by position value\n* `user` to sort by the order defined in configuration with positions on first then watched symbols\n\n### Groups\n\nWatchlists and lots can be grouped in `.ticker.yml` under the `groups` property. While running `ticker`, press \u003ckbd\u003eTAB\u003c/kbd\u003e to cycle forward through groups or \u003ckbd\u003eSHIFT+TAB\u003c/kbd\u003e to cycle backward.\n\n* If top level `watchlist` or `lots` properties are defined in the configuration file, the entries there will be added to a group named `default` which will always be shown first\n* Ordering is defined by order in the configuration file\n\n### Data Sources \u0026 Symbols\n\n`ticker` pulls market data from a few different sources with Yahoo Finance as the default. Symbols for non default data sources follow the format `\u003csymbol\u003e.\u003csource\u003e` where `\u003csymbol\u003e` is the canonical symbol within that data source and `\u003csource\u003e` is the data source specifier. Below is a list of the supported data sources and their specifiers:\n\n* *none* - symbols with no suffix will default to Yahoo Finance as the data source\n* `.X` - symbols with this suffix are shorthand symbols that are specific to ticker and intended to provide more concise and familiar symbols for popular assets (e.g. using `SOL.X` rather than `SOLANA.CG`)\n  * The full list of ticker symbols can be found [here](https://github.com/achannarasappa/ticker-static/blob/master/symbols.csv). Initial values are populated with the top cryptocurrencies by volume on Coinbase at the time of update\n* `.CB` - symbols with this suffix will use Coinbase as the data source. The symbol can be found by searching for the asset on [Coinbase](https://www.coinbase.com/explore/s/listed) and finding the symbol for the asset. (e.g. for Starknet check the [market page](https://www.coinbase.com/advanced-trade/spot/STRK-USD) to find the symbol `STRK` and set the symbol to `STRK.CB` in ticker).\n\nNote: Coincap (`.CC`) and CoinGecko (`.CG`) are no longer supported after v5.0.0\n\n### Currency Conversion\n\n`ticker` supports converting from the exchange's currency to a local currency. This can be set by setting the `currency` property in `.ticker.yaml` to a [ISO 4217 3-digit currency code](https://docs.1010data.com/1010dataReferenceManual/DataTypesAndFormats/currencyUnitCodes.html).\n\n\u003cimg src=\"./docs/ticker-currency.png\" /\u003e\n\n* When a `currency` is defined, all values are converted including summary, quote, and position\n* Add cost basis lots in the currency of the exchange - these will be converted automatically when `currency` is defined\n* If a `currency` is not set (default behavior) and the `show-summary` option is enabled, the summary will be calculated in USD regardless of the exchange currency to avoid mixing currencies\n* Currencies are retrieved only once at start time - currency exchange rates do fluctuate over time and thus converted values may vary depending on when ticker is started\n* If the `currency-summary-only` is set to `true` and a value is set for `currency`, only the summary values will be converted\n* If `currency-disable-unit-cost-conversion` flag to `true`, currency conversion will not be done when calculating the cost basis. This can be useful for users that purchase a non-US asset and want to use the currency exchange rate at the time of purchase by inputting the unit cost in their local currency (set in `currency`) rather than using the most recent currency exchange rate.\n\n#### Minor currencies\n\n`ticker` supports quotes returned in a currency's minor unit rather than its major unit (e.g. London Stock Exchange listings quoted in pence as `GBp` instead of pounds as `GBP`). Minor unit conversion to major unit behavior can be controlled similarly to the currency conversion feature.\n\nThese are the behaviors for a minor unit quote:\n* No `currency` set (or `currency-summary-only: true`) - per-position values, quote price, and the cost basis are all displayed in the minor unit and cost basis should be set in the minor unit\n* `currency` is set - all displayed values are converted to the major unit. Cost basis should still be entered in the minor unit\n* `currency` is set with `currency-disable-unit-cost-conversion` - displayed values are converted to the major unit and cost basis should be set in the major unit\n\n### Cache\n\n`ticker` caches reference data to single local file shared between sessions and instances of `ticker` to speed up startup. The cache can be disabled with `--no-cache` flag or `cache: false` in `.ticker.yaml`.\n\n### Custom Color Schemes\n\n`ticker` supports setting custom color schemes from the config file. Colors are represented by a [hex triplet](https://en.wikipedia.org/wiki/Web_colors#Hex_triplet). Below is an annotated example config block from `.ticker.yaml` where custom colors are set:\n\n```yaml\n# ~/.ticker.yaml\nwatchlist:\n  - NET\n  - TEAM\n  - ESTC\n  - BTC-USD\ncolors:\n  text: \"#005fff\"\n  text-light: \"#0087ff\"\n  text-label: \"#00d7ff\"\n  text-line: \"#00ffff\"\n  text-tag: \"#005fff\"\n  background-tag: \"#0087ff\"\n```\n\n* Terminals supporting TrueColor will be able to represent the full color space and in other cases colors will be down sampled\n* Any omitted or invalid colors will revert to default color scheme values\n\n### Printing Positions\n\n`ticker` supports printing positions to the terminal as text by using `ticker print`. Output defaults to JSON but CSV output can also be generated by passing the `--format=csv` flag.\n\n```sh\n$ ticker --config=./.ticker.yaml print\n[{\"name\":\"Airbnb, Inc.\",\"symbol\":\"ABNB\",\"price\":164.71,\"value\":16965.13,\"cost\":15038,\"quantity\":103,\"weight\":53.66651978212161},{\"name\":\"Tesla, Inc.\",\"symbol\":\"TSLA\",\"price\":732.35,\"value\":14647,\"cost\":15660,\"quantity\":20,\"weight\":46.33348021787839}]\n```\n\n* Ensure there is at least one lot in the configuration file in order to generate output\n* A specific config file can be specified with the `--config` flag\n\n## Notes\n\n* **Market data delay**\n  * _Yahoo Finance_ - Market data pulled from Yahoo finance will have some lag (\u003c~30s) introduced by intermediary systems and certain exchanges will impose intentional delays on data. NYSE and NASDAQ offer real-time market data but other exchanges may not. Consult the [help article](https://help.yahoo.com/kb/SLN2310.html) on exchange delays to determine which exchanges you can expect delays for or use the `--show-tags` flag to include timeliness of data alongside quotes in `ticker`. Yahoo Finance also relies on polling which introduces some delay (\u003e=5s). `interval` determines the polling frequency.\n  * _Coinbase_ - Market data for spot assets on Coinbase is directly streamed from the exchange through a WebSocket connection and is available in near real-time. Derivatives assets (i.e. symbols with `-CDE` suffix) are polling based however Basis is updated in near real-time based on spot market data changes\n* **Non-US Symbols, Forex, ETFs** - The names for there may differ from their common name/symbols. Try searching the native name in [Yahoo finance](https://finance.yahoo.com/) to determine the symbol to use in `ticker`\n* **Terminal fonts** - Font with support for the [`HORIZONTAL LINE SEPARATOR` unicode character](https://www.fileformat.info/info/unicode/char/23af/fontsupport.htm) is required to properly render separators (`--show-separator` option)\n\n## Integrations\n\n* [alpaca-ticker-config](https://www.npmjs.com/package/alpaca-ticker-config) - Pull [alpaca.markets](https://alpaca.markets) positions into `.ticker.yaml` from the command line\n\n## Development\n\nRunning tests:\n```sh\ngo tool ginkgo -cover ./...\n```\n\nLinting:\n```sh\ngo tool golangci-lint run\n```\n\n## Libraries `ticker` uses\n\n* [bubbletea](https://github.com/charmbracelet/bubbletea) - terminal UI framework\n* [termenv](https://github.com/muesli/termenv) - color and styling for the terminal\n* [term-grid](https://github.com/achannarasappa/term-grid) - grid layout library terminal UIs\n\n## Related Tools\n\n* [tickrs](https://github.com/tarkah/tickrs) - real-time terminal stock ticker with support for graphing, options, and other analysis information\n* [cointop](https://github.com/miguelmota/cointop) - terminal UI tracking cryptocurrencies\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fachannarasappa%2Fticker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fachannarasappa%2Fticker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fachannarasappa%2Fticker/lists"}