add plotting for backtested trades

This commit is contained in:
xmatthias 2018-06-23 19:54:27 +02:00
parent 0440a19171
commit 3cedace2f6

View File

@ -27,9 +27,12 @@ Example of usage:
import logging import logging
import os import os
import sys import sys
import json
from pathlib import Path
from argparse import Namespace from argparse import Namespace
from typing import Dict, List, Any from typing import Dict, List, Any
import pandas as pd
import plotly.graph_objs as go import plotly.graph_objs as go
from plotly import tools from plotly import tools
from plotly.offline import plot from plotly.offline import plot
@ -103,10 +106,42 @@ def plot_analyzed_dataframe(args: Namespace) -> None:
exit() exit()
# Get trades already made from the DB # Get trades already made from the DB
trades: List[Trade] = [] trades: pd.DataFrame = pd.DataFrame()
if args.db_url: if args.db_url:
persistence.init(_CONF) persistence.init(_CONF)
trades = Trade.query.filter(Trade.pair.is_(pair)).all() trades_ = Trade.query.filter(Trade.pair.is_(pair)).all()
# columns = ["pair", "profit", "opents", "closets", "index", "duration"]
columns = ["pair", "profit", "opents", "closets", "open_rate", "close_rate", "duration"]
trades = pd.DataFrame([(t.pair, t.calc_profit(),
t.open_date, t.close_date,
t.open_rate, t.close_rate,
t.close_date.timestamp() - t.open_date.timestamp())
for t in trades_], columns=columns)
if args.exportfilename:
file = Path(args.exportfilename)
# must align with columns in backtest.py
columns = ["pair", "profit", "opents", "closets", "index", "duration",
"open_rate", "close_rate", "open_at_end"]
with file.open() as f:
data = json.load(f)
trades = pd.DataFrame(data, columns=columns)
trades = trades.loc[trades["pair"] == pair]
if timerange:
if timerange.starttype == 'date':
trades = trades.loc[trades["opents"] >= timerange.startts]
if timerange.stoptype == 'date':
trades = trades.loc[trades["opents"] <= timerange.stopts]
trades['opents'] = pd.to_datetime(trades['opents'],
unit='s',
utc=True,
infer_datetime_format=True)
trades['closets'] = pd.to_datetime(trades['closets'],
unit='s',
utc=True,
infer_datetime_format=True)
dataframes = analyze.tickerdata_to_dataframe(tickers) dataframes = analyze.tickerdata_to_dataframe(tickers)
dataframe = dataframes[pair] dataframe = dataframes[pair]
@ -126,7 +161,7 @@ def plot_analyzed_dataframe(args: Namespace) -> None:
plot(fig, filename=os.path.join('user_data', 'freqtrade-plot.html')) plot(fig, filename=os.path.join('user_data', 'freqtrade-plot.html'))
def generate_graph(pair, trades, data, args) -> tools.make_subplots: def generate_graph(pair, trades: pd.DataFrame, data: pd.DataFrame, args) -> tools.make_subplots:
""" """
Generate the graph from the data generated by Backtesting or from DB Generate the graph from the data generated by Backtesting or from DB
:param pair: Pair to Display on the graph :param pair: Pair to Display on the graph
@ -187,8 +222,8 @@ def generate_graph(pair, trades, data, args) -> tools.make_subplots:
) )
trade_buys = go.Scattergl( trade_buys = go.Scattergl(
x=[t.open_date.isoformat() for t in trades], x=trades["opents"],
y=[t.open_rate for t in trades], y=trades["open_rate"],
mode='markers', mode='markers',
name='trade_buy', name='trade_buy',
marker=dict( marker=dict(
@ -199,8 +234,8 @@ def generate_graph(pair, trades, data, args) -> tools.make_subplots:
) )
) )
trade_sells = go.Scattergl( trade_sells = go.Scattergl(
x=[t.close_date.isoformat() for t in trades], x=trades["closets"],
y=[t.close_rate for t in trades], y=trades["close_rate"],
mode='markers', mode='markers',
name='trade_sell', name='trade_sell',
marker=dict( marker=dict(