chore: ruff format notebook

This commit is contained in:
Matthias 2024-08-19 19:59:15 +02:00
parent d2c908b1ab
commit ce66fbb595
2 changed files with 73 additions and 78 deletions

View File

@ -18,13 +18,13 @@ from pathlib import Path
# Modify this cell to insure that the output shows the correct path. # Modify this cell to insure that the output shows the correct path.
# Define all paths relative to the project root shown in the cell output # Define all paths relative to the project root shown in the cell output
project_root = "somedir/freqtrade" project_root = "somedir/freqtrade"
i=0 i = 0
try: try:
os.chdir(project_root) os.chdir(project_root)
if not Path('LICENSE').is_file(): if not Path("LICENSE").is_file():
i = 0 i = 0
while i < 4 and (not Path('LICENSE').is_file()): while i < 4 and (not Path("LICENSE").is_file()):
os.chdir(Path(Path.cwd(), '../')) os.chdir(Path(Path.cwd(), "../"))
i += 1 i += 1
project_root = Path.cwd() project_root = Path.cwd()
except FileNotFoundError: except FileNotFoundError:
@ -63,12 +63,13 @@ from freqtrade.data.history import load_pair_history
from freqtrade.enums import CandleType from freqtrade.enums import CandleType
candles = load_pair_history(datadir=data_location, candles = load_pair_history(
timeframe=config["timeframe"], datadir=data_location,
pair=pair, timeframe=config["timeframe"],
data_format = "json", # Make sure to update this to your data pair=pair,
candle_type=CandleType.SPOT, data_format="json", # Make sure to update this to your data
) candle_type=CandleType.SPOT,
)
# Confirm success # Confirm success
print(f"Loaded {len(candles)} rows of data for {pair} from {data_location}") print(f"Loaded {len(candles)} rows of data for {pair} from {data_location}")
@ -90,7 +91,7 @@ strategy.dp = DataProvider(config, None, None)
strategy.ft_bot_start() strategy.ft_bot_start()
# Generate buy/sell signals using strategy # Generate buy/sell signals using strategy
df = strategy.analyze_ticker(candles, {'pair': pair}) df = strategy.analyze_ticker(candles, {"pair": pair})
df.tail() df.tail()
``` ```
@ -109,7 +110,7 @@ df.tail()
```python ```python
# Report results # Report results
print(f"Generated {df['enter_long'].sum()} entry signals") print(f"Generated {df['enter_long'].sum()} entry signals")
data = df.set_index('date', drop=False) data = df.set_index("date", drop=False)
data.tail() data.tail()
``` ```
@ -141,25 +142,24 @@ backtest_dir = config["user_data_dir"] / "backtest_results"
# This contains all information used to generate the backtest result. # This contains all information used to generate the backtest result.
stats = load_backtest_stats(backtest_dir) stats = load_backtest_stats(backtest_dir)
strategy = 'SampleStrategy' strategy = "SampleStrategy"
# All statistics are available per strategy, so if `--strategy-list` was used during backtest, # All statistics are available per strategy, so if `--strategy-list` was used during backtest,
# this will be reflected here as well. # this will be reflected here as well.
# Example usages: # Example usages:
print(stats['strategy'][strategy]['results_per_pair']) print(stats["strategy"][strategy]["results_per_pair"])
# Get pairlist used for this backtest # Get pairlist used for this backtest
print(stats['strategy'][strategy]['pairlist']) print(stats["strategy"][strategy]["pairlist"])
# Get market change (average change of all pairs from start to end of the backtest period) # Get market change (average change of all pairs from start to end of the backtest period)
print(stats['strategy'][strategy]['market_change']) print(stats["strategy"][strategy]["market_change"])
# Maximum drawdown () # Maximum drawdown ()
print(stats['strategy'][strategy]['max_drawdown']) print(stats["strategy"][strategy]["max_drawdown"])
# Maximum drawdown start and end # Maximum drawdown start and end
print(stats['strategy'][strategy]['drawdown_start']) print(stats["strategy"][strategy]["drawdown_start"])
print(stats['strategy'][strategy]['drawdown_end']) print(stats["strategy"][strategy]["drawdown_end"])
# Get strategy comparison (only relevant if multiple strategies were compared) # Get strategy comparison (only relevant if multiple strategies were compared)
print(stats['strategy_comparison']) print(stats["strategy_comparison"])
``` ```
@ -189,14 +189,13 @@ from freqtrade.data.btanalysis import load_backtest_stats
# backtest_dir = config["user_data_dir"] / "backtest_results" # backtest_dir = config["user_data_dir"] / "backtest_results"
stats = load_backtest_stats(backtest_dir) stats = load_backtest_stats(backtest_dir)
strategy_stats = stats['strategy'][strategy] strategy_stats = stats["strategy"][strategy]
df = pd.DataFrame(columns=['dates','equity'], data=strategy_stats['daily_profit']) df = pd.DataFrame(columns=["dates", "equity"], data=strategy_stats["daily_profit"])
df['equity_daily'] = df['equity'].cumsum() df["equity_daily"] = df["equity"].cumsum()
fig = px.line(df, x="dates", y="equity_daily") fig = px.line(df, x="dates", y="equity_daily")
fig.show() fig.show()
``` ```
### Load live trading results into a pandas dataframe ### Load live trading results into a pandas dataframe
@ -226,7 +225,7 @@ from freqtrade.data.btanalysis import analyze_trade_parallelism
# Analyze the above # Analyze the above
parallel_trades = analyze_trade_parallelism(trades, '5m') parallel_trades = analyze_trade_parallelism(trades, "5m")
parallel_trades.plot() parallel_trades.plot()
``` ```
@ -243,19 +242,17 @@ from freqtrade.plot.plotting import generate_candlestick_graph
# Limit graph period to keep plotly quick and reactive # Limit graph period to keep plotly quick and reactive
# Filter trades to one pair # Filter trades to one pair
trades_red = trades.loc[trades['pair'] == pair] trades_red = trades.loc[trades["pair"] == pair]
data_red = data['2019-06-01':'2019-06-10'] data_red = data["2019-06-01":"2019-06-10"]
# Generate candlestick graph # Generate candlestick graph
graph = generate_candlestick_graph(pair=pair, graph = generate_candlestick_graph(
data=data_red, pair=pair,
trades=trades_red, data=data_red,
indicators1=['sma20', 'ema50', 'ema55'], trades=trades_red,
indicators2=['rsi', 'macd', 'macdsignal', 'macdhist'] indicators1=["sma20", "ema50", "ema55"],
) indicators2=["rsi", "macd", "macdsignal", "macdhist"],
)
``` ```
@ -265,7 +262,6 @@ graph = generate_candlestick_graph(pair=pair,
# Render graph in a separate window # Render graph in a separate window
graph.show(renderer="browser") graph.show(renderer="browser")
``` ```
## Plot average profit per trade as distribution graph ## Plot average profit per trade as distribution graph
@ -276,11 +272,10 @@ import plotly.figure_factory as ff
hist_data = [trades.profit_ratio] hist_data = [trades.profit_ratio]
group_labels = ['profit_ratio'] # name of the dataset group_labels = ["profit_ratio"] # name of the dataset
fig = ff.create_distplot(hist_data, group_labels, bin_size=0.01) fig = ff.create_distplot(hist_data, group_labels, bin_size=0.01)
fig.show() fig.show()
``` ```
Feel free to submit an issue or Pull Request enhancing this document if you would like to share ideas on how to best analyze the data. Feel free to submit an issue or Pull Request enhancing this document if you would like to share ideas on how to best analyze the data.

View File

@ -34,13 +34,13 @@
"# Modify this cell to insure that the output shows the correct path.\n", "# Modify this cell to insure that the output shows the correct path.\n",
"# Define all paths relative to the project root shown in the cell output\n", "# Define all paths relative to the project root shown in the cell output\n",
"project_root = \"somedir/freqtrade\"\n", "project_root = \"somedir/freqtrade\"\n",
"i=0\n", "i = 0\n",
"try:\n", "try:\n",
" os.chdir(project_root)\n", " os.chdir(project_root)\n",
" if not Path('LICENSE').is_file():\n", " if not Path(\"LICENSE\").is_file():\n",
" i = 0\n", " i = 0\n",
" while i < 4 and (not Path('LICENSE').is_file()):\n", " while i < 4 and (not Path(\"LICENSE\").is_file()):\n",
" os.chdir(Path(Path.cwd(), '../'))\n", " os.chdir(Path(Path.cwd(), \"../\"))\n",
" i += 1\n", " i += 1\n",
" project_root = Path.cwd()\n", " project_root = Path.cwd()\n",
"except FileNotFoundError:\n", "except FileNotFoundError:\n",
@ -92,12 +92,13 @@
"from freqtrade.enums import CandleType\n", "from freqtrade.enums import CandleType\n",
"\n", "\n",
"\n", "\n",
"candles = load_pair_history(datadir=data_location,\n", "candles = load_pair_history(\n",
" timeframe=config[\"timeframe\"],\n", " datadir=data_location,\n",
" pair=pair,\n", " timeframe=config[\"timeframe\"],\n",
" data_format = \"json\", # Make sure to update this to your data\n", " pair=pair,\n",
" candle_type=CandleType.SPOT,\n", " data_format=\"json\", # Make sure to update this to your data\n",
" )\n", " candle_type=CandleType.SPOT,\n",
")\n",
"\n", "\n",
"# Confirm success\n", "# Confirm success\n",
"print(f\"Loaded {len(candles)} rows of data for {pair} from {data_location}\")\n", "print(f\"Loaded {len(candles)} rows of data for {pair} from {data_location}\")\n",
@ -128,7 +129,7 @@
"strategy.ft_bot_start()\n", "strategy.ft_bot_start()\n",
"\n", "\n",
"# Generate buy/sell signals using strategy\n", "# Generate buy/sell signals using strategy\n",
"df = strategy.analyze_ticker(candles, {'pair': pair})\n", "df = strategy.analyze_ticker(candles, {\"pair\": pair})\n",
"df.tail()" "df.tail()"
] ]
}, },
@ -155,7 +156,7 @@
"source": [ "source": [
"# Report results\n", "# Report results\n",
"print(f\"Generated {df['enter_long'].sum()} entry signals\")\n", "print(f\"Generated {df['enter_long'].sum()} entry signals\")\n",
"data = df.set_index('date', drop=False)\n", "data = df.set_index(\"date\", drop=False)\n",
"data.tail()" "data.tail()"
] ]
}, },
@ -205,24 +206,24 @@
"# This contains all information used to generate the backtest result.\n", "# This contains all information used to generate the backtest result.\n",
"stats = load_backtest_stats(backtest_dir)\n", "stats = load_backtest_stats(backtest_dir)\n",
"\n", "\n",
"strategy = 'SampleStrategy'\n", "strategy = \"SampleStrategy\"\n",
"# All statistics are available per strategy, so if `--strategy-list` was used during backtest,\n", "# All statistics are available per strategy, so if `--strategy-list` was used during backtest,\n",
"# this will be reflected here as well.\n", "# this will be reflected here as well.\n",
"# Example usages:\n", "# Example usages:\n",
"print(stats['strategy'][strategy]['results_per_pair'])\n", "print(stats[\"strategy\"][strategy][\"results_per_pair\"])\n",
"# Get pairlist used for this backtest\n", "# Get pairlist used for this backtest\n",
"print(stats['strategy'][strategy]['pairlist'])\n", "print(stats[\"strategy\"][strategy][\"pairlist\"])\n",
"# Get market change (average change of all pairs from start to end of the backtest period)\n", "# Get market change (average change of all pairs from start to end of the backtest period)\n",
"print(stats['strategy'][strategy]['market_change'])\n", "print(stats[\"strategy\"][strategy][\"market_change\"])\n",
"# Maximum drawdown ()\n", "# Maximum drawdown ()\n",
"print(stats['strategy'][strategy]['max_drawdown'])\n", "print(stats[\"strategy\"][strategy][\"max_drawdown\"])\n",
"# Maximum drawdown start and end\n", "# Maximum drawdown start and end\n",
"print(stats['strategy'][strategy]['drawdown_start'])\n", "print(stats[\"strategy\"][strategy][\"drawdown_start\"])\n",
"print(stats['strategy'][strategy]['drawdown_end'])\n", "print(stats[\"strategy\"][strategy][\"drawdown_end\"])\n",
"\n", "\n",
"\n", "\n",
"# Get strategy comparison (only relevant if multiple strategies were compared)\n", "# Get strategy comparison (only relevant if multiple strategies were compared)\n",
"print(stats['strategy_comparison'])\n" "print(stats[\"strategy_comparison\"])"
] ]
}, },
{ {
@ -265,13 +266,13 @@
"# backtest_dir = config[\"user_data_dir\"] / \"backtest_results\"\n", "# backtest_dir = config[\"user_data_dir\"] / \"backtest_results\"\n",
"\n", "\n",
"stats = load_backtest_stats(backtest_dir)\n", "stats = load_backtest_stats(backtest_dir)\n",
"strategy_stats = stats['strategy'][strategy]\n", "strategy_stats = stats[\"strategy\"][strategy]\n",
"\n", "\n",
"df = pd.DataFrame(columns=['dates','equity'], data=strategy_stats['daily_profit'])\n", "df = pd.DataFrame(columns=[\"dates\", \"equity\"], data=strategy_stats[\"daily_profit\"])\n",
"df['equity_daily'] = df['equity'].cumsum()\n", "df[\"equity_daily\"] = df[\"equity\"].cumsum()\n",
"\n", "\n",
"fig = px.line(df, x=\"dates\", y=\"equity_daily\")\n", "fig = px.line(df, x=\"dates\", y=\"equity_daily\")\n",
"fig.show()\n" "fig.show()"
] ]
}, },
{ {
@ -319,7 +320,7 @@
"\n", "\n",
"\n", "\n",
"# Analyze the above\n", "# Analyze the above\n",
"parallel_trades = analyze_trade_parallelism(trades, '5m')\n", "parallel_trades = analyze_trade_parallelism(trades, \"5m\")\n",
"\n", "\n",
"parallel_trades.plot()" "parallel_trades.plot()"
] ]
@ -345,18 +346,17 @@
"# Limit graph period to keep plotly quick and reactive\n", "# Limit graph period to keep plotly quick and reactive\n",
"\n", "\n",
"# Filter trades to one pair\n", "# Filter trades to one pair\n",
"trades_red = trades.loc[trades['pair'] == pair]\n", "trades_red = trades.loc[trades[\"pair\"] == pair]\n",
"\n", "\n",
"data_red = data['2019-06-01':'2019-06-10']\n", "data_red = data[\"2019-06-01\":\"2019-06-10\"]\n",
"# Generate candlestick graph\n", "# Generate candlestick graph\n",
"graph = generate_candlestick_graph(pair=pair,\n", "graph = generate_candlestick_graph(\n",
" data=data_red,\n", " pair=pair,\n",
" trades=trades_red,\n", " data=data_red,\n",
" indicators1=['sma20', 'ema50', 'ema55'],\n", " trades=trades_red,\n",
" indicators2=['rsi', 'macd', 'macdsignal', 'macdhist']\n", " indicators1=[\"sma20\", \"ema50\", \"ema55\"],\n",
" )\n", " indicators2=[\"rsi\", \"macd\", \"macdsignal\", \"macdhist\"],\n",
"\n", ")"
"\n"
] ]
}, },
{ {
@ -369,7 +369,7 @@
"# graph.show()\n", "# graph.show()\n",
"\n", "\n",
"# Render graph in a separate window\n", "# Render graph in a separate window\n",
"graph.show(renderer=\"browser\")\n" "graph.show(renderer=\"browser\")"
] ]
}, },
{ {
@ -389,10 +389,10 @@
"\n", "\n",
"\n", "\n",
"hist_data = [trades.profit_ratio]\n", "hist_data = [trades.profit_ratio]\n",
"group_labels = ['profit_ratio'] # name of the dataset\n", "group_labels = [\"profit_ratio\"] # name of the dataset\n",
"\n", "\n",
"fig = ff.create_distplot(hist_data, group_labels, bin_size=0.01)\n", "fig = ff.create_distplot(hist_data, group_labels, bin_size=0.01)\n",
"fig.show()\n" "fig.show()"
] ]
}, },
{ {