Revert "plot.generate_candlestick_graph Added short equivelent, separating plotting scatter creation to a function"
This reverts commit 0abba7f9b7299ba3c45df6a2ba6e35ad6a19c5a0.
This commit is contained in:
parent
84dea0339b
commit
99b8a8ca79
@ -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}')
|
||||||
|
@ -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")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user