added support for CCI and RSI plots
This commit is contained in:
parent
05ff0e0027
commit
31e5d4d095
@ -255,9 +255,7 @@ class Arguments(object):
|
|||||||
dest='pair',
|
dest='pair',
|
||||||
default=None
|
default=None
|
||||||
)
|
)
|
||||||
"""
|
|
||||||
Parses given arguments for plot scripts.
|
|
||||||
"""
|
|
||||||
self.parser.add_argument(
|
self.parser.add_argument(
|
||||||
'--stop-loss',
|
'--stop-loss',
|
||||||
help='Renders stop/loss informations in the main chart',
|
help='Renders stop/loss informations in the main chart',
|
||||||
@ -265,3 +263,35 @@ class Arguments(object):
|
|||||||
default=False,
|
default=False,
|
||||||
type=bool
|
type=bool
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.parser.add_argument(
|
||||||
|
'--plot-rsi',
|
||||||
|
help='Renders a rsi chart of the given RSI dataframe name, for example --plot-rsi rsi',
|
||||||
|
dest='plotrsi',
|
||||||
|
default=None
|
||||||
|
)
|
||||||
|
|
||||||
|
self.parser.add_argument(
|
||||||
|
'--plot-cci',
|
||||||
|
help='Renders a cci chart of the given RSI dataframe name, for example --plot-cci cci',
|
||||||
|
dest='plotcci',
|
||||||
|
default=None
|
||||||
|
)
|
||||||
|
|
||||||
|
self.parser.add_argument(
|
||||||
|
'--plot-macd',
|
||||||
|
help='Renders a macd chart of the given RSI dataframe name, for example --plot-macd macd',
|
||||||
|
dest='plotmacd',
|
||||||
|
default=None
|
||||||
|
)
|
||||||
|
|
||||||
|
self.parser.add_argument(
|
||||||
|
'--plot-volume',
|
||||||
|
help='plots the volume as a subchart',
|
||||||
|
dest='plotvolume',
|
||||||
|
default=False,
|
||||||
|
type=bool
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,6 +30,59 @@ from freqtrade.configuration import Configuration
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def plot_volume_dataframe(data, fig, args, plotnumber):
|
||||||
|
"""
|
||||||
|
adds the plotting of the volume
|
||||||
|
:param data:
|
||||||
|
:param fig:
|
||||||
|
:param args:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
|
||||||
|
volume = go.Bar(x=data['date'], y=data['volume'], name='Volume')
|
||||||
|
fig.append_trace(volume, plotnumber, 1)
|
||||||
|
|
||||||
|
def plot_macd_dataframe(data, fig, args, plotnumber):
|
||||||
|
"""
|
||||||
|
adds the plotting of the MACD if specified
|
||||||
|
:param data:
|
||||||
|
:param fig:
|
||||||
|
:param args:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
|
||||||
|
macd = go.Scattergl(x=data['date'], y=data[args.plotmacd], name='MACD')
|
||||||
|
macdsignal = go.Scattergl(x=data['date'], y=data[args.plotmacd + 'signal'], name='MACD signal')
|
||||||
|
fig.append_trace(macd, plotnumber, 1)
|
||||||
|
fig.append_trace(macdsignal, plotnumber, 1)
|
||||||
|
|
||||||
|
|
||||||
|
def plot_rsi_dataframe(data, fig, args, plotnumber):
|
||||||
|
"""
|
||||||
|
|
||||||
|
this function plots an additional RSI chart under the exiting charts
|
||||||
|
:param data:
|
||||||
|
:param fig:
|
||||||
|
:param args:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
rsi = go.Scattergl(x=data['date'], y=data[args.plotrsi], name='RSI')
|
||||||
|
fig.append_trace(rsi, plotnumber, 1)
|
||||||
|
|
||||||
|
|
||||||
|
def plot_cci_dataframe(data, fig, args, plotnumber):
|
||||||
|
"""
|
||||||
|
|
||||||
|
this function plots an additional cci chart under the exiting charts
|
||||||
|
:param data:
|
||||||
|
:param fig:
|
||||||
|
:param args:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
chart = go.Scattergl(x=data['date'], y=data[args.plotcci], name='CCI')
|
||||||
|
fig.append_trace(chart, plotnumber, 1)
|
||||||
|
|
||||||
|
|
||||||
def plot_stop_loss_trade(df_sell, fig, analyze, args):
|
def plot_stop_loss_trade(df_sell, fig, analyze, args):
|
||||||
"""
|
"""
|
||||||
plots the stop loss for the associated trades and buys
|
plots the stop loss for the associated trades and buys
|
||||||
@ -231,18 +284,27 @@ def plot_analyzed_dataframe(args: Namespace) -> None:
|
|||||||
line={'color': "red"},
|
line={'color': "red"},
|
||||||
)
|
)
|
||||||
|
|
||||||
macd = go.Scattergl(x=data['date'], y=data['macd'], name='MACD')
|
# ugly hack for now
|
||||||
macdsignal = go.Scattergl(x=data['date'], y=data['macdsignal'], name='MACD signal')
|
rowWidth = [1]
|
||||||
volume = go.Bar(x=data['date'], y=data['volume'], name='Volume')
|
if args.plotvolume:
|
||||||
|
rowWidth.append(1)
|
||||||
|
if args.plotmacd:
|
||||||
|
rowWidth.append(1)
|
||||||
|
if args.plotrsi:
|
||||||
|
rowWidth.append(1)
|
||||||
|
if args.plotcci:
|
||||||
|
rowWidth.append(1)
|
||||||
|
|
||||||
|
# standard layout signal + volume
|
||||||
fig = tools.make_subplots(
|
fig = tools.make_subplots(
|
||||||
rows=3,
|
rows=len(rowWidth),
|
||||||
cols=1,
|
cols=1,
|
||||||
shared_xaxes=True,
|
shared_xaxes=True,
|
||||||
row_width=[1, 1, 4],
|
row_width=rowWidth,
|
||||||
vertical_spacing=0.0001,
|
vertical_spacing=0.0001,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# todo should be optional
|
||||||
fig.append_trace(candles, 1, 1)
|
fig.append_trace(candles, 1, 1)
|
||||||
fig.append_trace(bb_lower, 1, 1)
|
fig.append_trace(bb_lower, 1, 1)
|
||||||
fig.append_trace(bb_middle, 1, 1)
|
fig.append_trace(bb_middle, 1, 1)
|
||||||
@ -252,16 +314,34 @@ def plot_analyzed_dataframe(args: Namespace) -> None:
|
|||||||
fig.append_trace(sells, 1, 1)
|
fig.append_trace(sells, 1, 1)
|
||||||
|
|
||||||
# append stop loss/profit
|
# append stop loss/profit
|
||||||
plot_stop_loss_trade(df_sell, fig, analyze,args)
|
plot_stop_loss_trade(df_sell, fig, analyze, args)
|
||||||
|
|
||||||
fig.append_trace(volume, 2, 1)
|
|
||||||
fig.append_trace(macd, 3, 1)
|
|
||||||
fig.append_trace(macdsignal, 3, 1)
|
|
||||||
|
|
||||||
fig['layout'].update(title=args.pair)
|
fig['layout'].update(title=args.pair)
|
||||||
fig['layout']['yaxis1'].update(title='Price')
|
fig['layout']['yaxis1'].update(title='Price')
|
||||||
fig['layout']['yaxis2'].update(title='Volume')
|
|
||||||
fig['layout']['yaxis3'].update(title='MACD')
|
subplots = 1
|
||||||
|
|
||||||
|
if args.plotvolume:
|
||||||
|
subplots = subplots + 1
|
||||||
|
plot_volume_dataframe(data, fig, args, subplots)
|
||||||
|
fig['layout']['yaxis' + str(subplots)].update(title='Volume')
|
||||||
|
|
||||||
|
if args.plotmacd:
|
||||||
|
subplots = subplots + 1
|
||||||
|
plot_macd_dataframe(data, fig, args, subplots)
|
||||||
|
fig['layout']['yaxis' + str(subplots)].update(title='MACD')
|
||||||
|
|
||||||
|
if args.plotrsi:
|
||||||
|
subplots = subplots + 1
|
||||||
|
plot_rsi_dataframe(data, fig, args, subplots)
|
||||||
|
fig['layout']['yaxis' + str(subplots)].update(title='RSI', range=[0, 100])
|
||||||
|
|
||||||
|
if args.plotcci:
|
||||||
|
subplots = subplots + 1
|
||||||
|
plot_cci_dataframe(data, fig, args, subplots)
|
||||||
|
fig['layout']['yaxis' + str(subplots)].update(title='CCI')
|
||||||
|
|
||||||
|
# updated all the
|
||||||
|
|
||||||
plot(fig, filename='freqtrade-plot.html')
|
plot(fig, filename='freqtrade-plot.html')
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user