{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Strategy debugging example" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Change directory\n", "# Define all paths relative to the project root shown in the cell output\n", "import os\n", "from pathlib import Path\n", "try:\n", "\tos.chdir(Path(os.getcwd(), '../..'))\n", "\tprint(os.getcwd())\n", "except:\n", "\tpass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Import requirements and define variables used in the script" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Imports\n", "from pathlib import Path\n", "from freqtrade.data.history import load_pair_history\n", "from freqtrade.resolvers import StrategyResolver\n", "from freqtrade.data.btanalysis import load_backtest_data\n", "from freqtrade.data.btanalysis import load_trades_from_db\n", "\n", "# Define some constants\n", "ticker_interval = \"1m\"\n", "# Name of the strategy class\n", "strategy_name = 'NewStrategy'\n", "# Path to user data\n", "user_data_dir = 'user_data'\n", "# Location of the strategy\n", "strategy_location = Path(user_data_dir, 'strategies')\n", "# Location of the data\n", "data_location = Path(user_data_dir, 'data', 'binance')\n", "# Pair to analyze \n", "# Only use one pair here\n", "pair = \"BTC_USDT\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load exchange data" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Load data using values set above\n", "bt_data = load_pair_history(datadir=Path(data_location),\n", " ticker_interval=ticker_interval,\n", " pair=pair)\n", "\n", "# Confirm success\n", "print(\"Loaded \" + str(len(bt_data)) + f\" rows of data for {pair} from {data_location}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load and run strategy \n", "\n", "* Rerun each time the strategy file is changed\n", "* Display the trade details. Note that using `data.head()` would also work, however most indicators have some \"startup\" data at the top of the dataframe.\n", "\n", "Some possible problems:\n", "\n", "* Columns with NaN values at the end of the dataframe\n", "* Columns used in `crossed*()` functions with completely different units" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Load strategy using values set above\n", "strategy = StrategyResolver({'strategy': strategy_name,\n", " 'user_data_dir': user_data_dir,\n", " 'strategy_path': strategy_location}).strategy\n", "\n", "# Run strategy (just like in backtesting)\n", "df = strategy.analyze_ticker(bt_data, {'pair': pair})\n", "\n", "# Report results\n", "print(f\"Generated {df['buy'].sum()} buy signals\")\n", "data = df.set_index('date', drop=True)\n", "data.tail()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load backtest results into a pandas dataframe" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Load backtest results\n", "df = load_backtest_data(\"user_data/backtest_data/backtest-result.json\")\n", "\n", "# Show value-counts per pair\n", "df.groupby(\"pair\")[\"sell_reason\"].value_counts()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load live trading results into a pandas dataframe" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Fetch trades from database\n", "df = load_trades_from_db(\"sqlite:///tradesv3.sqlite\")\n", "\n", "# Display results\n", "df.groupby(\"pair\")[\"sell_reason\"].value_counts()" ] } ], "metadata": { "file_extension": ".py", "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" }, "mimetype": "text/x-python", "name": "python", "npconvert_exporter": "python", "pygments_lexer": "ipython3", "version": 3 }, "nbformat": 4, "nbformat_minor": 2 }