support dicts as indicators
This commit is contained in:
parent
3798f94d4c
commit
84ef588163
@ -1,6 +1,6 @@
|
|||||||
import logging
|
import logging
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Dict, List
|
from typing import Any, Dict, List, Union
|
||||||
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
from freqtrade.configuration import TimeRange
|
from freqtrade.configuration import TimeRange
|
||||||
@ -13,6 +13,8 @@ from freqtrade.resolvers import StrategyResolver
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
IndicatorType = Union[List[str], Dict[str, Dict]]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from plotly.subplots import make_subplots
|
from plotly.subplots import make_subplots
|
||||||
from plotly.offline import plot
|
from plotly.offline import plot
|
||||||
@ -54,9 +56,9 @@ def init_plotscript(config):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def add_indicators(fig, row, indicators: List[str], data: pd.DataFrame) -> make_subplots:
|
def _add_indicators_list(fig, row, indicators: List[str], data: pd.DataFrame) -> make_subplots:
|
||||||
"""
|
"""
|
||||||
Generator all the indicator selected by the user for a specific row
|
Generate all the indicator selected by the user for a specific row
|
||||||
:param fig: Plot figure to append to
|
:param fig: Plot figure to append to
|
||||||
:param row: row number for this plot
|
:param row: row number for this plot
|
||||||
:param indicators: List of indicators present in the dataframe
|
:param indicators: List of indicators present in the dataframe
|
||||||
@ -81,6 +83,51 @@ def add_indicators(fig, row, indicators: List[str], data: pd.DataFrame) -> make_
|
|||||||
return fig
|
return fig
|
||||||
|
|
||||||
|
|
||||||
|
def _add_indicators_dict(fig, row, indicators: Dict[str, Dict],
|
||||||
|
data: pd.DataFrame) -> make_subplots:
|
||||||
|
"""
|
||||||
|
Generate all the indicators selected by the user for a specific row, based on the configuration
|
||||||
|
:param fig: Plot figure to append to
|
||||||
|
:param row: row number for this plot
|
||||||
|
:param indicators: Dict of Indicators with configuration options.
|
||||||
|
Dict key must correspond to dataframe column.
|
||||||
|
:param data: candlestick DataFrame
|
||||||
|
"""
|
||||||
|
for indicator, conf in indicators.items():
|
||||||
|
print(conf)
|
||||||
|
if indicator in data:
|
||||||
|
scatter = go.Scatter(
|
||||||
|
x=data['date'],
|
||||||
|
y=data[indicator].values,
|
||||||
|
mode='lines',
|
||||||
|
name=indicator
|
||||||
|
)
|
||||||
|
fig.add_trace(scatter, row, 1)
|
||||||
|
else:
|
||||||
|
logger.info(
|
||||||
|
'Indicator "%s" ignored. Reason: This indicator is not found '
|
||||||
|
'in your strategy.',
|
||||||
|
indicator
|
||||||
|
)
|
||||||
|
|
||||||
|
return fig
|
||||||
|
|
||||||
|
|
||||||
|
def add_indicators(fig, row, indicators: IndicatorType, data: pd.DataFrame) -> make_subplots:
|
||||||
|
"""
|
||||||
|
Generate all the indicator selected by the user for a specific row
|
||||||
|
:param fig: Plot figure to append to
|
||||||
|
:param row: row number for this plot
|
||||||
|
:param indicators: List of indicators present in the dataframe, Or Dict of Indicators
|
||||||
|
with configuration options. Dict key must correspond to dataframe column.
|
||||||
|
:param data: candlestick DataFrame
|
||||||
|
"""
|
||||||
|
if isinstance(indicators, list):
|
||||||
|
_add_indicators_list(fig, row, indicators, data)
|
||||||
|
else:
|
||||||
|
_add_indicators_dict(fig, row, indicators, data)
|
||||||
|
|
||||||
|
|
||||||
def add_profit(fig, row, data: pd.DataFrame, column: str, name: str) -> make_subplots:
|
def add_profit(fig, row, data: pd.DataFrame, column: str, name: str) -> make_subplots:
|
||||||
"""
|
"""
|
||||||
Add profit-plot
|
Add profit-plot
|
||||||
@ -144,8 +191,8 @@ def plot_trades(fig, trades: pd.DataFrame) -> make_subplots:
|
|||||||
|
|
||||||
|
|
||||||
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: IndicatorType = [],
|
||||||
indicators2: List[str] = [],) -> go.Figure:
|
indicators2: IndicatorType = [],) -> go.Figure:
|
||||||
"""
|
"""
|
||||||
Generate the graph from the data generated by Backtesting or from DB
|
Generate the graph from the data generated by Backtesting or from DB
|
||||||
Volume will always be ploted in row2, so Row 1 and 3 are to our disposal for custom indicators
|
Volume will always be ploted in row2, so Row 1 and 3 are to our disposal for custom indicators
|
||||||
@ -355,12 +402,15 @@ def load_and_plot_trades(config: Dict[str, Any]):
|
|||||||
trades_pair = trades.loc[trades['pair'] == pair]
|
trades_pair = trades.loc[trades['pair'] == pair]
|
||||||
trades_pair = extract_trades_of_period(dataframe, trades_pair)
|
trades_pair = extract_trades_of_period(dataframe, trades_pair)
|
||||||
|
|
||||||
|
indicators1 = config["indicators1"]
|
||||||
|
indicators2 = config["indicators2"]
|
||||||
|
|
||||||
fig = generate_candlestick_graph(
|
fig = generate_candlestick_graph(
|
||||||
pair=pair,
|
pair=pair,
|
||||||
data=dataframe,
|
data=dataframe,
|
||||||
trades=trades_pair,
|
trades=trades_pair,
|
||||||
indicators1=config["indicators1"],
|
indicators1=indicators1,
|
||||||
indicators2=config["indicators2"],
|
indicators2=indicators2,
|
||||||
)
|
)
|
||||||
|
|
||||||
store_plot_file(fig, filename=generate_plot_filename(pair, config['ticker_interval']),
|
store_plot_file(fig, filename=generate_plot_filename(pair, config['ticker_interval']),
|
||||||
|
Loading…
Reference in New Issue
Block a user