Automatically generate documentation from jupyter notebook
This commit is contained in:
		| @@ -135,78 +135,9 @@ print(f"Loaded len(candles) rows of data for {pair} from {data_location}") | ||||
| candles.head() | ||||
| ``` | ||||
|  | ||||
| ## Strategy debugging example   | ||||
| Further Data analysis documents: | ||||
|  | ||||
| Debugging a strategy can be time-consuming. FreqTrade offers helper functions to visualize raw data. | ||||
|  | ||||
| ### Define variables used in analyses   | ||||
|  | ||||
| You can override strategy settings as demonstrated below. | ||||
|  | ||||
| ```python | ||||
| # Customize these according to your needs. | ||||
|  | ||||
| # Define some constants | ||||
| ticker_interval = "5m" | ||||
| # Name of the strategy class | ||||
| strategy_name = 'SampleStrategy' | ||||
| # Path to user data | ||||
| user_data_dir = 'user_data' | ||||
| # Location of the strategy | ||||
| strategy_location = Path(user_data_dir, 'strategies') | ||||
| # Location of the data | ||||
| data_location = Path(user_data_dir, 'data', 'binance') | ||||
| # Pair to analyze - Only use one pair here | ||||
| pair = "BTC_USDT" | ||||
| ``` | ||||
|  | ||||
| ### Load exchange data | ||||
|  | ||||
| ```python | ||||
| from pathlib import Path | ||||
| from freqtrade.data.history import load_pair_history | ||||
|  | ||||
| # Load data using values set above | ||||
| candles = load_pair_history(datadir=data_location, | ||||
|                             ticker_interval=ticker_interval, | ||||
|                             pair=pair) | ||||
|  | ||||
| # Confirm success | ||||
| print(f"Loaded {len(candles)} rows of data for {pair} from {data_location}") | ||||
| candles.head() | ||||
| ``` | ||||
|  | ||||
| ### Load and run strategy   | ||||
|  | ||||
| * Rerun each time the strategy file is changed | ||||
|  | ||||
| ```python | ||||
| from freqtrade.resolvers import StrategyResolver | ||||
|  | ||||
| # Load strategy using values set above | ||||
| strategy = StrategyResolver({'strategy': strategy_name, | ||||
|                             'user_data_dir': user_data_dir, | ||||
|                             'strategy_path': strategy_location}).strategy | ||||
|  | ||||
| # Generate buy/sell signals using strategy | ||||
| df = strategy.analyze_ticker(candles, {'pair': pair}) | ||||
| ``` | ||||
|  | ||||
| ### Display the trade details | ||||
|  | ||||
| * Note that using `data.tail()` is preferable to `data.head()` as most indicators have some "startup" data at the top of the dataframe. | ||||
| * Some possible problems | ||||
|     * Columns with NaN values at the end of the dataframe | ||||
|     * Columns used in `crossed*()` functions with completely different units | ||||
| * Comparison with full backtest | ||||
|     * having 200 buy signals as output for one pair from `analyze_ticker()` does not necessarily mean that 200 trades will be made during backtesting. | ||||
|     * Assuming you use only one condition such as, `df['rsi'] < 30` as buy condition, this will generate multiple "buy" signals for each pair in sequence (until rsi returns > 29). The bot will only buy on the first of these signals (and also only if a trade-slot ("max_open_trades") is still available), or on one of the middle signals, as soon as a "slot" becomes available.   | ||||
|  | ||||
| ```python | ||||
| # Report results | ||||
| print(f"Generated {df['buy'].sum()} buy signals") | ||||
| data = df.set_index('date', drop=True) | ||||
| data.tail() | ||||
| ``` | ||||
| * [Strategy debugging](strategy_analysis_example.md) | ||||
| * [Plotting](plotting.md) | ||||
|  | ||||
| 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