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 os
import sys
import json
from pathlib import Path
from argparse import Namespace
from typing import Dict, List, Any
import pandas as pd
import plotly.graph_objs as go
from plotly import tools
from plotly.offline import plot
@ -103,10 +106,42 @@ def plot_analyzed_dataframe(args: Namespace) -> None:
exit()
# Get trades already made from the DB
trades: List[Trade] = []
trades: pd.DataFrame = pd.DataFrame()
if args.db_url:
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)
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'))
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
: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(
x=[t.open_date.isoformat() for t in trades],
y=[t.open_rate for t in trades],
x=trades["opents"],
y=trades["open_rate"],
mode='markers',
name='trade_buy',
marker=dict(
@ -199,8 +234,8 @@ def generate_graph(pair, trades, data, args) -> tools.make_subplots:
)
)
trade_sells = go.Scattergl(
x=[t.close_date.isoformat() for t in trades],
y=[t.close_rate for t in trades],
x=trades["closets"],
y=trades["close_rate"],
mode='markers',
name='trade_sell',
marker=dict(