freqtrade_origin/en/2020.02/plotting/index.html

1293 lines
36 KiB
HTML

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="prev" href="../strategy_analysis_example/">
<link rel="next" href="../sql_cheatsheet/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.30">
<title>Plotting - Freqtrade</title>
<link rel="stylesheet" href="../assets/stylesheets/main.3cba04c6.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../stylesheets/ft.extra.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="tear">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#plotting" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<div data-md-color-scheme="default" data-md-component="outdated" hidden>
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="Freqtrade" class="md-header__button md-logo" aria-label="Freqtrade" data-md-component="logo">
<img src="../images/logo.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Freqtrade
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Plotting
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="Freqtrade" class="md-nav__button md-logo" aria-label="Freqtrade" data-md-component="logo">
<img src="../images/logo.png" alt="logo">
</a>
Freqtrade
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../docker/" class="md-nav__link">
<span class="md-ellipsis">
Installation Docker
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../installation/" class="md-nav__link">
<span class="md-ellipsis">
Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../strategy-customization/" class="md-nav__link">
<span class="md-ellipsis">
Strategy Customization
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../stoploss/" class="md-nav__link">
<span class="md-ellipsis">
Stoploss
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../bot-usage/" class="md-nav__link">
<span class="md-ellipsis">
Start the bot
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" >
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
<span class="md-ellipsis">
Control the bot
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
Control the bot
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../telegram-usage/" class="md-nav__link">
<span class="md-ellipsis">
Telegram
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../webhook-config/" class="md-nav__link">
<span class="md-ellipsis">
Web Hook
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../rest-api/" class="md-nav__link">
<span class="md-ellipsis">
REST API
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../data-download/" class="md-nav__link">
<span class="md-ellipsis">
Data Downloading
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../backtesting/" class="md-nav__link">
<span class="md-ellipsis">
Backtesting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../hyperopt/" class="md-nav__link">
<span class="md-ellipsis">
Hyperopt
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../edge/" class="md-nav__link">
<span class="md-ellipsis">
Edge Positioning
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../utils/" class="md-nav__link">
<span class="md-ellipsis">
Utility Subcommands
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../exchanges/" class="md-nav__link">
<span class="md-ellipsis">
Exchange-specific Notes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../faq/" class="md-nav__link">
<span class="md-ellipsis">
FAQ
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_16" checked>
<label class="md-nav__link" for="__nav_16" id="__nav_16_label" tabindex="0">
<span class="md-ellipsis">
Data Analysis
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_16_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_16">
<span class="md-nav__icon md-icon"></span>
Data Analysis
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../data-analysis/" class="md-nav__link">
<span class="md-ellipsis">
Jupyter Notebooks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../strategy_analysis_example/" class="md-nav__link">
<span class="md-ellipsis">
Strategy analysis
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Plotting
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Plotting
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#installation-setup" class="md-nav__link">
<span class="md-ellipsis">
Installation / Setup
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#plot-price-and-indicators" class="md-nav__link">
<span class="md-ellipsis">
Plot price and indicators
</span>
</a>
<nav class="md-nav" aria-label="Plot price and indicators">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#further-usage-examples" class="md-nav__link">
<span class="md-ellipsis">
Further usage examples
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#plot-dataframe-basics" class="md-nav__link">
<span class="md-ellipsis">
Plot dataframe basics
</span>
</a>
<nav class="md-nav" aria-label="Plot dataframe basics">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#advanced-plot-configuration" class="md-nav__link">
<span class="md-ellipsis">
Advanced plot configuration
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#plot-profit" class="md-nav__link">
<span class="md-ellipsis">
Plot profit
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../sql_cheatsheet/" class="md-nav__link">
<span class="md-ellipsis">
SQL Cheatsheet
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../advanced-setup/" class="md-nav__link">
<span class="md-ellipsis">
Advanced Post-installation Tasks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../advanced-hyperopt/" class="md-nav__link">
<span class="md-ellipsis">
Advanced Hyperopt
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../sandbox-testing/" class="md-nav__link">
<span class="md-ellipsis">
Sandbox Testing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../deprecated/" class="md-nav__link">
<span class="md-ellipsis">
Deprecated Features
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../developer/" class="md-nav__link">
<span class="md-ellipsis">
Contributors Guide
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#installation-setup" class="md-nav__link">
<span class="md-ellipsis">
Installation / Setup
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#plot-price-and-indicators" class="md-nav__link">
<span class="md-ellipsis">
Plot price and indicators
</span>
</a>
<nav class="md-nav" aria-label="Plot price and indicators">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#further-usage-examples" class="md-nav__link">
<span class="md-ellipsis">
Further usage examples
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#plot-dataframe-basics" class="md-nav__link">
<span class="md-ellipsis">
Plot dataframe basics
</span>
</a>
<nav class="md-nav" aria-label="Plot dataframe basics">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#advanced-plot-configuration" class="md-nav__link">
<span class="md-ellipsis">
Advanced plot configuration
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#plot-profit" class="md-nav__link">
<span class="md-ellipsis">
Plot profit
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="plotting">Plotting<a class="headerlink" href="#plotting" title="Permanent link">&para;</a></h1>
<p>This page explains how to plot prices, indicators and profits.</p>
<h2 id="installation-setup">Installation / Setup<a class="headerlink" href="#installation-setup" title="Permanent link">&para;</a></h2>
<p>Plotting modules use the Plotly library. You can install / upgrade this by running the following command:</p>
<div class="highlight"><pre><span></span><code>pip<span class="w"> </span>install<span class="w"> </span>-U<span class="w"> </span>-r<span class="w"> </span>requirements-plot.txt
</code></pre></div>
<h2 id="plot-price-and-indicators">Plot price and indicators<a class="headerlink" href="#plot-price-and-indicators" title="Permanent link">&para;</a></h2>
<p>The <code>freqtrade plot-dataframe</code> subcommand shows an interactive graph with three subplots:</p>
<ul>
<li>Main plot with candlestics and indicators following price (sma/ema)</li>
<li>Volume bars</li>
<li>Additional indicators as specified by <code>--indicators2</code></li>
</ul>
<p><img alt="plot-dataframe" src="../assets/plot-dataframe.png" /></p>
<p>Possible arguments:</p>
<div class="highlight"><pre><span></span><code>usage: freqtrade plot-dataframe [-h] [-v] [--logfile FILE] [-V] [-c PATH] [-d PATH] [--userdir PATH] [-s NAME]
[--strategy-path PATH] [-p PAIRS [PAIRS ...]] [--indicators1 INDICATORS1 [INDICATORS1 ...]]
[--indicators2 INDICATORS2 [INDICATORS2 ...]] [--plot-limit INT] [--db-url PATH]
[--trade-source {DB,file}] [--export EXPORT] [--export-filename PATH] [--timerange TIMERANGE]
[-i TICKER_INTERVAL]
optional arguments:
-h, --help show this help message and exit
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Show profits for only these pairs. Pairs are space-separated.
--indicators1 INDICATORS1 [INDICATORS1 ...]
Set indicators from your strategy you want in the first row of the graph. Space-separated list. Example:
`ema3 ema5`. Default: `[&#39;sma&#39;, &#39;ema3&#39;, &#39;ema5&#39;]`.
--indicators2 INDICATORS2 [INDICATORS2 ...]
Set indicators from your strategy you want in the third row of the graph. Space-separated list. Example:
`fastd fastk`. Default: `[&#39;macd&#39;, &#39;macdsignal&#39;]`.
--plot-limit INT Specify tick limit for plotting. Notice: too high values cause huge files. Default: 750.
--db-url PATH Override trades database URL, this is useful in custom deployments (default: `sqlite:///tradesv3.sqlite`
for Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for Dry Run).
--trade-source {DB,file}
Specify the source for trades (Can be DB or file (backtest file)) Default: file
--export EXPORT Export backtest results, argument are: trades. Example: `--export=trades`
--export-filename PATH
Save backtest results to the file with this filename. Requires `--export` to be set as well. Example:
`--export-filename=user_data/backtest_results/backtest_today.json`
--timerange TIMERANGE
Specify what timerange of data to use.
-i TICKER_INTERVAL, --ticker-interval TICKER_INTERVAL
Specify ticker interval (`1m`, `5m`, `30m`, `1h`, `1d`).
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--logfile FILE Log to the file specified. Special values are: &#39;syslog&#39;, &#39;journald&#39;. See the documentation for more
details.
-V, --version show program&#39;s version number and exit
-c PATH, --config PATH
Specify configuration file (default: `config.json`). Multiple --config options may be used. Can be set to
`-` to read config from stdin.
-d PATH, --datadir PATH
Path to directory with historical backtesting data.
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
Strategy arguments:
-s NAME, --strategy NAME
Specify strategy class name which will be used by the bot.
--strategy-path PATH Specify additional strategy lookup path.
</code></pre></div>
<p>Example:</p>
<div class="highlight"><pre><span></span><code>freqtrade<span class="w"> </span>plot-dataframe<span class="w"> </span>-p<span class="w"> </span>BTC/ETH
</code></pre></div>
<p>The <code>-p/--pairs</code> argument can be used to specify pairs you would like to plot.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The <code>freqtrade plot-dataframe</code> subcommand generates one plot-file per pair.</p>
</div>
<p>Specify custom indicators.
Use <code>--indicators1</code> for the main plot and <code>--indicators2</code> for the subplot below (if values are in a different range than prices).</p>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>You will almost certainly want to specify a custom strategy! This can be done by adding <code>-s Classname</code> / <code>--strategy ClassName</code> to the command.</p>
</div>
<div class="highlight"><pre><span></span><code>freqtrade<span class="w"> </span>plot-dataframe<span class="w"> </span>--strategy<span class="w"> </span>AwesomeStrategy<span class="w"> </span>-p<span class="w"> </span>BTC/ETH<span class="w"> </span>--indicators1<span class="w"> </span>sma<span class="w"> </span>ema<span class="w"> </span>--indicators2<span class="w"> </span>macd
</code></pre></div>
<h3 id="further-usage-examples">Further usage examples<a class="headerlink" href="#further-usage-examples" title="Permanent link">&para;</a></h3>
<p>To plot multiple pairs, separate them with a space:</p>
<div class="highlight"><pre><span></span><code>freqtrade<span class="w"> </span>plot-dataframe<span class="w"> </span>--strategy<span class="w"> </span>AwesomeStrategy<span class="w"> </span>-p<span class="w"> </span>BTC/ETH<span class="w"> </span>XRP/ETH
</code></pre></div>
<p>To plot a timerange (to zoom in)</p>
<div class="highlight"><pre><span></span><code>freqtrade<span class="w"> </span>plot-dataframe<span class="w"> </span>--strategy<span class="w"> </span>AwesomeStrategy<span class="w"> </span>-p<span class="w"> </span>BTC/ETH<span class="w"> </span>--timerange<span class="o">=</span><span class="m">20180801</span>-20180805
</code></pre></div>
<p>To plot trades stored in a database use <code>--db-url</code> in combination with <code>--trade-source DB</code>:</p>
<div class="highlight"><pre><span></span><code>freqtrade<span class="w"> </span>plot-dataframe<span class="w"> </span>--strategy<span class="w"> </span>AwesomeStrategy<span class="w"> </span>--db-url<span class="w"> </span>sqlite:///tradesv3.dry_run.sqlite<span class="w"> </span>-p<span class="w"> </span>BTC/ETH<span class="w"> </span>--trade-source<span class="w"> </span>DB
</code></pre></div>
<p>To plot trades from a backtesting result, use <code>--export-filename &lt;filename&gt;</code></p>
<div class="highlight"><pre><span></span><code>freqtrade<span class="w"> </span>plot-dataframe<span class="w"> </span>--strategy<span class="w"> </span>AwesomeStrategy<span class="w"> </span>--export-filename<span class="w"> </span>user_data/backtest_results/backtest-result.json<span class="w"> </span>-p<span class="w"> </span>BTC/ETH
</code></pre></div>
<h3 id="plot-dataframe-basics">Plot dataframe basics<a class="headerlink" href="#plot-dataframe-basics" title="Permanent link">&para;</a></h3>
<p><img alt="plot-dataframe2" src="../assets/plot-dataframe2.png" /></p>
<p>The <code>plot-dataframe</code> subcommand requires backtesting data, a strategy and either a backtesting-results file or a database, containing trades corresponding to the strategy.</p>
<p>The resulting plot will have the following elements:</p>
<ul>
<li>Green triangles: Buy signals from the strategy. (Note: not every buy signal generates a trade, compare to cyan circles.)</li>
<li>Red triangles: Sell signals from the strategy. (Also, not every sell signal terminates a trade, compare to red and green squares.)</li>
<li>Cyan circles: Trade entry points.</li>
<li>Red squares: Trade exit points for trades with loss or 0% profit.</li>
<li>Green squares: Trade exit points for profitable trades.</li>
<li>Indicators with values corresponding to the candle scale (e.g. SMA/EMA), as specified with <code>--indicators1</code>.</li>
<li>Volume (bar chart at the bottom of the main chart).</li>
<li>Indicators with values in different scales (e.g. MACD, RSI) below the volume bars, as specified with <code>--indicators2</code>.</li>
</ul>
<div class="admonition note">
<p class="admonition-title">Bollinger Bands</p>
<p>Bollinger bands are automatically added to the plot if the columns <code>bb_lowerband</code> and <code>bb_upperband</code> exist, and are painted as a light blue area spanning from the lower band to the upper band.</p>
</div>
<h4 id="advanced-plot-configuration">Advanced plot configuration<a class="headerlink" href="#advanced-plot-configuration" title="Permanent link">&para;</a></h4>
<p>An advanced plot configuration can be specified in the strategy in the <code>plot_config</code> parameter.</p>
<p>Additional features when using plot_config include:</p>
<ul>
<li>Specify colors per indicator</li>
<li>Specify additional subplots</li>
</ul>
<p>The sample plot configuration below specifies fixed colors for the indicators. Otherwise consecutive plots may produce different colorschemes each time, making comparisons difficult.
It also allows multiple subplots to display both MACD and RSI at the same time.</p>
<p>Sample configuration with inline comments explaining the process:</p>
<div class="highlight"><pre><span></span><code> <span class="n">plot_config</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;main_plot&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="c1"># Configuration for main plot indicators.</span>
<span class="c1"># Specifies `ema10` to be red, and `ema50` to be a shade of gray</span>
<span class="s1">&#39;ema10&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;color&#39;</span><span class="p">:</span> <span class="s1">&#39;red&#39;</span><span class="p">},</span>
<span class="s1">&#39;ema50&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;color&#39;</span><span class="p">:</span> <span class="s1">&#39;#CCCCCC&#39;</span><span class="p">},</span>
<span class="c1"># By omitting color, a random color is selected.</span>
<span class="s1">&#39;sar&#39;</span><span class="p">:</span> <span class="p">{},</span>
<span class="p">},</span>
<span class="s1">&#39;subplots&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="c1"># Create subplot MACD</span>
<span class="s2">&quot;MACD&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;macd&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;color&#39;</span><span class="p">:</span> <span class="s1">&#39;blue&#39;</span><span class="p">},</span>
<span class="s1">&#39;macdsignal&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;color&#39;</span><span class="p">:</span> <span class="s1">&#39;orange&#39;</span><span class="p">},</span>
<span class="p">},</span>
<span class="c1"># Additional subplot RSI</span>
<span class="s2">&quot;RSI&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;rsi&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;color&#39;</span><span class="p">:</span> <span class="s1">&#39;red&#39;</span><span class="p">},</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre></div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The above configuration assumes that <code>ema10</code>, <code>ema50</code>, <code>macd</code>, <code>macdsignal</code> and <code>rsi</code> are columns in the DataFrame created by the strategy.</p>
</div>
<h2 id="plot-profit">Plot profit<a class="headerlink" href="#plot-profit" title="Permanent link">&para;</a></h2>
<p><img alt="plot-profit" src="../assets/plot-profit.png" /></p>
<p>The <code>plot-profit</code> subcommand shows an interactive graph with three plots:</p>
<ul>
<li>Average closing price for all pairs.</li>
<li>The summarized profit made by backtesting.
Note that this is not the real-world profit, but more of an estimate.</li>
<li>Profit for each individual pair.</li>
</ul>
<p>The first graph is good to get a grip of how the overall market progresses.</p>
<p>The second graph will show if your algorithm works or doesn't.
Perhaps you want an algorithm that steadily makes small profits, or one that acts less often, but makes big swings.</p>
<p>The third graph can be useful to spot outliers, events in pairs that cause profit spikes.</p>
<p>Possible options for the <code>freqtrade plot-profit</code> subcommand:</p>
<div class="highlight"><pre><span></span><code>usage: freqtrade plot-profit [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH] [-p PAIRS [PAIRS ...]]
[--timerange TIMERANGE] [--export EXPORT]
[--export-filename PATH] [--db-url PATH]
[--trade-source {DB,file}] [-i TICKER_INTERVAL]
optional arguments:
-h, --help show this help message and exit
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Show profits for only these pairs. Pairs are space-
separated.
--timerange TIMERANGE
Specify what timerange of data to use.
--export EXPORT Export backtest results, argument are: trades.
Example: `--export=trades`
--export-filename PATH
Save backtest results to the file with this filename.
Requires `--export` to be set as well. Example:
`--export-filename=user_data/backtest_results/backtest
_today.json`
--db-url PATH Override trades database URL, this is useful in custom
deployments (default: `sqlite:///tradesv3.sqlite` for
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
Dry Run).
--trade-source {DB,file}
Specify the source for trades (Can be DB or file
(backtest file)) Default: file
-i TICKER_INTERVAL, --ticker-interval TICKER_INTERVAL
Specify ticker interval (`1m`, `5m`, `30m`, `1h`,
`1d`).
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--logfile FILE Log to the file specified. Special values are:
&#39;syslog&#39;, &#39;journald&#39;. See the documentation for more
details.
-V, --version show program&#39;s version number and exit
-c PATH, --config PATH
Specify configuration file (default: `config.json`).
Multiple --config options may be used. Can be set to
`-` to read config from stdin.
-d PATH, --datadir PATH
Path to directory with historical backtesting data.
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
</code></pre></div>
<p>The <code>-p/--pairs</code> argument, can be used to limit the pairs that are considered for this calculation.</p>
<p>Examples:</p>
<p>Use custom backtest-export file</p>
<div class="highlight"><pre><span></span><code>freqtrade<span class="w"> </span>plot-profit<span class="w"> </span>-p<span class="w"> </span>LTC/BTC<span class="w"> </span>--export-filename<span class="w"> </span>user_data/backtest_results/backtest-result-Strategy005.json
</code></pre></div>
<p>Use custom database</p>
<div class="highlight"><pre><span></span><code>freqtrade<span class="w"> </span>plot-profit<span class="w"> </span>-p<span class="w"> </span>LTC/BTC<span class="w"> </span>--db-url<span class="w"> </span>sqlite:///tradesv3.sqlite<span class="w"> </span>--trade-source<span class="w"> </span>DB
</code></pre></div>
<div class="highlight"><pre><span></span><code>freqtrade<span class="w"> </span>--datadir<span class="w"> </span>user_data/data/binance_save/<span class="w"> </span>plot-profit<span class="w"> </span>-p<span class="w"> </span>LTC/BTC
</code></pre></div>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": [], "search": "../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
<script src="../assets/javascripts/bundle.fe8b6f2b.min.js"></script>
</body>
</html>