{"id":48357848,"url":"https://github.com/elnkosc/cryptrade","last_synced_at":"2026-04-05T11:34:18.720Z","repository":{"id":39719450,"uuid":"251040470","full_name":"elnkosc/cryptrade","owner":"elnkosc","description":"Python library and tool to trade on crypto exchanges: Coinbase Pro, Binance, Kraken,  and Bitfinex using a uniform interface.","archived":false,"fork":false,"pushed_at":"2023-02-08T00:52:11.000Z","size":118,"stargazers_count":3,"open_issues_count":3,"forks_count":1,"subscribers_count":1,"default_branch":"github","last_synced_at":"2025-10-02T10:09:05.830Z","etag":null,"topics":["binance","bitcoin","cryptocurrency","exchange","trading"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/elnkosc.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-03-29T13:37:00.000Z","updated_at":"2022-02-14T22:05:15.000Z","dependencies_parsed_at":"2023-01-24T10:15:34.350Z","dependency_job_id":null,"html_url":"https://github.com/elnkosc/cryptrade","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/elnkosc/cryptrade","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elnkosc%2Fcryptrade","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elnkosc%2Fcryptrade/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elnkosc%2Fcryptrade/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elnkosc%2Fcryptrade/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/elnkosc","download_url":"https://codeload.github.com/elnkosc/cryptrade/tar.gz/refs/heads/github","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elnkosc%2Fcryptrade/sbom","scorecard":{"id":373673,"data":{"date":"2025-08-11","repo":{"name":"github.com/elnkosc/cryptrade","commit":"2c256529e52897dce22927925aa5dcb8ddc8fb01"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.2,"checks":[{"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":"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":"Code-Review","score":0,"reason":"Found 0/16 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":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"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":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/pythonpublish.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":"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/pythonpublish.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/elnkosc/cryptrade/pythonpublish.yml/github?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pythonpublish.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/elnkosc/cryptrade/pythonpublish.yml/github?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/pythonpublish.yml:23","Warn: pipCommand not pinned by hash: .github/workflows/pythonpublish.yml:24","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 pipCommand 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":"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":"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":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'github'"],"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":"Vulnerabilities","score":0,"reason":"37 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2023-120 / GHSA-45c4-8wx5-qw6w","Warn: Project is vulnerable to: PYSEC-2024-24 / GHSA-5h86-8mv2-jq9f","Warn: Project is vulnerable to: GHSA-5m98-qgg9-wh84","Warn: Project is vulnerable to: GHSA-7gpw-8wmc-pm8g","Warn: Project is vulnerable to: GHSA-8495-4g3g-x7pr","Warn: Project is vulnerable to: PYSEC-2024-26 / GHSA-8qpw-xqxj-h4r2","Warn: Project is vulnerable to: GHSA-9548-qrrj-x5pj","Warn: Project is vulnerable to: PYSEC-2023-246 / GHSA-gfw2-4jvh-wgfg","Warn: Project is vulnerable to: GHSA-pjjw-qhg8-p2p9","Warn: Project is vulnerable to: PYSEC-2023-250 / GHSA-q3qx-c6g2-7pw2","Warn: Project is vulnerable to: PYSEC-2023-251 / GHSA-qvrw-v9rv-5rjx","Warn: Project is vulnerable to: PYSEC-2023-247 / GHSA-xx9p-xxvh-7g8j","Warn: Project is vulnerable to: PYSEC-2022-42986 / GHSA-43fp-rhv2-5gv8","Warn: Project is vulnerable to: PYSEC-2023-135 / GHSA-xqr8-7jwr-rhp7","Warn: Project is vulnerable to: GHSA-3ww4-gg4f-jr7f","Warn: Project is vulnerable to: GHSA-5cpq-8wj7-hf2v","Warn: Project is vulnerable to: GHSA-9v9h-cgj8-h64p","Warn: Project is vulnerable to: PYSEC-2023-254 / GHSA-jfhm-5ghh-2f97","Warn: Project is vulnerable to: GHSA-jm77-qphf-c4w8","Warn: Project is vulnerable to: GHSA-v8gr-m533-ghj9","Warn: Project is vulnerable to: GHSA-w7pp-m8wf-vj6r","Warn: Project is vulnerable to: GHSA-x4qr-2fvf-3mr5","Warn: Project is vulnerable to: PYSEC-2024-60 / GHSA-jjg7-2v4v-x38h","Warn: Project is vulnerable to: GHSA-m87m-mmvp-v9qm","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2023-74 / GHSA-j8r2-6x86-q33q","Warn: Project is vulnerable to: PYSEC-2022-195 / GHSA-c2jg-hw38-jrqq","Warn: Project is vulnerable to: GHSA-c8m8-j448-xjx7","Warn: Project is vulnerable to: PYSEC-2024-75 / GHSA-cf56-g6w6-pqq2","Warn: Project is vulnerable to: PYSEC-2022-160 / GHSA-rv6r-3f5q-9rgx","Warn: Project is vulnerable to: GHSA-vg46-2rrj-3647","Warn: Project is vulnerable to: PYSEC-2023-224 / GHSA-xc8x-vp79-p3wm","Warn: Project is vulnerable to: GHSA-34jh-p97f-mpxf","Warn: Project is vulnerable to: PYSEC-2023-212 / GHSA-g4mx-q9vg-27p4","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v","Warn: Project is vulnerable to: PYSEC-2023-192 / GHSA-v845-jxx5-vc9f"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 14 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T13:36:31.057Z","repository_id":39719450,"created_at":"2025-08-18T13:36:31.057Z","updated_at":"2025-08-18T13:36:31.057Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31434624,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T08:13:15.228Z","status":"ssl_error","status_checked_at":"2026-04-05T08:13:11.839Z","response_time":75,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["binance","bitcoin","cryptocurrency","exchange","trading"],"created_at":"2026-04-05T11:34:18.032Z","updated_at":"2026-04-05T11:34:18.712Z","avatar_url":"https://github.com/elnkosc.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Writing your own crypto-trade bot is easy now!\n\ncryptrade is a project that offers a a high level abstraction of a crypto-currency trade API. It offers classes for:\n* Accounts, holding both fiat currency (EUR, USD, etc) as well as crypto currencies (BTH, ETH, etc)\n* Products, representing what you can actually trade on a crypto exchange, eg. BTC-EUR (buy BTC pay in EUR) or ETH-BTC (buy ETH pay in BTC)\n* Currencies, representing fiat and crypro currencies and their IDs used by exchanges\n* Orders, the actual trade (buying or selling) of crypto currency\n* Tickers, providing 'real-time' info on market-price and bid/ask prices\n\nThe (abstract) exchange interfaces provide the basic validations needed to successfully trade on an online exchange, make the necessary API calls, and handle the responses. To make the underlying exchange transparent, the API is provided using an Abstract Factory pattern. \n\nOn top of this, classes are provided for:\n* Ticker, Account, and Order monitoring (implemented using the Observer pattern)\n* Transactions, representing the total of buying/selling transactions\n* Logger, providing logging classes for logging to console, file, and through PushBullet. These classes are implemented as Singletons.\n\nAt this moment, the following crypto exchanges are supported:\n* Coinbase Pro (http://pro.coinbase.com), formerly known as GDAX\n* Binance (http://binance.com)\n* Kraken (http://www.kraken.com)\n* Bitfinex (http://bitfinex.com)\n\nThe interfaces can be used in a synchronous manner, however they also include asynchronous interfaces so it is possible to make use of the asyncio package for cooperative multitasking using an event-loop.\n\nTwo sample programs are included:\n* cryptrade.py, a sample program that shows the usage of this package. It's operation can be directed using commandline parameters. It will trade according a very simple algorithm.\n~~~~\nusage: cryptrade.py [-h] [-c {eur,btc}] [-d TRADE_DELTA] [-a TRADE_AMOUNT]\n                    exchange currency\n\npositional arguments:\n  exchange              Exchange to trade on. Currently supported: coinbase,\n                        binance, kraken, bitfinex\n  currency              Currency to trade in: btc, eth, xrp, ltc, bch, ...\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -c CURRENCY, --currency CURRENCY\n                        (Crypto) currency to use for buying.\n  -d TRADE_DELTA, --delta TRADE_DELTA\n                        Percentage (0.0 \u003c trade \u003c 100.0) by which market price\n                        should change before making a trade (accepts\n                        fractional numbers).\n  -a TRADE_AMOUNT, --amount TRADE_AMOUNT\n                        Initial amount to start trading with (btc\u003e=0.001,\n                        eth\u003e=0.01, xrp\u003e=1, ltc=0.1).\n~~~~\n* tickermonitor.py, shows how the asynchronous interfaces can be used by implementing a tickermonitor for all supported exchanges in parallel.\n\nMake sure you provide your credentials (API key \u0026 secret) before using it. They should be stored in a json file like:\n~~~~\n{\n    \"coinbase\" : \n     {\n        \"api_key\" : \"your api key\",\n        \"api_secret\" : \"your api secret\",\n        \"api_pass\" : \"you api password\"\n    },\n    \"binance\" :\n    {\n        \"api_key\" : \"your api key\",\n        \"api_secret\" : \"your api secret\"\n    },\n    \"kraken\" :\n    {\n        \"api_key\" : \"your api key\",\n        \"api_secret\" : \"your api secret\"\n    },\n    \"bitfinex\" :\n    {\n        \"api_key\" : \"your api key\",\n        \"api_secret\" : \"your api secret\"\n    },\n    \"pushbullet\" :\n    {\n        \"api_key\" : \"your api key\"\n    }\n}\n~~~~\n\nThe cryptrade module contains the following packages:\n* logging (logging interfaces)\n* parameters (interfaces for dealing with -commandline- parameters)\n* exceptions (containing module-specific exceptions)\n* observers (containing base classes for observables and observers)\n* exchange_api (containing the abstract interface for trading)\n* monitor (containing monitoring classes using asyncio)\n* binance (containing concrete implementation for Binance)\n* bitfinex (containing concrete implementation for Bitfinex)\n* kraken (containing concrete implementation for Kraken)\n* coinbase (containing concrete implementation for Coinbase Pro)\n\nThis project uses the official python interface for [binance.com](http://python-binance.readthedocs.io/en/latest) as well as the 'unofficial' python interface for [Coinbase Pro](https://github.com/danpaquin/coinbasepro-python) by Daniel Paquin, the official python interface for [Kraken.com](https://github.com/veox/python3-krakenex), and the official python interface from [bitfinex.com](https://github.com/bitfinexcom/bitfinex-api-py).\n\nSpecial requests or questions: send me a message!\n\nWant to stimulate the ongoing development? Your BTCs are welcome! Send them to bitcoin:15pqCjD7pPPraGJ8T4yfbkrtFTBX8M4jyw\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felnkosc%2Fcryptrade","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felnkosc%2Fcryptrade","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felnkosc%2Fcryptrade/lists"}