2024-07-17 19:51:13 +00:00
|
|
|
<!--- WARNING --->
|
|
|
|
<!--- THIS IS AN AUTO-GENERATED FILE --->
|
|
|
|
<!--- MANUAL CHANGES CAN AND WILL BE OVERWRITTEN --->
|
|
|
|
|
2024-08-02 15:17:30 +00:00
|
|
|
<p align="center"><img src="./logo.png" /></p><p align="center"><i>Crypto Seller, I am going into finance, and I want only your strongest tokens.</i></p>
|
2024-08-02 15:11:57 +00:00
|
|
|
|
2024-11-28 20:03:50 +00:00
|
|
|
# Automatic Crypto Seller
|
2024-07-17 19:51:13 +00:00
|
|
|
|
2024-11-28 22:28:50 +00:00
|
|
|
![Test program/library](https://gitfub.space/Jmaa/crypto-seller/actions/workflows/python-test.yml/badge.svg) ![Codequality (Ruff)](https://gitfub.space/Jmaa/crypto-seller/actions/workflows/python-ruff.yml/badge.svg)
|
2024-07-22 15:02:15 +00:00
|
|
|
|
2024-07-22 22:47:49 +00:00
|
|
|
This program is a wrapper around
|
|
|
|
[`fin_depo`](https://gitfub.space/Jmaa/fin-depo/) for automatically trading
|
|
|
|
one-way trades, by using repeated trades over a period. Can be used to slowly
|
|
|
|
enter or exit positions, for example low-volume crypto currencies, or as an
|
|
|
|
automated investment savings system.
|
2024-07-22 15:02:15 +00:00
|
|
|
|
|
|
|
Supported sites:
|
|
|
|
|
|
|
|
- [KuCoin](https://www.kucoin.com/): Online crypto-currency exchange.
|
|
|
|
|
|
|
|
## Installation
|
|
|
|
|
|
|
|
Install dependencies:
|
|
|
|
|
|
|
|
```shell
|
|
|
|
pip install -r requirements.txt
|
|
|
|
```
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
2024-07-22 22:47:49 +00:00
|
|
|
1. Create configuration file. See below and in `examples/` folder for inspiration.
|
|
|
|
2. [Create KuCoin API key](https://www.kucoin.com/account/api) with **General**
|
|
|
|
and **Spot Trading** permissions.
|
|
|
|
3. Add KuCoin API key secrets (`KUCOIN_KEY`, `KUCOIN_SECRET`, `KUCOIN_PASS`) to
|
|
|
|
an [`secret_loader` accessible
|
|
|
|
location](https://gitfub.space/Jmaa/secret_loader#user-content-accessible) .
|
|
|
|
4. Run script using `python -m crypto_seller --config CONFIG_FILE`.
|
2024-07-22 15:02:15 +00:00
|
|
|
|
|
|
|
The script will now automatically sell assets over time. The interval between
|
|
|
|
sell-offs are randomized to avoid front-running, and the amounts are also
|
2024-07-22 22:47:49 +00:00
|
|
|
randomized to avoid certain attacks (only relevant for smallish intervals of
|
|
|
|
less than a week).
|
2024-07-22 15:02:15 +00:00
|
|
|
|
|
|
|
The log will both be displayed in the shell, and be placed in a log file
|
|
|
|
`output/log.txt`. Every sell-off will be logged to the `output/trades.csv`
|
|
|
|
file, with as much information as possible. Keep both of these for tax
|
|
|
|
purposes, if relevant.
|
|
|
|
|
2024-07-22 22:47:49 +00:00
|
|
|
## Configuration
|
|
|
|
|
|
|
|
Example configurations can be found in the `examples/` folder.
|
|
|
|
|
|
|
|
Configurations are `.json` files, with the following fields:
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"input_asset": str,
|
|
|
|
"output_asset": str,
|
|
|
|
"input_amount_low": float,
|
|
|
|
"input_amount_high": float,
|
|
|
|
"interval_minutes_low": int,
|
|
|
|
"interval_minutes_high": int
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
While `input_amount_low` and `input_amount_high` can be identical (and
|
|
|
|
the same for `interval_minutes_XX`) it is discouraged, to avoid frontrunning attacks.
|
|
|
|
|
2024-07-22 15:02:15 +00:00
|
|
|
## Auditing information
|
|
|
|
|
2024-07-22 22:47:49 +00:00
|
|
|
As mentioned before, this program is mostly glue code and wrappering around
|
|
|
|
library functionality. The glue application code allows for running the main
|
|
|
|
loop of checking balance, selling amount and sleeping until the next iteration,
|
|
|
|
with some argument and configuration parsing thrown in.
|
|
|
|
|
2024-07-22 15:02:15 +00:00
|
|
|
The most relevant libraries for auditing are:
|
|
|
|
|
|
|
|
- [`fin_depo`](https://gitfub.space/Jmaa/fin-depo): Library for programmatic
|
|
|
|
fetching of depository assets and in some cases allows for order placement.
|
|
|
|
This is the library that reads balances and places market orders.
|
|
|
|
- [`fin_defs`](https://gitfub.space/Jmaa/fin-defs): Definitions of financial
|
|
|
|
assets and instruments. Used by `fin_depo`.
|
2024-07-22 22:47:49 +00:00
|
|
|
- [`secret_loader`](https://gitfub.space/Jmaa/secret_loader): Library for
|
|
|
|
loading of secrets (passwords, API keys, secret keys, configuration files,
|
|
|
|
etc.) from standardized locations.
|
|
|
|
- [`python-kucoin`](https://python-kucoin.readthedocs.io/en/latest/): Used by
|
|
|
|
`fin_depo` to provide KuCoin backend.
|
2024-07-22 15:02:15 +00:00
|
|
|
|
|
|
|
## Taxation
|
|
|
|
|
|
|
|
Some parts of the world suffers from weird and draconian taxation rules on
|
|
|
|
cryptocurrencies, so it helps to keep track of the relevant trading
|
|
|
|
information.
|
|
|
|
|
|
|
|
As mentioned above, keep (and backup) both the log file (`output/log.txt`) and
|
|
|
|
the trades file (`output/trades.csv`).
|
|
|
|
|
|
|
|
To help with tax reporting, it might be useful to sign up to tax oriented
|
|
|
|
websites. For example, [CryptoSkat](https://cryptoskat.dk/) seems to be the
|
|
|
|
most mature on the danish market, and does support KuCoin.
|
|
|
|
|
|
|
|
## TODO
|
|
|
|
|
2024-12-02 17:24:01 +00:00
|
|
|
- [X] Allow multiple secrets configs
|
|
|
|
- [X] Allow multiple output directories
|
|
|
|
- [X] Fix `TimeoutError` issue occuring from slow Kucoin endpoint. Might
|
|
|
|
require implementing own kucoin backend in `fin_depo`.
|
|
|
|
- [X] Ensure that a failure during selling results in a safe winding down of the system.
|
|
|
|
* Catch runtime errors when selling
|
|
|
|
* Show status
|
|
|
|
* Show errors to log.
|
|
|
|
* Stop loop and exit with results, and error indicator.
|
|
|
|
- [X] Present an overview of what the script will be doing
|
|
|
|
* Sell what for what? How much, how often?
|
|
|
|
* Give an estimate of how long it will take.
|
|
|
|
* Wait 20 seconds before starting, to allow the user to review.
|
|
|
|
- [X] Document command-line arguments
|
2024-07-22 22:47:49 +00:00
|
|
|
- [X] Document configuration
|
|
|
|
- [X] Document code auditing
|
2024-07-22 21:39:10 +00:00
|
|
|
- [X] Parse configuration from json.
|
2024-07-22 15:02:15 +00:00
|
|
|
- [X] Ensure sell time is included in order details
|
|
|
|
- [X] Log all trades to CSV file.
|
|
|
|
- [X] Collect information during the run and output after run
|
|
|
|
|
2024-10-01 07:32:39 +00:00
|
|
|
## Dependencies
|
|
|
|
|
|
|
|
All requirements can be installed easily using:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
pip install -r requirements.txt
|
|
|
|
```
|
|
|
|
|
|
|
|
Full list of requirements:
|
|
|
|
- [secret_loader](https://gitfub.space/Jmaa/secret_loader)
|
|
|
|
- [fin_defs](https://gitfub.space/Jmaa/fin-defs)
|
|
|
|
- [fin_depo](https://gitfub.space/Jmaa/fin-depo)
|
|
|
|
|
|
|
|
|
|
|
|
## License
|
2024-07-17 19:51:13 +00:00
|
|
|
|
|
|
|
```
|
|
|
|
MIT License
|
|
|
|
|
|
|
|
Copyright (c) 2024 Jon Michael Aanes
|
|
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
|
|
in the Software without restriction, including without limitation the rights
|
|
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
|
|
|
|
The above copyright notice and this permission notice shall be included in all
|
|
|
|
copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
THE 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.
|
|
|
|
```
|