refactor(strategy_helper): convert Mixin to helper functions
This commit is contained in:
parent
7fd8abb4a1
commit
ccb9c9c0e4
@ -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)
|
|
||||||
|
Loading…
Reference in New Issue
Block a user