refactor(strategy_helper): convert Mixin to helper functions

This commit is contained in:
Joe Schr 2021-06-27 17:04:59 +02:00
parent 7fd8abb4a1
commit ccb9c9c0e4

View File

@ -2,7 +2,7 @@ import pandas as pd
from freqtrade.exchange import timeframe_to_minutes, timeframe_to_prev_date from freqtrade.exchange import timeframe_to_minutes, timeframe_to_prev_date
from freqtrade.strategy import IStrategy from freqtrade.strategy import IStrategy
from datetime import datetime from datetime import datetime, timedelta
from freqtrade.persistence import Trade from freqtrade.persistence import Trade
@ -88,27 +88,39 @@ def stoploss_from_open(open_relative_stop: float, current_profit: float) -> floa
return max(stoploss, 0.0) return max(stoploss, 0.0)
class HelperMixin(IStrategy):
custom_stoploss_config = {}
def get_custom_dataframe(self, pair: str): def get_custom_dataframe(self, pair: str):
dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe) dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
return dataframe return dataframe
def get_trade_candle(self, trade: 'Trade'): def get_trade_candle(self, trade: 'Trade'):
""" """
search for nearest row of trade.open_date search for nearest row of trade.open_date
""" """
trade_candle = self.find_candle_datetime(trade.open_date_utc, pair=trade.pair, now=None) trade_candle = find_candle_datetime(self, trade.open_date_utc, pair=trade.pair, now=None)
return trade_candle return trade_candle
def get_buy_candle(self, trade: 'Trade', timeframe="5m"):
"""
search for nearest row of trade.open_date
"""
trade_candle = find_candle_datetime(
self,
trade.open_date_utc-timedelta(minutes=timeframe_to_minutes(self.timeframe)),
pair=trade.pair,
now=None)
return trade_candle
def find_candle_datetime(self, query_date: datetime, pair: str, now: datetime): def find_candle_datetime(self, query_date: datetime, pair: str, now: datetime):
result = None result = None
dataframe = self.get_custom_dataframe(pair) dataframe = get_custom_dataframe(self, pair)
candle = self.find_candle_datetime_safer(query_date, now, dataframe,) candle = find_candle_datetime_safer(self, query_date, now, dataframe,)
result = candle if candle.empty else candle.squeeze() result = candle if candle.empty else candle.squeeze()
return result return result
def find_candle_datetime_faster(self, query_date: datetime, now: datetime, dataframe): def find_candle_datetime_faster(self, query_date: datetime, now: datetime, dataframe):
if(now and now == query_date): if(now and now == query_date):
candle = dataframe.iloc[-1] candle = dataframe.iloc[-1]
@ -117,6 +129,7 @@ class HelperMixin(IStrategy):
candle = dataframe.loc[dataframe.date == candle_date] candle = dataframe.loc[dataframe.date == candle_date]
return candle return candle
def find_candle_datetime_safer(self, query_date: datetime, now: datetime, dataframe): def find_candle_datetime_safer(self, query_date: datetime, now: datetime, dataframe):
df = dataframe[['date']].set_index('date') df = dataframe[['date']].set_index('date')
@ -126,6 +139,3 @@ class HelperMixin(IStrategy):
except KeyError: # trade.open_date may not exist yet except KeyError: # trade.open_date may not exist yet
candle = pd.DataFrame(index=dataframe.index) candle = pd.DataFrame(index=dataframe.index)
return candle return candle
def __init__(self, config: dict) -> None:
super().__init__(config)