Revert "plot.generate_candlestick_graph Added short equivelent, separating plotting scatter creation to a function"

This reverts commit 0abba7f9b7299ba3c45df6a2ba6e35ad6a19c5a0.
This commit is contained in:
Sam Germain 2022-02-03 17:34:38 -06:00
parent 84dea0339b
commit 99b8a8ca79
2 changed files with 48 additions and 52 deletions

View File

@ -1,6 +1,6 @@
import logging import logging
from pathlib import Path from pathlib import Path
from typing import Any, Dict, List, Optional from typing import Any, Dict, List
import pandas as pd import pandas as pd
@ -385,35 +385,6 @@ def add_areas(fig, row: int, data: pd.DataFrame, indicators) -> make_subplots:
return fig return fig
def create_scatter(
data,
column_name,
color,
direction
) -> Optional[go.Scatter]:
if column_name in data.columns:
df_short = data[data[column_name] == 1]
if len(df_short) > 0:
shorts = go.Scatter(
x=df_short.date,
y=df_short.close,
mode='markers',
name=column_name,
marker=dict(
symbol=f"triangle-{direction}-dot",
size=9,
line=dict(width=1),
color=color,
)
)
return shorts
else:
logger.warning(f"No {column_name}-signals found.")
return None
def generate_candlestick_graph(pair: str, data: pd.DataFrame, trades: pd.DataFrame = None, *, def generate_candlestick_graph(pair: str, data: pd.DataFrame, trades: pd.DataFrame = None, *,
indicators1: List[str] = [], indicators1: List[str] = [],
indicators2: List[str] = [], indicators2: List[str] = [],
@ -460,15 +431,44 @@ def generate_candlestick_graph(pair: str, data: pd.DataFrame, trades: pd.DataFra
) )
fig.add_trace(candles, 1, 1) fig.add_trace(candles, 1, 1)
longs = create_scatter(data, 'enter_long', 'green', 'up') # TODO-lev: Needs short equivalent
exit_longs = create_scatter(data, 'exit_long', 'red', 'down') if 'enter_long' in data.columns:
shorts = create_scatter(data, 'enter_short', 'blue', 'down') df_buy = data[data['enter_long'] == 1]
exit_shorts = create_scatter(data, 'exit_short', 'violet', 'up') if len(df_buy) > 0:
buys = go.Scatter(
for scatter in [longs, exit_longs, shorts, exit_shorts]: x=df_buy.date,
if scatter: y=df_buy.close,
fig.add_trace(scatter, 1, 1) mode='markers',
name='buy',
marker=dict(
symbol='triangle-up-dot',
size=9,
line=dict(width=1),
color='green',
)
)
fig.add_trace(buys, 1, 1)
else:
logger.warning("No buy-signals found.")
if 'exit_long' in data.columns:
df_sell = data[data['exit_long'] == 1]
if len(df_sell) > 0:
sells = go.Scatter(
x=df_sell.date,
y=df_sell.close,
mode='markers',
name='sell',
marker=dict(
symbol='triangle-down-dot',
size=9,
line=dict(width=1),
color='red',
)
)
fig.add_trace(sells, 1, 1)
else:
logger.warning("No sell-signals found.")
# Add Bollinger Bands # Add Bollinger Bands
fig = plot_area(fig, 1, data, 'bb_lowerband', 'bb_upperband', fig = plot_area(fig, 1, data, 'bb_lowerband', 'bb_upperband',
label="Bollinger Band") label="Bollinger Band")
@ -537,7 +537,7 @@ def generate_profit_graph(pairs: str, data: Dict[str, pd.DataFrame],
"Profit per pair", "Profit per pair",
"Parallelism", "Parallelism",
"Underwater", "Underwater",
]) ])
fig['layout'].update(title="Freqtrade Profit plot") fig['layout'].update(title="Freqtrade Profit plot")
fig['layout']['yaxis1'].update(title='Price') fig['layout']['yaxis1'].update(title='Price')
fig['layout']['yaxis2'].update(title=f'Profit {stake_currency}') fig['layout']['yaxis2'].update(title=f'Profit {stake_currency}')

View File

@ -202,8 +202,6 @@ def test_generate_candlestick_graph_no_signals_no_trades(default_conf, mocker, t
datadir=testdatadir, timerange=timerange) datadir=testdatadir, timerange=timerange)
data['enter_long'] = 0 data['enter_long'] = 0
data['exit_long'] = 0 data['exit_long'] = 0
data['enter_short'] = 0
data['exit_short'] = 0
indicators1 = [] indicators1 = []
indicators2 = [] indicators2 = []
@ -224,10 +222,8 @@ def test_generate_candlestick_graph_no_signals_no_trades(default_conf, mocker, t
assert row_mock.call_count == 2 assert row_mock.call_count == 2
assert trades_mock.call_count == 1 assert trades_mock.call_count == 1
assert log_has("No enter_long-signals found.", caplog) assert log_has("No buy-signals found.", caplog)
assert log_has("No exit_long-signals found.", caplog) assert log_has("No sell-signals found.", caplog)
assert log_has("No enter_short-signals found.", caplog)
assert log_has("No exit_short-signals found.", caplog)
def test_generate_candlestick_graph_no_trades(default_conf, mocker, testdatadir): def test_generate_candlestick_graph_no_trades(default_conf, mocker, testdatadir):
@ -253,7 +249,7 @@ def test_generate_candlestick_graph_no_trades(default_conf, mocker, testdatadir)
assert fig.layout.title.text == pair assert fig.layout.title.text == pair
figure = fig.layout.figure figure = fig.layout.figure
assert len(figure.data) == 8 assert len(figure.data) == 6
# Candlesticks are plotted first # Candlesticks are plotted first
candles = find_trace_in_fig_data(figure.data, "Price") candles = find_trace_in_fig_data(figure.data, "Price")
assert isinstance(candles, go.Candlestick) assert isinstance(candles, go.Candlestick)
@ -261,15 +257,15 @@ def test_generate_candlestick_graph_no_trades(default_conf, mocker, testdatadir)
volume = find_trace_in_fig_data(figure.data, "Volume") volume = find_trace_in_fig_data(figure.data, "Volume")
assert isinstance(volume, go.Bar) assert isinstance(volume, go.Bar)
enter_long = find_trace_in_fig_data(figure.data, "enter_long") buy = find_trace_in_fig_data(figure.data, "buy")
assert isinstance(enter_long, go.Scatter) assert isinstance(buy, go.Scatter)
# All buy-signals should be plotted # All buy-signals should be plotted
assert int(data['enter_long'].sum()) == len(enter_long.x) assert int(data['enter_long'].sum()) == len(buy.x)
exit_long = find_trace_in_fig_data(figure.data, "exit_long") sell = find_trace_in_fig_data(figure.data, "sell")
assert isinstance(exit_long, go.Scatter) assert isinstance(sell, go.Scatter)
# All buy-signals should be plotted # All buy-signals should be plotted
assert int(data['exit_long'].sum()) == len(exit_long.x) assert int(data['exit_long'].sum()) == len(sell.x)
assert find_trace_in_fig_data(figure.data, "Bollinger Band") assert find_trace_in_fig_data(figure.data, "Bollinger Band")