mirror of
https://github.com/freqtrade/freqtrade.git
synced 2026-02-08 07:10:28 +00:00
Merge pull request #10553 from freqtrade/dependabot/pip/develop/ruff-0.6.1
chore(deps-dev): bump ruff from 0.5.7 to 0.6.1
This commit is contained in:
@@ -13,19 +13,22 @@ Please follow the [documentation](https://www.freqtrade.io/en/stable/data-downlo
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
# Change directory
|
||||
# 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
|
||||
project_root = "somedir/freqtrade"
|
||||
i=0
|
||||
i = 0
|
||||
try:
|
||||
os.chdir(project_root)
|
||||
assert Path('LICENSE').is_file()
|
||||
except:
|
||||
while i<4 and (not Path('LICENSE').is_file()):
|
||||
os.chdir(Path(Path.cwd(), '../'))
|
||||
i+=1
|
||||
project_root = Path.cwd()
|
||||
if not Path("LICENSE").is_file():
|
||||
i = 0
|
||||
while i < 4 and (not Path("LICENSE").is_file()):
|
||||
os.chdir(Path(Path.cwd(), "../"))
|
||||
i += 1
|
||||
project_root = Path.cwd()
|
||||
except FileNotFoundError:
|
||||
print("Please define the project root relative to the current directory")
|
||||
print(Path.cwd())
|
||||
```
|
||||
|
||||
@@ -35,6 +38,7 @@ print(Path.cwd())
|
||||
```python
|
||||
from freqtrade.configuration import Configuration
|
||||
|
||||
|
||||
# Customize these according to your needs.
|
||||
|
||||
# Initialize empty configuration object
|
||||
@@ -58,12 +62,14 @@ pair = "BTC/USDT"
|
||||
from freqtrade.data.history import load_pair_history
|
||||
from freqtrade.enums import CandleType
|
||||
|
||||
candles = load_pair_history(datadir=data_location,
|
||||
timeframe=config["timeframe"],
|
||||
pair=pair,
|
||||
data_format = "json", # Make sure to update this to your data
|
||||
candle_type=CandleType.SPOT,
|
||||
)
|
||||
|
||||
candles = load_pair_history(
|
||||
datadir=data_location,
|
||||
timeframe=config["timeframe"],
|
||||
pair=pair,
|
||||
data_format="json", # Make sure to update this to your data
|
||||
candle_type=CandleType.SPOT,
|
||||
)
|
||||
|
||||
# Confirm success
|
||||
print(f"Loaded {len(candles)} rows of data for {pair} from {data_location}")
|
||||
@@ -76,14 +82,16 @@ candles.head()
|
||||
|
||||
```python
|
||||
# Load strategy using values set above
|
||||
from freqtrade.resolvers import StrategyResolver
|
||||
from freqtrade.data.dataprovider import DataProvider
|
||||
from freqtrade.resolvers import StrategyResolver
|
||||
|
||||
|
||||
strategy = StrategyResolver.load_strategy(config)
|
||||
strategy.dp = DataProvider(config, None, None)
|
||||
strategy.ft_bot_start()
|
||||
|
||||
# Generate buy/sell signals using strategy
|
||||
df = strategy.analyze_ticker(candles, {'pair': pair})
|
||||
df = strategy.analyze_ticker(candles, {"pair": pair})
|
||||
df.tail()
|
||||
```
|
||||
|
||||
@@ -102,7 +110,7 @@ df.tail()
|
||||
```python
|
||||
# Report results
|
||||
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()
|
||||
```
|
||||
|
||||
@@ -119,10 +127,13 @@ Analyze a trades dataframe (also used below for plotting)
|
||||
```python
|
||||
from freqtrade.data.btanalysis import load_backtest_data, load_backtest_stats
|
||||
|
||||
|
||||
# if backtest_dir points to a directory, it'll automatically load the last backtest file.
|
||||
backtest_dir = config["user_data_dir"] / "backtest_results"
|
||||
# backtest_dir can also point to a specific file
|
||||
# backtest_dir = config["user_data_dir"] / "backtest_results/backtest-result-2020-07-01_20-04-22.json"
|
||||
# backtest_dir can also point to a specific file
|
||||
# backtest_dir = (
|
||||
# config["user_data_dir"] / "backtest_results/backtest-result-2020-07-01_20-04-22.json"
|
||||
# )
|
||||
```
|
||||
|
||||
|
||||
@@ -131,24 +142,24 @@ backtest_dir = config["user_data_dir"] / "backtest_results"
|
||||
# This contains all information used to generate the backtest result.
|
||||
stats = load_backtest_stats(backtest_dir)
|
||||
|
||||
strategy = 'SampleStrategy'
|
||||
# All statistics are available per strategy, so if `--strategy-list` was used during backtest, this will be reflected here as well.
|
||||
strategy = "SampleStrategy"
|
||||
# All statistics are available per strategy, so if `--strategy-list` was used during backtest,
|
||||
# this will be reflected here as well.
|
||||
# Example usages:
|
||||
print(stats['strategy'][strategy]['results_per_pair'])
|
||||
print(stats["strategy"][strategy]["results_per_pair"])
|
||||
# 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)
|
||||
print(stats['strategy'][strategy]['market_change'])
|
||||
print(stats["strategy"][strategy]["market_change"])
|
||||
# Maximum drawdown ()
|
||||
print(stats['strategy'][strategy]['max_drawdown'])
|
||||
print(stats["strategy"][strategy]["max_drawdown"])
|
||||
# Maximum drawdown start and end
|
||||
print(stats['strategy'][strategy]['drawdown_start'])
|
||||
print(stats['strategy'][strategy]['drawdown_end'])
|
||||
print(stats["strategy"][strategy]["drawdown_start"])
|
||||
print(stats["strategy"][strategy]["drawdown_end"])
|
||||
|
||||
|
||||
# Get strategy comparison (only relevant if multiple strategies were compared)
|
||||
print(stats['strategy_comparison'])
|
||||
|
||||
print(stats["strategy_comparison"])
|
||||
```
|
||||
|
||||
|
||||
@@ -166,24 +177,25 @@ trades.groupby("pair")["exit_reason"].value_counts()
|
||||
```python
|
||||
# Plotting equity line (starting with 0 on day 1 and adding daily profit for each backtested day)
|
||||
|
||||
import pandas as pd
|
||||
import plotly.express as px
|
||||
|
||||
from freqtrade.configuration import Configuration
|
||||
from freqtrade.data.btanalysis import load_backtest_stats
|
||||
import plotly.express as px
|
||||
import pandas as pd
|
||||
|
||||
|
||||
# strategy = 'SampleStrategy'
|
||||
# config = Configuration.from_files(["user_data/config.json"])
|
||||
# backtest_dir = config["user_data_dir"] / "backtest_results"
|
||||
|
||||
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['equity_daily'] = df['equity'].cumsum()
|
||||
df = pd.DataFrame(columns=["dates", "equity"], data=strategy_stats["daily_profit"])
|
||||
df["equity_daily"] = df["equity"].cumsum()
|
||||
|
||||
fig = px.line(df, x="dates", y="equity_daily")
|
||||
fig.show()
|
||||
|
||||
```
|
||||
|
||||
### Load live trading results into a pandas dataframe
|
||||
@@ -194,6 +206,7 @@ In case you did already some trading and want to analyze your performance
|
||||
```python
|
||||
from freqtrade.data.btanalysis import load_trades_from_db
|
||||
|
||||
|
||||
# Fetch trades from database
|
||||
trades = load_trades_from_db("sqlite:///tradesv3.sqlite")
|
||||
|
||||
@@ -210,8 +223,9 @@ This can be useful to find the best `max_open_trades` parameter, when used with
|
||||
```python
|
||||
from freqtrade.data.btanalysis import analyze_trade_parallelism
|
||||
|
||||
|
||||
# Analyze the above
|
||||
parallel_trades = analyze_trade_parallelism(trades, '5m')
|
||||
parallel_trades = analyze_trade_parallelism(trades, "5m")
|
||||
|
||||
parallel_trades.plot()
|
||||
```
|
||||
@@ -222,23 +236,23 @@ Freqtrade offers interactive plotting capabilities based on plotly.
|
||||
|
||||
|
||||
```python
|
||||
from freqtrade.plot.plotting import generate_candlestick_graph
|
||||
from freqtrade.plot.plotting import generate_candlestick_graph
|
||||
|
||||
|
||||
# Limit graph period to keep plotly quick and reactive
|
||||
|
||||
# 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
|
||||
graph = generate_candlestick_graph(pair=pair,
|
||||
data=data_red,
|
||||
trades=trades_red,
|
||||
indicators1=['sma20', 'ema50', 'ema55'],
|
||||
indicators2=['rsi', 'macd', 'macdsignal', 'macdhist']
|
||||
)
|
||||
|
||||
|
||||
|
||||
graph = generate_candlestick_graph(
|
||||
pair=pair,
|
||||
data=data_red,
|
||||
trades=trades_red,
|
||||
indicators1=["sma20", "ema50", "ema55"],
|
||||
indicators2=["rsi", "macd", "macdsignal", "macdhist"],
|
||||
)
|
||||
```
|
||||
|
||||
|
||||
@@ -248,7 +262,6 @@ graph = generate_candlestick_graph(pair=pair,
|
||||
|
||||
# Render graph in a separate window
|
||||
graph.show(renderer="browser")
|
||||
|
||||
```
|
||||
|
||||
## Plot average profit per trade as distribution graph
|
||||
@@ -257,12 +270,12 @@ graph.show(renderer="browser")
|
||||
```python
|
||||
import plotly.figure_factory as ff
|
||||
|
||||
|
||||
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.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.
|
||||
|
||||
Reference in New Issue
Block a user