All notable changes to this project will be documented in this file.
Upgrade version:
- git checkout main
- git pull
Upgrade library dependencies (if required):
- python3 -m pip install -r requirements.txt -U
- hotfix for Coinbase Pro. Exchange removed minimum trade limit and removed base_min_size variable from API.
- added pycryptobot configuration editor
- added webgui.py this is web interface, it has some of the telegram bot functions (more will be added) and can be run standalone or along side telegram_bot.py
- added bot controls to webgui
- added market scanner options to webgui (please note if using the telegram bot as well the schedules for webgui and telegram bot are separate processes)
- added visual gauges to dashboard (current margins & last 7 day trade margin)
- added log viewer page to webgui it will list logs from the default log location (this will be selectable in a future update)
[Telegram Bot]
- added logging, logs are saved into ./telegram_logs folder.
- added "logger_level": option in the telegram section of config default is "INFO" other options can be used.
- added trades summary to control panel (24h, 7d, 14d, 31d or all)
- fixed screener/scanner stopping bots that are on the exception list, the exception list is now checked when the screener/scanner starts and stops bots.
- fixed bot count when screener/scanner starts or stops bots
- fixed max bot count not always limiting the number of running bots
- added "exchange_bot_count": in scanner section of config to allow max number of bots running on each exchange
- added screener to config editor
- added "autostart" : in scanner section of config, if enabled, when telegram_bot.py is started it will run the market scanner and start any previous open orders.
- including code refactoring.
- major release
- fixed some spelling mistakes
- suppressed some of the Kucoin error messages, only displays after last retry attempt
- cleaned up a couple of the retry loops for Kucoin API to make more efficient
- moved the buy/sell error check code further down pycryptobot.py to allow other variables to be set first
- more exception handling added for JSONDecode errors
- fixed Telegram Reload config market not valid error
- added telegram_bot log file and telegram_logs folder
- revise buy/sell code. Still occasional problems with last update.
- fix trailingstoplosstrigger logic
- bot in docker container runs as user pycryptobot as UID:GID 1000 (First non root user).
- docker bot container size minified for better layer caching and faster downloads.
- updating caching system timer. Screener update including volatility checking, package version check and debugging functionality.
- fix indentation problems. Incorporated GetOrders caching system (Kucoin). Misc. fixes.
- fix possible issue where the trade could be processed multiple times on the same pass through the buy/sell process
- fixed bug in Base and Quote increment functions for Kucoin
- improved BUY and SELL code after fixing increment bug
- minor updates to trade confirmations added previously
- updated telegram bot config editor
- added option to enable/disable screener/scanner notifications
- update to default parser to set to correct object type
- fixed spelling mistake in Kucoin api.py file
- added balance checking to verify buy/sell trades occurred
- revised getBalance code for Coinbase and Kucion to verify a response from API
- revised market/symbol regex in telegram_bot.py to match rest of code
- fixed spelling mistake in comment
- bugfixes - minor revisions to previous fixes
- modify Sell text - immediate actions don't say at Close any more.
- adjust scanner to only display message for skipping leveraged bots once.
- bugfixes
- added trailingimmediatebuy option to buy as soon as trailingbuypcnt is reached, instead of waiting until candle close
- added preventloss option to enable selling prior to margin reaching 0% profit to prevent loss
- added preventlosstrigger - margin set point to start watching for preventloss (see readme)
- added preventlossmargin - margin set point to sell at for preventloss (see readme)
- reordered some test in isSellTrigger to minimize processing on every pass under some conditions
- revised fix for change_pcnt_high variable from previous
- fixed isSellTrigger immediate action it was waiting until candle close
- change tgbot manual buy/sell check
- fix change_pcnt_high variable error for some tokens
- modified tgbot helper.py code so that it does not require Python 3.9
- Moved log and telegram output messages for buy and sell transaction to display after API call to help prevent notifications of trades that hadn't occurred yet if API error.
- major version number increased
- Fix bug in trailingbuypcnt code that could cause the waiting price to continually change and prevent a buy
- fix error when saving trade data for the first time
- Add all option to Sell command
- Add unit tests for TG Bot
- Add trailingbuypcnt as config option with a default of 0 and follow price lower. See README for details.
- clean up Strategy.py debug messages with debug bool variable
- increase market and currency regex to allow 20 characters for base currency instead of 10.
- Added trailingstoplosstrigger to pair.json file + change percentage
- Fixed sims with smartswitch and added the 5 minute granularity to sims
- Added buyminsize so the bot will not buy anything below this value
- Added sellsmartswitch this sets the sell granularity to 5 minutes once sold it will switch back to normal smartswitch
- Added restart open orders this will start any bots that have open orders (these state is added to data.json when each bot starts)
- Added cleandata to when the TG bot starts
- Added control dashboard to TG Bot, to replace some inline commands
- Refactored TG Bot code
- Fix smartswitch in Simulations
- Fix a few incorrectly defined variables
- Fix sim result margins
- Add open trade margin to Sim Summary
- Add config option for buylastsellsize
- Add buylastsellsize to Simulations
- Add retry loop to Coinbase Public API call
- Increase isMarketValid to 10 chars for base currency regex
- Add marketmultibuycheck config option to prevent multiple buys with some problem market pairs
- some minor file formatting cleanup with VSCode format command
- Added Kucoin websockets
- Fixed Kucoin failing when using scanner
- Telegram scanner bugfix
- Fix for binance candles not incrementing with websockets
- Add bypass FileNotFoundException for pairs.json file
- Fix for double buys when using websockets
- Fix bug for Tracker CSV function
- Fix missing code for Telegram output options
- Add timestamp to Sim buy message output for Telegram
- Rename /restartbots to /resumebots
- Fixed error when {market}.json file might not be complete (bot stopped).
- Add /cleandata to remove any {market}.json file which are not complete (bot stopped)
- Add not to create telegram_data folder when running sims
- Add /startscanner to TG Bot to scan marks and start bots (hourly schedule set in config)
- Add /stopscanner to TG Bot to stop scanning markets
- Add /addexception to TG Bot to add pair to exceptions list so won't be started by scanner process
- Add /removeexception to TG Bot to remove a pair from exceptions list
- Add multiple market scanning to scanner.py
- Add exception list so that scanner.py doesn't pick a pair your don't want traded
- fix for Kucoin 429 errors, KeyError('data') and ValueError for time format
- addition work on fix for Kucoin multiple buys for same pair when more Quote funds than Base funds in account
- Kucoin API general tidying of error messages and logging
- Kucoin runs without any regular re-occurring errors in log
- added trade timestamps to Telegram output
- added Telegram config option --telegramtradesonly: will show trades, but not smart switch or last action changed
- added Telegram config option --disabletelegramerrormsgs: will not send Logger messages to telegram
- added ability to specify api_key_file via command line arguments with --api_key_file
- fix for Kucoin multiple buys on same traded pair when API error occurs
- fix for Kucoin margin calculation
- fix for Kucoin getOrders not always returning a response
- fix for SIM smartswitching
- Update for TG bot to show uptime with /showinfo
- formatting CHANGELOG.md
- fixed TG BOT checking if market/pair already exists before saving
- fixed TG BOT indicator states
- Added /deletebot will delete bot from /startbot list
- fixed issue with fast-sample with no date causing exception
- fixed issue when bot throws an exception it does not exit
- fixed issue when exception is raised TG bot still thinks the bot is active
- fixed /startbots will only start bots that are not already running
- fixed when Telegram replaces -- with a long dash
- fixed if folder exists in telegram_data folder
- added validation for exchange and markets when using /addnew
- refactored TG bot code
- Fixed issue when websockets are enabled making to many API calls (for those that are still required they will be called once per minute instead of on every iteration).
- Added telegram bot (telegram_bot.py) this has to be run separately to pycryptobot.py
- Added option to enable the telegram bot this does not start it, just enables writing data required for the telegram bot (--enabletelegrambotcontrol)
- Added user_id to telegram section in config, this is used so that only you can control the bot
- Added datafolder to telegram section in config, this is used when running multiple bots from different folders
- Added Telegram Bot Setup instructions text file
- Removed some debug logging left in by mistake
- Fix issue with Kucoin margins not calculating correctly
- Added Kucoin to yaml files
- Added Kucoin to --init (auto config)
- Added ability to parse --market in the same format as coinbase (ie ONT-USD)
- Added Websockets webhooks example script
- Added Coinbase Pro webhooks example script
- Telegram output tweaks
- Print currency trading on dryrun simulation summary
- fix for binance webhooks granularity
- fix for kucoin minimum order function raising an exception
- add option to disable insufficient funds exception and log as warning instead (--enableinsufficientfundslogging)
- Kucoin exchange API (websockets not enabled)
- Websockets available for Binance and Coinbase Pro --websocket
- Added websvc.py to Docker
- Updated healthcheck to use a basic HTTPS request instead of a getTime() API call
- Disabled Seasonal ARIMA Model ML by default --enableml
- Removed healthcheck to reduce API calls for scaling
- Websockets POC scripts for Coinbase Pro and Binance
- Seasonal ARIMA model predictions are not optional --enableml
- Updating Dockerfile to python:3.9-slim-bullseye
- switching to multistage venv Dockerfile and adding build-essentials in 1st stage to minimize Image size and build dependencies from source like numpy or statsmodels on arm64
- fixed williams %r indicator and added it to the websvc dashboard
- added adx14 indicator and added it to the websvc dashboard
- fix for sim index "IndexError('index 0 is out of bounds for axis 0 with size 0')"
- fix for DF High not tracking the sim date in use, this stopped nobuynearhighpcnt working fully
- moved trades csv file to CSV folder
- added Seasonal ARIMA model predictions to websvc analysis
- update to smartswitch sim processing speed.
- update to sim summary to include total margin and profit/loss.
- fixed timestamp bug when using simstartdate.
- fixed graphs in sim mode.
- remove limit for sims using specific granularity.
- fix for profit and loss summary for simulations
- added trade history in simulation summary in verbose mode will also export to CSV '({market}{daterange}_trades.csv)'
- added trade history export to csv 'trades.csv'
- added web portal ./websvc.py
- added additional error handling for Coinbase Pro getTime()
- added "nobuynearhighpcnt" to specify the percentage from high that the bot should not buy if "disablebuynearhigh" is not specified.
- added a catch and display of exception message for getTime()
- add proper shebang and exec permissions to pycryptobot.py (run from CLI, etc.)
- Found and fixed 'currency' key exception
- Fixed simulation summary
- Binance US is missing 'tradeFee' API endpoint, now returns default fee for this url
- Verbose debug option to isSellTrigger and isWaitTrigger
- Logic in isSellTrigger and isWaitTrigger
- Adjustment to isWaitTrigger
- Tidying up repo
- Fixed version
- 'stats' for binance was retuning incorrect percentage gains.
- 'statdetail' was not working for binance as some values were string instead of float
- 'nosellminpcnt' to specify minimum margin to not sell
- 'nosellmaxpcnt' to specify maximum margin to not sell
- fixed Stats.py issue on smaller datasets
- fixed recvWindow issue
- binance.us is now working
- Various small bug fixes
- Surrounded API calls for both Binance and Coinbase Pro within a try except
- Surrounded signed Binance API calls within a try except
- Fixed custom logging bug
- Add a try/catch to resolve "currency" key issue with recvWindow
- Removed previous failsafe check for "currency" in getAccounts
- Added failsafe check for "currency" in getAccounts
- Updated authAPI to return an empty JSON response on recvWindow
- Config file bugfix
- Drafted new release
- Removed log rotation from the bot as it shouldn't be there
- Removed debug code which was left in
- Binance code improvements
- Updated Stochastic RSI
- Updated Binance price calculation
- Refactor text boxes in logs
- Fix recvWindow for binance
- Replaced python-binance library with in-built code
- Loads of enhancements and improvements
- Unit tests added and improved
- Add section about code style to CONTRIBUTING.md
- Upgrade pip to latest version before using it to install packages
- The gitignore pattern excluded the configmap.yaml for the helm chart.
- Added Kubernetes helm charts
- Fixed misaligned text on initial bot info table
- Fixed output formatting
- Fixed fast-sample smartswitching for coinbase
- Fixed simulation date issues
- Fixed smartwitch for coinbase historic data limit
- Fixed smartswitching date sync
-
Added --disablebuyema argument
-
Updated README.md
-
use
granularity
instead ofself.getGranularity
-
use
granularity
instead ofself.getGranularity()
ingetHistoricalDateRange()
call
- Update README.md
- Increased number of attempts at retrieving previous orders in binance api
- Improved ADX technical indicator
- Added ATR technical indicator
- Fixed ARIMA bug in coinbase pro when frequency not set in dataframe
- Added ADX technical indicator
- Added auto migrate API keys to coinbasepro.key and/or binance.key
- Updated README.md
- Added log file rotation
- Filter on filled orders only in Binance dataframe
- Fixed smartswitch for binance simulation mode and live
- Fixed smartswitch timings to use sim date instead of just defaulting to current date
- Update goldencross using the actual sim date in sim mode only
- Update to check when your last order is buy but your coin balance in 0 switch to buy instead
- Possible bug if you transfer or convert coins on the exchange instead of selling them
- Update to use correct market data in sim mode + smartswitching
- statdetail flag which gives a detailed list of transactions (works with --statstartdate and --statgroup)
- Updated validation for Telegram keys
- Added "api_key_file" to config to keep credentials out of config files for safety
- Added statstartdate flag to ignore trades before a given date in stats function
- Added statgroup flag to merge stats of multiple currency pairs
- Fixed stats for coinbase pro
- Fixed smart switch back bug
- Fixed "simstart" bug
- Fixed issue from previous release
- Refactored the new stats feature into it's own Stats class
- Fixed a bug with getOrders() for Coinbase Pro
- Fixed the rounding issue with precision greater than 4
- Fixed the dummy account which has been broken with a previous PR
- Updated unit tests
- Create default config if missing, avoid creating empty config
- Separated strategy into Strategy model for custom strategies
- Minor changes in quote currency extraction (binance.py)
- Suppressed ARIMA model warning
- Improved ARIMA model output to console
- Reduced polling from 2 minutes to 1 minute
- Added the Seasonal ARIMA machine learning model for price predictions
- Added Stochastic RSI and Williams %R technical indicators
- Optimised simulations, they run a lot faster now
- Added app.getHistoricalDataChained
- Updated validation to allow for custom Coinbase Pro passphrases
- Added CHANGELOG.md
- Removed check for 'fees' on Binance orders which doesn't exist
- Pandas 'SettingWithCopyWarning' in models/exchange/coinbase_pro/api.py