{"id":23640099,"url":"https://github.com/logan169/pywhale","last_synced_at":"2025-09-18T22:33:45.884Z","repository":{"id":57458511,"uuid":"91912216","full_name":"logan169/PyWhale","owner":"logan169","description":"Python3 wrapper for whaleclub trading exchange rest api","archived":false,"fork":false,"pushed_at":"2020-07-09T17:25:56.000Z","size":670,"stargazers_count":17,"open_issues_count":0,"forks_count":4,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-08-27T07:45:14.987Z","etag":null,"topics":["bitcoin","dash","python3","rest-api","trading","trading-api","whaleclub","whaleclub-api","wrapper-api"],"latest_commit_sha":null,"homepage":"","language":"Python","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/logan169.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-05-20T19:40:57.000Z","updated_at":"2023-01-14T16:42:28.000Z","dependencies_parsed_at":"2022-09-09T23:00:38.830Z","dependency_job_id":null,"html_url":"https://github.com/logan169/PyWhale","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/logan169/PyWhale","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logan169%2FPyWhale","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logan169%2FPyWhale/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logan169%2FPyWhale/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logan169%2FPyWhale/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/logan169","download_url":"https://codeload.github.com/logan169/PyWhale/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logan169%2FPyWhale/sbom","scorecard":{"id":597046,"data":{"date":"2025-08-11","repo":{"name":"github.com/logan169/PyWhale","commit":"88f8c4906e19b802a96f94cbf558590f243feeb1"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"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":"Code-Review","score":0,"reason":"Found 2/23 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":"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":"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":-1,"reason":"No tokens found","details":null,"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":"Dangerous-Workflow","score":-1,"reason":"no workflows found","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":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"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":"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"}},{"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":"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 '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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 11 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-20T23:23:38.228Z","repository_id":57458511,"created_at":"2025-08-20T23:23:38.228Z","updated_at":"2025-08-20T23:23:38.228Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275844454,"owners_count":25538991,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-18T02:00:09.552Z","response_time":77,"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","dash","python3","rest-api","trading","trading-api","whaleclub","whaleclub-api","wrapper-api"],"created_at":"2024-12-28T08:31:55.849Z","updated_at":"2025-09-18T22:33:45.520Z","avatar_url":"https://github.com/logan169.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Alt text](/picts/whale2.png?raw=true \"pywhale logo\")\n\n## __:whale: Python3 wrapper for whaleclub REST api:__\n\nPyWhale is a python3 wrapper for [whaleclub.co REST api](http://docs.whaleclub.co/#overview). [Whaleclub.co](https://whaleclub.co/) in addition of offering a demo mode for newcomers, is a great trading exchange platform having one of the best UI and support service I've saw so far. \n\nPyWhale was created to keep things as simple and intuitive as possible while performing complex requests to REST api. It contains all functions available in [whaleclub.co REST api documentation](http://docs.whaleclub.co/#overview) allowing user to get simultaniously up to 5 markets price, place live or turbo trades, easily switch between real/demo mode or BTC/DASH trading and much more. For better user experience, I've took the liberty to reformat whaleclub.co api functions documentation into functions doc string so one could access all relevants informations directly.\n\nAs far as I know, PyWhale is the only alternative language available if you can't (or just do not want to) use the javascript wrapper in order to interact with whaleclub REST api. \n\nPyWhale was born from a collaboration between Charles Smith an hobbyist trader and Logan Schwartz a programer with the idea of using it as a based to create our trading bots. We then decided to share it with the community as we do believe that there is great minds out there that could had made a profitable use of it.\n\n## __Dependencies:__\n\n* Requests\n* Statistics\n\n## __Installation:__\n    $ pip3 install pywhale\n\n## __How to use it:__\n\nAfter creating an account (just click on above referral links if you don't have one yet), get your API token from your API Settings panel which is available from the top right menu in your trading dashboard. You get one token for live trading and another for demo trading for each BTC/DASH cryptocurrencies.\n\nThen copy/paste each api key in the respective following files:\n\n- {pywhale installation folder}/api_keys/BTC_demo_key.txt\n- {pywhale installation folder}/api_keys/BTC_real_key.txt\n- {pywhale installation folder}/api_keys/DASH_demo_key.txt\n- {pywhale installation folder}/api_keys/DASH_real_key.txt\n- {pywhale installation folder}/api_keys/ETH_real_key.txt\n- {pywhale installation folder}/api_keys/LTC_real_key.txt\n\nif you don't know your \"pywhale installation folder\", you could find it in an error message by typing in a ipython3 terminal\n\n    $ from pywhale.PyWhale import PyWhale\n\n##### __*Beware to not invert api key, this step is critical so I strongly advise that you check that part twice.*__\n\n## __Usage:__\n\n##### __Lets do some Whaly stuff:__\n    \n    $ from pywhale.PyWhale import PyWhale\n    $ pw = PyWhale()  \n    \n![Alt text](/picts/pw.jpg?raw=true \"pywhale logo\")\n\n##### __See all available PyWhale functions:__\n\n    $ pw.help()\n    \n![Alt text](/picts/help.jpg?raw=true \"pywhale logo\")\n\n##### __See all relevants functions informations and input parameters:__\n\n    $ print (pw.function_name.__doc__)\n    \n![Alt text](/picts/balance.jpg?raw=true \"pywhale logo\")\n\n\n##### __Switch between real/demo mode \u0026 BTC/DASH trading:__\n\nIn PyWhale, you could easily switch between real/demo mode \u0026 BTC/DASH trading by directly passing key value in function inputs so you don't have to memorize several functions to do the same thing for each mode.\n\n###### __Possible key values:__\n\n- 'BTC_real_key'\n- 'BTC_demo_key'\n- 'DASH_real_key'\n- 'DASH_demo_key'\n- 'ETH_real_key'\n- 'LTC_real_key'\n\n###### __Examples:__\n\n    # Create a new turbo position for DASH demo mode\n    $ pw.createNewTurboPosition(market='BTC-USD',position_direction='long',position_type='5min',size=100000,key='DASH_demo_key')\n\n![Alt text](/picts/passing_key.jpg?raw=true \"pywhale logo\")\n\nThe previous approach works well if you want to change real/demo mode \u0026 BTC/DASH trading punctually, but if you have planned just trading using only one mode this could get quickly tedious. For this reason, I've set a default_key attribute that could be changed once and will be then used automatically as the default key parameter value while calling further functions. \n\nIn other words, if you don't pass a key parameter value while calling a function, default.key attribute value will be used.\nYou should note that after creating a PyWhale instance, default_key attribute value is 'BTC_demo_key' so you could safely call functions without any fears of using your real balance from starts.\n\n    # Display actual default_key attribute\n    $ pw.default_key\n    \n    # Change default_key attribute\n    $ pw.default_key = 'DASH_demo_key'\n    \n![Alt text](/picts/default_key.jpg?raw=true \"pywhale logo\")\n\n\n##### __Want just ipython output?:__\n\n$ pw.verbose = False\n\n![Alt text](/picts/verbose.jpg?raw=true \"pywhale logo\")\n\n## Contributors:\n\n- Charles Smith\n- xmatthias\n- lepeuvedic\n    \n## __License__:\n\nGNU Lesser General Public\n\n2017 Logan Schwartz logan1691987@gmail.com\n\npywhale is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n\npywhale is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogan169%2Fpywhale","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flogan169%2Fpywhale","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogan169%2Fpywhale/lists"}