From 77fe985ff901fef724af804c6c1400d07631561e Mon Sep 17 00:00:00 2001 From: ai-dev Date: Thu, 16 Jan 2025 00:49:43 +0100 Subject: [PATCH] add freqtrade bot --- freqtrade-NFIx5/.README.j2 | 1 + freqtrade-NFIx5/DOCS.md | 139 ++++++++++++++++++ freqtrade-NFIx5/Dockerfile | 60 ++++++++ freqtrade-NFIx5/build.yaml | 8 + freqtrade-NFIx5/config.yaml | 64 ++++++++ .../etc/s6-overlay/s6-rc.d/fqmbotnfix5/finish | 45 ++++++ .../etc/s6-overlay/s6-rc.d/fqmbotnfix5/run | 56 +++++++ .../etc/s6-overlay/s6-rc.d/fqmbotnfix5/type | 1 + .../s6-rc.d/user/contents.d/fqmbotnfix5 | 0 loki/rootfs/etc/loki/default-config.yaml | 2 +- 10 files changed, 375 insertions(+), 1 deletion(-) create mode 100644 freqtrade-NFIx5/.README.j2 create mode 100644 freqtrade-NFIx5/DOCS.md create mode 100644 freqtrade-NFIx5/Dockerfile create mode 100644 freqtrade-NFIx5/build.yaml create mode 100644 freqtrade-NFIx5/config.yaml create mode 100644 freqtrade-NFIx5/rootfs/etc/s6-overlay/s6-rc.d/fqmbotnfix5/finish create mode 100644 freqtrade-NFIx5/rootfs/etc/s6-overlay/s6-rc.d/fqmbotnfix5/run create mode 100644 freqtrade-NFIx5/rootfs/etc/s6-overlay/s6-rc.d/fqmbotnfix5/type create mode 100644 freqtrade-NFIx5/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/fqmbotnfix5 diff --git a/freqtrade-NFIx5/.README.j2 b/freqtrade-NFIx5/.README.j2 new file mode 100644 index 0000000..fc3e0a4 --- /dev/null +++ b/freqtrade-NFIx5/.README.j2 @@ -0,0 +1 @@ +# Home Assistant Community Add-on: Freqtrade Robot NFI \ No newline at end of file diff --git a/freqtrade-NFIx5/DOCS.md b/freqtrade-NFIx5/DOCS.md new file mode 100644 index 0000000..8d7a662 --- /dev/null +++ b/freqtrade-NFIx5/DOCS.md @@ -0,0 +1,139 @@ +# Home Assistant Community Add-on: Example + +This is an example add-on for Home Assistant. When started, it displays a +random quote every 5 seconds. + +It shows off several features and structures like: + +- Full blown GitHub repository. +- General Dockerfile structure and setup. +- The use of the `config.yaml` and `build.yaml` files. +- General shell scripting structure (`run.sh`). +- Quality assurance using CodeClimate. +- Continuous integration and deployment using GitLab. +- Usage of the Community Home Assistant Add-ons build environment. +- Small use of the Bash function library in our base images. +- The use of Docker label schema. + +## Installation + +The installation of this add-on is pretty straightforward and not different in +comparison to installing any other Home Assistant add-on. + +1. Click the Home Assistant My button below to open the add-on on your Home + Assistant instance. + + [![Open this add-on in your Home Assistant instance.][addon-badge]][addon] + +1. Click the "Install" button to install the add-on. +1. Start the "Example" add-on. +1. Check the logs of the "Example" add-on to see it in action. + +## Configuration + +Eventought this add-on is just an example add-on, it does come with some +configuration options to play around with. + +**Note**: _Remember to restart the add-on when the configuration is changed._ + +Example add-on configuration: + +```yaml +log_level: info +seconds_between_quotes: 5 +``` + +### Option: `log_level` + +The `log_level` option controls the level of log output by the add-on and can +be changed to be more or less verbose, which might be useful when you are +dealing with an unknown issue. Possible values are: + +- `trace`: Show every detail, like all called internal functions. +- `debug`: Shows detailed debug information. +- `info`: Normal (usually) interesting events. +- `warning`: Exceptional occurrences that are not errors. +- `error`: Runtime errors that do not require immediate action. +- `fatal`: Something went terribly wrong. Add-on becomes unusable. + +Please note that each level automatically includes log messages from a +more severe level, e.g., `debug` also shows `info` messages. By default, +the `log_level` is set to `info`, which is the recommended setting unless +you are troubleshooting. + +### Option: `seconds_between_quotes` + +Sets the number of seconds between the output of each quote. The value +must be between `1` and `120` seconds. This value is set to `5` seconds by +default. + +## Changelog & Releases + +This repository keeps a change log using [GitHub's releases][releases] +functionality. + +Releases are based on [Semantic Versioning][semver], and use the format +of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented +based on the following: + +- `MAJOR`: Incompatible or major changes. +- `MINOR`: Backwards-compatible new features and enhancements. +- `PATCH`: Backwards-compatible bugfixes and package updates. + +## Support + +Got questions? + +You have several options to get them answered: + +- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on + support and feature requests. +- The [Home Assistant Discord chat server][discord-ha] for general Home + Assistant discussions and questions. +- The Home Assistant [Community Forum][forum]. +- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit] + +You could also [open an issue here][issue] GitHub. + +## Authors & contributors + +The original setup of this repository is by [Franck Nijhof][frenck]. + +For a full list of all authors and contributors, +check [the contributor's page][contributors]. + +## License + +MIT License + +Copyright (c) 2017-2024 Franck Nijhof + +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. + +[addon-badge]: https://my.home-assistant.io/badges/supervisor_addon.svg +[addon]: https://my.home-assistant.io/redirect/supervisor_addon/?addon=a0d7b954_example&repository_url=https%3A%2F%2Fgithub.com%2Fhassio-addons%2Frepository +[contributors]: https://github.com/hassio-addons/addon-example/graphs/contributors +[discord-ha]: https://discord.gg/c5DvZ4e +[discord]: https://discord.me/hassioaddons +[forum]: https://community.home-assistant.io/t/repository-community-hass-io-add-ons/24705?u=frenck +[frenck]: https://github.com/frenck +[issue]: https://github.com/hassio-addons/addon-example/issues +[reddit]: https://reddit.com/r/homeassistant +[releases]: https://github.com/hassio-addons/addon-example/releases +[semver]: http://semver.org/spec/v2.0.0.html diff --git a/freqtrade-NFIx5/Dockerfile b/freqtrade-NFIx5/Dockerfile new file mode 100644 index 0000000..f471176 --- /dev/null +++ b/freqtrade-NFIx5/Dockerfile @@ -0,0 +1,60 @@ +ARG BUILD_FROM=ghcr.io/hassio-addons/base:17.1.0 +# hadolint ignore=DL3006 +FROM ${BUILD_FROM} + +ENV LANG C.UTF-8 + +# Build arguments +ARG BUILD_ARCH +ARG BUILD_DATE +ARG BUILD_DESCRIPTION +ARG BUILD_NAME +ARG BUILD_REF +ARG BUILD_REPOSITORY +ARG BUILD_VERSION + +# Copy root filesystem +COPY rootfs / + +# Install necessary dependencies +RUN apk add --no-cache git python3 py3-pip curl + +# Set the working directory +WORKDIR /freq + +# Clone the Freqtrade repository +RUN git clone https://github.com/freqtrade/freqtrade.git /freq +# Optionally, switch to the stable branch for novice users +ARG FREQTRADE_BRANCH=stable +RUN git checkout ${FREQTRADE_BRANCH} + +# Make setup script executable +RUN chmod +x ./setup.sh + +# Run the setup script to install dependencies +RUN ./setup.sh -i + +# Activate the virtual environment (implicitly handled in entrypoint or CMD) +RUN echo "source /freq/.venv/bin/activate" >> ~/.bashrc + +RUN source /freq/.venv/bin/activate +RUN pip install --upgrade pip && pip install --user --no-cache-dir --no-build-isolation -r /freqtrade/tests/requirements.txt + +RUN chmod +x /etc/s6-overlay/s6-rc.d/fqmbotnfix5/* + +# Labels +LABEL \ + io.hass.name="Freqtrade NostalgiaForInfinity x5 bot" \ + io.hass.description="Freqtrade NostalgiaForInfinity x5 bot" \ + io.hass.arch="${BUILD_ARCH}" \ + io.hass.type="addon" \ + io.hass.version="v0.0.0"\ + maintainer="feres mezned" \ + org.opencontainers.image.title="Freqtrade NostalgiaForInfinity x5 bot" \ + org.opencontainers.image.description="Freqtrade NostalgiaForInfinity x5 bot" \ + org.opencontainers.image.vendor="Home Assistant Local Add-ons" \ + org.opencontainers.image.authors="Feres MEZNED" \ + org.opencontainers.image.licenses="NO" \ + org.opencontainers.image.url="https://mezgit.duckdns.org/mezned/HAddons" \ + org.opencontainers.image.source="https://mezgit.duckdns.org/mezned/HAddons/freqtrade-NFIx5" + diff --git a/freqtrade-NFIx5/build.yaml b/freqtrade-NFIx5/build.yaml new file mode 100644 index 0000000..66ad936 --- /dev/null +++ b/freqtrade-NFIx5/build.yaml @@ -0,0 +1,8 @@ +--- +build_from: + aarch64: ghcr.io/hassio-addons/base:17.1.0 + amd64: ghcr.io/hassio-addons/base:17.1.0 + armv7: ghcr.io/hassio-addons/base:17.1.0 +codenotary: + base_image: codenotary@feres.dev + signer: codenotary@feres.dev diff --git a/freqtrade-NFIx5/config.yaml b/freqtrade-NFIx5/config.yaml new file mode 100644 index 0000000..9fd1651 --- /dev/null +++ b/freqtrade-NFIx5/config.yaml @@ -0,0 +1,64 @@ +--- +name: "Freqtrade NFI Bot Add-on" +version: "1.0.0" +slug: "afreqtrade_nfi_bot" +description: "Home Assistant add-on that runs Freqtrade NFI Bot" +url: https://mezgit.duckdns.org/mezned/HAddons/freqtrade-NFIx5 +init: false +arch: + - aarch64 + - amd64 + - armv7 +hassio_api: true +homeassistant_api: true +auth_api: true +docker_api: true +host_network: true +host_pid: true +map: + - share:rw + - /var/run/docker.sock:/var/run/docker.sock:rw + - /share/fqm_bot_nfix5/user_data:/freqtrade/user_data + - /share/fqm_bot_nfix5/user_data/data:/freqtrade/user_data/data + - /share/fqm_bot_nfix5/configs:/freqtrade/configs +ports: + 8989/tcp: 8989 +options: + bot_name: "fqm_bot_nfix5" + max_open_trade: "4" + trading_mode: "spot" + exchange_name: "binance" + exchange_key: "" + exchange_token: "" + telegram_enabled: "true" + telegram_token: "" + telegram_chat_id: "" + api_server_enabled: "true" + api_server_port: "8989" + api_server_username: "" + api_server_password: "" + api_server_jwt_secret_key: "" + api_server_ws_token: "" + timezone: "Europe/Paris" + dry_run: "true" + strategy: "NostalgiaForInfinityX5" + log_level: "info" +schema: + bot_name: str + max_open_trade: str + trading_mode: str + exchange_name: str + exchange_key: str + exchange_token: str + telegram_enabled: str + telegram_token: str + telegram_chat_id: str + api_server_enabled: str + api_server_port: str + api_server_username: str + api_server_password: str + api_server_jwt_secret_key: str + api_server_ws_token: str + dry_run: str + strategy: str + log_level: list(trace|debug|info|notice|warning|error|fatal)? diff --git a/freqtrade-NFIx5/rootfs/etc/s6-overlay/s6-rc.d/fqmbotnfix5/finish b/freqtrade-NFIx5/rootfs/etc/s6-overlay/s6-rc.d/fqmbotnfix5/finish new file mode 100644 index 0000000..794e801 --- /dev/null +++ b/freqtrade-NFIx5/rootfs/etc/s6-overlay/s6-rc.d/fqmbotnfix5/finish @@ -0,0 +1,45 @@ +#!/command/with-contenv bashio +# shellcheck shell=bash +# ============================================================================== +# Home Assistant Community Add-on: Example +# ============================================================================== +declare exit_code +readonly exit_code_container=$( /run/s6-linux-init-container-results/exitcode + fi + + # If the signal is SIGTERM, we should halt the container and take down + # the whole process tree. + [[ "${exit_code_signal}" -eq 15 ]] && exec /run/s6/basedir/bin/halt + +# The service exited with a non-zero exit code, which means it crashed. +elif [[ "${exit_code_service}" -ne 0 ]]; then + + # The service might be a result of another service crashing. Only + # overwrite the container exit code if it is not already set. + if [[ "${exit_code_container}" -eq 0 ]]; then + echo "${exit_code_service}" > /run/s6-linux-init-container-results/exitcode + fi + + # We should halt the container and take down the whole process tree. + exec /run/s6/basedir/bin/halt + +# The service exited with a zero exit code, which means it exited, let +# S6 supervision restart it. +else + bashio::log.info "Service ${service} restarting..." +fi diff --git a/freqtrade-NFIx5/rootfs/etc/s6-overlay/s6-rc.d/fqmbotnfix5/run b/freqtrade-NFIx5/rootfs/etc/s6-overlay/s6-rc.d/fqmbotnfix5/run new file mode 100644 index 0000000..5ec5b0f --- /dev/null +++ b/freqtrade-NFIx5/rootfs/etc/s6-overlay/s6-rc.d/fqmbotnfix5/run @@ -0,0 +1,56 @@ +#!/command/with-contenv bashio +# shellcheck shell=bash +# ============================================================================== +# Home Assistant Community Add-on: Example +# Example init script, runs before any other service +# ============================================================================== + +declare log_level + +bashio::log.info 'Starting Freqtrade NostalgiaForInfinity x5 bot...' + +journal_path='/var/log/journal' +if ! bashio::fs.directory_exists "${journal_path}" || [ -z "$(ls -A ${journal_path})" ]; then + bashio::log.info "No journal at ${journal_path}, looking for journal in /run/log/journal instead" + journal_path='/run/log/journal' +fi + +case "$(bashio::config 'log_level')" in \ + trace) ;& \ + debug) log_level='debug' ;; \ + notice) ;& \ + warning) log_level='warn' ;; \ + error) ;& \ + fatal) log_level='error' ;; \ + *) log_level='info' ;; \ +esac; +bashio::log.info "Freqtrade log level set to ${log_level}" + +export "JOURNAL_PATH=${journal_path}" +export "LOG_LEVEL=${log_level}" + +bashio::log.info "Export Freqtrade environment variables" + +export "FREQTRADE__BOT_NAME=$(bashio::config 'bot_name')" +export "FREQTRADE__MAX_OPEN_TRADES=$(bashio::config 'max_open_trade')" +export "FREQTRADE__TRADING_MODE=$(bashio::config 'trading_mode')" +export "FREQTRADE__EXCHANGE__NAME=$(bashio::config 'exchange_name')" +export "FREQTRADE__EXCHANGE__KEY=$(bashio::config 'exchange_key')" +export "FREQTRADE__EXCHANGE__SECRET=$(bashio::config 'exchange_token')" +export "FREQTRADE__TELEGRAM__ENABLED=$(bashio::config 'telegram_enabled')" +export "FREQTRADE__TELEGRAM__TOKEN=$(bashio::config 'telegram_token')" +export "FREQTRADE__TELEGRAM__CHAT_ID=$(bashio::config 'telegram_chat_id')" +export "FREQTRADE__API_SERVER__ENABLED=$(bashio::config 'api_server_enabled')" +export "FREQTRADE__API_SERVER__LISTEN_PORT=$(bashio::config 'api_server_port')" +export "FREQTRADE__API_SERVER__USERNAME=$(bashio::config 'api_server_username')" +export "FREQTRADE__API_SERVER__PASSWORD=$(bashio::config 'api_server_password')" +export "FREQTRADE__API_SERVER__JWT_SECRET_KEY=$(bashio::config 'api_server_jwt_secret_key')" +export "FREQTRADE__API_SERVER__WS_TOKEN=$(bashio::config 'api_server_ws_token')" +# Time Zone +export "TZ=$(bashio::config 'timezone')" +export "FREQTRADE__DRY_RUN=$(bashio::config 'dry_run')" +export "FREQTRADE__STRATEGY=$(bashio::config 'strategy')" + +bashio::log.info "starting the bot ..." + +exec /freqtrade/.venv/bin/freqtrade trade --db-url sqlite:////freqtrade/user_data/${FREQTRADE__BOT_NAME:-Example_Test_Account}_${FREQTRADE__EXCHANGE__NAME:-binance}_${FREQTRADE__TRADING_MODE:-spot}-tradesv3.sqlite --log-file /freqtrade/user_data/logs/${FREQTRADE__BOT_NAME:-Example_Test_Account}-${FREQTRADE__EXCHANGE__NAME:-binance}-${FREQTRADE__STRATEGY:-NostalgiaForInfinityX5}-${FREQTRADE__TRADING_MODE:-spot}.log \ No newline at end of file diff --git a/freqtrade-NFIx5/rootfs/etc/s6-overlay/s6-rc.d/fqmbotnfix5/type b/freqtrade-NFIx5/rootfs/etc/s6-overlay/s6-rc.d/fqmbotnfix5/type new file mode 100644 index 0000000..1780f9f --- /dev/null +++ b/freqtrade-NFIx5/rootfs/etc/s6-overlay/s6-rc.d/fqmbotnfix5/type @@ -0,0 +1 @@ +longrun \ No newline at end of file diff --git a/freqtrade-NFIx5/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/fqmbotnfix5 b/freqtrade-NFIx5/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/fqmbotnfix5 new file mode 100644 index 0000000..e69de29 diff --git a/loki/rootfs/etc/loki/default-config.yaml b/loki/rootfs/etc/loki/default-config.yaml index cee11a4..18819f3 100644 --- a/loki/rootfs/etc/loki/default-config.yaml +++ b/loki/rootfs/etc/loki/default-config.yaml @@ -36,7 +36,7 @@ storage_config: directory: /data/loki/chunks compactor: - working_directory: /data/loki/boltdb-shipper-compactor + working_directory: /data/loki/tsdb-shipper-compactor retention_enabled: true delete_request_store: filesystem # Added this line