add plotting for backtested trades
This commit is contained in:
parent
0440a19171
commit
3cedace2f6
@ -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(
|
||||||
|
Loading…
Reference in New Issue
Block a user