Files
freqtrade/en/develop/plotting/index.html

2564 lines
70 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">
<meta name="description" content="Freqtrade is a free and open source crypto trading bot written in Python, designed to support all major exchanges and be controlled via Telegram or builtin Web UI">
<link rel="canonical" href="https://www.freqtrade.io/en/stable/plotting/">
<link rel="prev" href="../utils/">
<link rel="next" href="../exchanges/">
<link rel="icon" href="../images/logo.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.0">
<title>Plotting - Freqtrade</title>
<link rel="stylesheet" href="../assets/stylesheets/main.618322db.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.ab4e12ef.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>
<script id="__analytics">function __md_analytics(){function e(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],e("js",new Date),e("config","G-VH170LG9M5"),document.addEventListener("DOMContentLoaded",(function(){document.forms.search&&document.forms.search.query.addEventListener("blur",(function(){this.value&&e("event","search",{search_term:this.value})}));document$.subscribe((function(){var t=document.forms.feedback;if(void 0!==t)for(var a of t.querySelectorAll("[type=submit]"))a.addEventListener("click",(function(a){a.preventDefault();var n=document.location.pathname,d=this.getAttribute("data-md-value");e("event","feedback",{page:n,data:d}),t.firstElementChild.disabled=!0;var r=t.querySelector(".md-feedback__note [data-md-value='"+d+"']");r&&(r.hidden=!1)})),t.hidden=!1})),location$.subscribe((function(t){e("config","G-VH170LG9M5",{page_path:t.pathname})}))}));var t=document.createElement("script");t.async=!0,t.src="https://www.googletagmanager.com/gtag/js?id=G-VH170LG9M5",document.getElementById("__analytics").insertAdjacentElement("afterEnd",t)}</script>
<script>"undefined"!=typeof __md_analytics&&__md_analytics()</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 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></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>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="tear" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6m0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4M7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3"/></svg>
</label>
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="tear" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3"/></svg>
</label>
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<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.52 6.52 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 5"/></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.52 6.52 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 5"/></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 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
</a>
<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 12z"/></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>
<div class="md-header__source">
<a href="https://github.com/freqtrade/freqtrade" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</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">
<!-- Main navigation -->
<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>
<div class="md-nav__source">
<a href="https://github.com/freqtrade/freqtrade" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<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_quickstart/" class="md-nav__link">
<span class="md-ellipsis">
Quickstart with Docker
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-ellipsis">
Installation
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Installation
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../installation/" class="md-nav__link">
<span class="md-ellipsis">
Linux/MacOS/Raspberry
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../windows_installation/" class="md-nav__link">
<span class="md-ellipsis">
Windows
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../bot-basics/" class="md-nav__link">
<span class="md-ellipsis">
Freqtrade Basics
</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-101/" class="md-nav__link">
<span class="md-ellipsis">
Strategy Quickstart
</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="../strategy-callbacks/" class="md-nav__link">
<span class="md-ellipsis">
Strategy Callbacks
</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="../plugins/" class="md-nav__link">
<span class="md-ellipsis">
Plugins
</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_12" >
<label class="md-nav__link" for="__nav_12" id="__nav_12_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_12_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_12">
<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="../freq-ui/" class="md-nav__link">
<span class="md-ellipsis">
freqUI
</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>
<li class="md-nav__item">
<a href="../webhook-config/" class="md-nav__link">
<span class="md-ellipsis">
Web Hook
</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 md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_16" >
<label class="md-nav__link" for="__nav_16" id="__nav_16_label" tabindex="0">
<span class="md-ellipsis">
FreqAI
</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="false">
<label class="md-nav__title" for="__nav_16">
<span class="md-nav__icon md-icon"></span>
FreqAI
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../freqai/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../freqai-configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../freqai-parameter-table/" class="md-nav__link">
<span class="md-ellipsis">
Parameter table
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../freqai-feature-engineering/" class="md-nav__link">
<span class="md-ellipsis">
Feature engineering
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../freqai-running/" class="md-nav__link">
<span class="md-ellipsis">
Running FreqAI
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../freqai-reinforcement-learning/" class="md-nav__link">
<span class="md-ellipsis">
Reinforcement Learning
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../freqai-developers/" class="md-nav__link">
<span class="md-ellipsis">
Developer guide
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../leverage/" class="md-nav__link">
<span class="md-ellipsis">
Short / Leverage
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../utils/" class="md-nav__link">
<span class="md-ellipsis">
Utility Sub-commands
</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>
<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 md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_21" >
<label class="md-nav__link" for="__nav_21" id="__nav_21_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_21_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_21">
<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">
<a href="../advanced-backtesting/" class="md-nav__link">
<span class="md-ellipsis">
Backtest analysis
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_22" >
<label class="md-nav__link" for="__nav_22" id="__nav_22_label" tabindex="0">
<span class="md-ellipsis">
Advanced Topics
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_22_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_22">
<span class="md-nav__icon md-icon"></span>
Advanced Topics
</label>
<ul class="md-nav__list" data-md-scrollfix>
<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="../trade-object/" class="md-nav__link">
<span class="md-ellipsis">
Trade Object
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../lookahead-analysis/" class="md-nav__link">
<span class="md-ellipsis">
Lookahead analysis
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../recursive-analysis/" class="md-nav__link">
<span class="md-ellipsis">
Recursive analysis
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../strategy-advanced/" class="md-nav__link">
<span class="md-ellipsis">
Advanced Strategy
</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="../advanced-orderflow/" class="md-nav__link">
<span class="md-ellipsis">
Orderflow
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../producer-consumer/" class="md-nav__link">
<span class="md-ellipsis">
Producer/Consumer mode
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../sql_cheatsheet/" class="md-nav__link">
<span class="md-ellipsis">
SQL Cheat-sheet
</span>
</a>
</li>
</ul>
</nav>
</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">
<a href="../strategy_migration/" class="md-nav__link">
<span class="md-ellipsis">
Strategy migration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../updating/" class="md-nav__link">
<span class="md-ellipsis">
Updating Freqtrade
</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>
<!-- Table of contents -->
<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">
<a href="https://github.com/freqtrade/freqtrade/edit/develop/docs/plotting.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
</a>
<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>
<div class="admonition warning">
<p class="admonition-title">Deprecated</p>
<p>The commands described in this page (<code>plot-dataframe</code>, <code>plot-profit</code>) should be considered deprecated and are in maintenance mode.
This is mostly for the performance problems even medium sized plots can cause, but also because "store a file and open it in a browser" isn't very intuitive from a UI perspective.</p>
<p>While there are no immediate plans to remove them, they are not actively maintained - and may be removed short-term should major changes be required to keep them working.</p>
<p>Please use <a href="../freq-ui/">FreqUI</a> for plotting needs, which doesn't struggle with the same performance problems.</p>
</div>
<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 candlesticks 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><span class="go">usage: freqtrade plot-dataframe [-h] [-v] [--no-color] [--logfile FILE] [-V]</span>
<span class="go"> [-c PATH] [-d PATH] [--userdir PATH] [-s NAME]</span>
<span class="go"> [--strategy-path PATH]</span>
<span class="go"> [--recursive-strategy-search]</span>
<span class="go"> [--freqaimodel NAME] [--freqaimodel-path PATH]</span>
<span class="go"> [-p PAIRS [PAIRS ...]]</span>
<span class="go"> [--indicators1 INDICATORS1 [INDICATORS1 ...]]</span>
<span class="go"> [--indicators2 INDICATORS2 [INDICATORS2 ...]]</span>
<span class="go"> [--plot-limit INT] [--db-url PATH]</span>
<span class="go"> [--trade-source {DB,file}]</span>
<span class="go"> [--export {none,trades,signals}]</span>
<span class="go"> [--backtest-filename PATH]</span>
<span class="go"> [--timerange TIMERANGE] [-i TIMEFRAME]</span>
<span class="go"> [--no-trades]</span>
<span class="go">options:</span>
<span class="go"> -h, --help show this help message and exit</span>
<span class="go"> -p, --pairs PAIRS [PAIRS ...]</span>
<span class="go"> Limit command to these pairs. Pairs are space-</span>
<span class="go"> separated.</span>
<span class="go"> --indicators1 INDICATORS1 [INDICATORS1 ...]</span>
<span class="go"> Set indicators from your strategy you want in the</span>
<span class="go"> first row of the graph. Space-separated list. Example:</span>
<span class="go"> `ema3 ema5`. Default: `[&#39;sma&#39;, &#39;ema3&#39;, &#39;ema5&#39;]`.</span>
<span class="go"> --indicators2 INDICATORS2 [INDICATORS2 ...]</span>
<span class="go"> Set indicators from your strategy you want in the</span>
<span class="go"> third row of the graph. Space-separated list. Example:</span>
<span class="go"> `fastd fastk`. Default: `[&#39;macd&#39;, &#39;macdsignal&#39;]`.</span>
<span class="go"> --plot-limit INT Specify tick limit for plotting. Notice: too high</span>
<span class="go"> values cause huge files. Default: 750.</span>
<span class="go"> --db-url PATH Override trades database URL, this is useful in custom</span>
<span class="go"> deployments (default: `sqlite:///tradesv3.sqlite` for</span>
<span class="go"> Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for</span>
<span class="go"> Dry Run).</span>
<span class="go"> --trade-source {DB,file}</span>
<span class="go"> Specify the source for trades (Can be DB or file</span>
<span class="go"> (backtest file)) Default: file</span>
<span class="go"> --export {none,trades,signals}</span>
<span class="go"> Export backtest results (default: trades).</span>
<span class="go"> --backtest-filename, --export-filename PATH</span>
<span class="go"> Use this filename for backtest results.Example:</span>
<span class="go"> `--backtest-</span>
<span class="go"> filename=backtest_results_2020-09-27_16-20-48.json`.</span>
<span class="go"> Assumes either `user_data/backtest_results/` or</span>
<span class="go"> `--export-directory` as base directory.</span>
<span class="go"> --timerange TIMERANGE</span>
<span class="go"> Specify what timerange of data to use.</span>
<span class="go"> -i, --timeframe TIMEFRAME</span>
<span class="go"> Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).</span>
<span class="go"> --no-trades Skip using trades from backtesting file and DB.</span>
<span class="go">Common arguments:</span>
<span class="go"> -v, --verbose Verbose mode (-vv for more, -vvv to get all messages).</span>
<span class="go"> --no-color Disable colorization of hyperopt results. May be</span>
<span class="go"> useful if you are redirecting output to a file.</span>
<span class="go"> --logfile, --log-file FILE</span>
<span class="go"> Log to the file specified. Special values are:</span>
<span class="go"> &#39;syslog&#39;, &#39;journald&#39;. See the documentation for more</span>
<span class="go"> details.</span>
<span class="go"> -V, --version show program&#39;s version number and exit</span>
<span class="go"> -c, --config PATH Specify configuration file (default:</span>
<span class="go"> `userdir/config.json` or `config.json` whichever</span>
<span class="go"> exists). Multiple --config options may be used. Can be</span>
<span class="go"> set to `-` to read config from stdin.</span>
<span class="go"> -d, --datadir, --data-dir PATH</span>
<span class="go"> Path to the base directory of the exchange with</span>
<span class="go"> historical backtesting data. To see futures data, use</span>
<span class="go"> trading-mode additionally.</span>
<span class="go"> --userdir, --user-data-dir PATH</span>
<span class="go"> Path to userdata directory.</span>
<span class="go">Strategy arguments:</span>
<span class="go"> -s, --strategy NAME Specify strategy class name which will be used by the</span>
<span class="go"> bot.</span>
<span class="go"> --strategy-path PATH Specify additional strategy lookup path.</span>
<span class="go"> --recursive-strategy-search</span>
<span class="go"> Recursively search for a strategy in the strategies</span>
<span class="go"> folder.</span>
<span class="go"> --freqaimodel NAME Specify a custom freqaimodels.</span>
<span class="go"> --freqaimodel-path PATH</span>
<span class="go"> Specify additional lookup path for freqaimodels.</span>
</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<span class="w"> </span>--strategy<span class="w"> </span>AwesomeStrategy
</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="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 <code>plot_config</code> include:</p>
<ul>
<li>Specify colors per indicator</li>
<li>Specify additional subplots</li>
<li>Specify indicator pairs to fill area in between</li>
</ul>
<p>The sample plot configuration below specifies fixed colors for the indicators. Otherwise, consecutive plots may produce different color schemes each time, making comparisons difficult.
It also allows multiple subplots to display both MACD and RSI at the same time.</p>
<p>Plot type can be configured using <code>type</code> key. Possible types are:</p>
<ul>
<li><code>scatter</code> corresponding to <code>plotly.graph_objects.Scatter</code> class (default).</li>
<li><code>bar</code> corresponding to <code>plotly.graph_objects.Bar</code> class.</li>
</ul>
<p>Extra parameters to <code>plotly.graph_objects.*</code> constructor can be specified in <code>plotly</code> dict.</p>
<p>Sample configuration with inline comments explaining the process:</p>
<div class="highlight"><pre><span></span><code><span class="nd">@property</span>
<span class="k">def</span><span class="w"> </span><span class="nf">plot_config</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> There are a lot of solutions how to build the return dictionary.</span>
<span class="sd"> The only important point is the return value.</span>
<span class="sd"> Example:</span>
<span class="sd"> plot_config = {&#39;main_plot&#39;: {}, &#39;subplots&#39;: {}}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">plot_config</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">plot_config</span><span class="p">[</span><span class="s1">&#39;main_plot&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
<span class="c1"># Configuration for main plot indicators.</span>
<span class="c1"># Assumes 2 parameters, emashort and emalong to be specified.</span>
<span class="sa">f</span><span class="s1">&#39;ema_</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">emashort</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s1">&#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="sa">f</span><span class="s1">&#39;ema_</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">emalong</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s1">&#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="c1"># fill area between senkou_a and senkou_b</span>
<span class="s1">&#39;senkou_a&#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;green&#39;</span><span class="p">,</span> <span class="c1">#optional</span>
<span class="s1">&#39;fill_to&#39;</span><span class="p">:</span> <span class="s1">&#39;senkou_b&#39;</span><span class="p">,</span>
<span class="s1">&#39;fill_label&#39;</span><span class="p">:</span> <span class="s1">&#39;Ichimoku Cloud&#39;</span><span class="p">,</span> <span class="c1">#optional</span>
<span class="s1">&#39;fill_color&#39;</span><span class="p">:</span> <span class="s1">&#39;rgba(255,76,46,0.2)&#39;</span><span class="p">,</span> <span class="c1">#optional</span>
<span class="p">},</span>
<span class="c1"># plot senkou_b, too. Not only the area to it.</span>
<span class="s1">&#39;senkou_b&#39;</span><span class="p">:</span> <span class="p">{}</span>
<span class="p">}</span>
<span class="n">plot_config</span><span class="p">[</span><span class="s1">&#39;subplots&#39;</span><span class="p">]</span> <span class="o">=</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;fill_to&#39;</span><span class="p">:</span> <span class="s1">&#39;macdhist&#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="s1">&#39;macdhist&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;type&#39;</span><span class="p">:</span> <span class="s1">&#39;bar&#39;</span><span class="p">,</span> <span class="s1">&#39;plotly&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;opacity&#39;</span><span class="p">:</span> <span class="mf">0.9</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="k">return</span> <span class="n">plot_config</span>
</code></pre></div>
<details class="note">
<summary>As attribute (former method)</summary>
<p>Assigning plot_config is also possible as Attribute (this used to be the default way).
This has the disadvantage that strategy parameters are not available, preventing certain configurations from working.</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="c1"># fill area between senkou_a and senkou_b</span>
<span class="s1">&#39;senkou_a&#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;green&#39;</span><span class="p">,</span> <span class="c1">#optional</span>
<span class="s1">&#39;fill_to&#39;</span><span class="p">:</span> <span class="s1">&#39;senkou_b&#39;</span><span class="p">,</span>
<span class="s1">&#39;fill_label&#39;</span><span class="p">:</span> <span class="s1">&#39;Ichimoku Cloud&#39;</span><span class="p">,</span> <span class="c1">#optional</span>
<span class="s1">&#39;fill_color&#39;</span><span class="p">:</span> <span class="s1">&#39;rgba(255,76,46,0.2)&#39;</span><span class="p">,</span> <span class="c1">#optional</span>
<span class="p">},</span>
<span class="c1"># plot senkou_b, too. Not only the area to it.</span>
<span class="s1">&#39;senkou_b&#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;fill_to&#39;</span><span class="p">:</span> <span class="s1">&#39;macdhist&#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="s1">&#39;macdhist&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;type&#39;</span><span class="p">:</span> <span class="s1">&#39;bar&#39;</span><span class="p">,</span> <span class="s1">&#39;plotly&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;opacity&#39;</span><span class="p">:</span> <span class="mf">0.9</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>
</details>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The above configuration assumes that <code>ema10</code>, <code>ema50</code>, <code>senkou_a</code>, <code>senkou_b</code>,
<code>macd</code>, <code>macdsignal</code>, <code>macdhist</code> and <code>rsi</code> are columns in the DataFrame created by the strategy.</p>
</div>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p><code>plotly</code> arguments are only supported with plotly library and will not work with freq-ui.</p>
</div>
<div class="admonition note">
<p class="admonition-title">Trade position adjustments</p>
<p>If <code>position_adjustment_enable</code> / <code>adjust_trade_position()</code> is used, the trade initial buy price is averaged over multiple orders and the trade start price will most likely appear outside the candle range.</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>
<li>Parallelism of trades.</li>
<li>Underwater (Periods of drawdown).</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.
This graph will also highlight the start (and end) of the Max drawdown period.</p>
<p>The third graph can be useful to spot outliers, events in pairs that cause profit spikes.</p>
<p>The forth graph can help you analyze trade parallelism, showing how often max_open_trades have been maxed out.</p>
<p>Possible options for the <code>freqtrade plot-profit</code> subcommand:</p>
<div class="highlight"><pre><span></span><code><span class="go">usage: freqtrade plot-profit [-h] [-v] [--no-color] [--logfile FILE] [-V]</span>
<span class="go"> [-c PATH] [-d PATH] [--userdir PATH] [-s NAME]</span>
<span class="go"> [--strategy-path PATH]</span>
<span class="go"> [--recursive-strategy-search]</span>
<span class="go"> [--freqaimodel NAME] [--freqaimodel-path PATH]</span>
<span class="go"> [-p PAIRS [PAIRS ...]] [--timerange TIMERANGE]</span>
<span class="go"> [--export {none,trades,signals}]</span>
<span class="go"> [--backtest-filename PATH] [--db-url PATH]</span>
<span class="go"> [--trade-source {DB,file}] [-i TIMEFRAME]</span>
<span class="go"> [--auto-open]</span>
<span class="go">options:</span>
<span class="go"> -h, --help show this help message and exit</span>
<span class="go"> -p, --pairs PAIRS [PAIRS ...]</span>
<span class="go"> Limit command to these pairs. Pairs are space-</span>
<span class="go"> separated.</span>
<span class="go"> --timerange TIMERANGE</span>
<span class="go"> Specify what timerange of data to use.</span>
<span class="go"> --export {none,trades,signals}</span>
<span class="go"> Export backtest results (default: trades).</span>
<span class="go"> --backtest-filename, --export-filename PATH</span>
<span class="go"> Use this filename for backtest results.Example:</span>
<span class="go"> `--backtest-</span>
<span class="go"> filename=backtest_results_2020-09-27_16-20-48.json`.</span>
<span class="go"> Assumes either `user_data/backtest_results/` or</span>
<span class="go"> `--export-directory` as base directory.</span>
<span class="go"> --db-url PATH Override trades database URL, this is useful in custom</span>
<span class="go"> deployments (default: `sqlite:///tradesv3.sqlite` for</span>
<span class="go"> Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for</span>
<span class="go"> Dry Run).</span>
<span class="go"> --trade-source {DB,file}</span>
<span class="go"> Specify the source for trades (Can be DB or file</span>
<span class="go"> (backtest file)) Default: file</span>
<span class="go"> -i, --timeframe TIMEFRAME</span>
<span class="go"> Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).</span>
<span class="go"> --auto-open Automatically open generated plot.</span>
<span class="go">Common arguments:</span>
<span class="go"> -v, --verbose Verbose mode (-vv for more, -vvv to get all messages).</span>
<span class="go"> --no-color Disable colorization of hyperopt results. May be</span>
<span class="go"> useful if you are redirecting output to a file.</span>
<span class="go"> --logfile, --log-file FILE</span>
<span class="go"> Log to the file specified. Special values are:</span>
<span class="go"> &#39;syslog&#39;, &#39;journald&#39;. See the documentation for more</span>
<span class="go"> details.</span>
<span class="go"> -V, --version show program&#39;s version number and exit</span>
<span class="go"> -c, --config PATH Specify configuration file (default:</span>
<span class="go"> `userdir/config.json` or `config.json` whichever</span>
<span class="go"> exists). Multiple --config options may be used. Can be</span>
<span class="go"> set to `-` to read config from stdin.</span>
<span class="go"> -d, --datadir, --data-dir PATH</span>
<span class="go"> Path to the base directory of the exchange with</span>
<span class="go"> historical backtesting data. To see futures data, use</span>
<span class="go"> trading-mode additionally.</span>
<span class="go"> --userdir, --user-data-dir PATH</span>
<span class="go"> Path to userdata directory.</span>
<span class="go">Strategy arguments:</span>
<span class="go"> -s, --strategy NAME Specify strategy class name which will be used by the</span>
<span class="go"> bot.</span>
<span class="go"> --strategy-path PATH Specify additional strategy lookup path.</span>
<span class="go"> --recursive-strategy-search</span>
<span class="go"> Recursively search for a strategy in the strategies</span>
<span class="go"> folder.</span>
<span class="go"> --freqaimodel NAME Specify a custom freqaimodels.</span>
<span class="go"> --freqaimodel-path PATH</span>
<span class="go"> Specify additional lookup path for freqaimodels.</span>
</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.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>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href="../utils/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Utility Sub-commands">
<div class="md-footer__button md-icon">
<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 11z"/></svg>
</div>
<div class="md-footer__title">
<span class="md-footer__direction">
Previous
</span>
<div class="md-ellipsis">
Utility Sub-commands
</div>
</div>
</a>
<a href="../exchanges/" class="md-footer__link md-footer__link--next" aria-label="Next: Exchange-specific Notes">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
Exchange-specific Notes
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
</div>
</a>
</nav>
<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>
<!-- Place this tag in your head or just before your close body tag. -->
<script src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["content.code.annotate", "search.share", "content.code.copy", "content.action.edit", "navigation.top", "navigation.footer"], "search": "../assets/javascripts/workers/search.7a47a382.min.js", "tags": null, "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": {"alias": true, "provider": "mike"}}</script>
<script src="../assets/javascripts/bundle.e71a0d61.min.js"></script>
<script src="../javascripts/config.js"></script>
<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</body>
</html>