187 lines
4.8 KiB
Plaintext
187 lines
4.8 KiB
Plaintext
{
|
|
"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",
|
|
"try:\n",
|
|
"\tos.chdir(os.path.join(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
|
|
}
|