From 2d8ac4957e657f6be44d4efa7d01d67e17bd720c Mon Sep 17 00:00:00 2001 From: Gert Wohlgemuth Date: Wed, 27 Jun 2018 10:15:37 -0700 Subject: [PATCH] added MultiRSI stretagy --- .../strategies/berlinguyinca/MultiRSI.py | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 user_data/strategies/berlinguyinca/MultiRSI.py diff --git a/user_data/strategies/berlinguyinca/MultiRSI.py b/user_data/strategies/berlinguyinca/MultiRSI.py new file mode 100644 index 0000000..105940a --- /dev/null +++ b/user_data/strategies/berlinguyinca/MultiRSI.py @@ -0,0 +1,71 @@ +# --- Do not remove these libs --- +from freqtrade.strategy.interface import IStrategy +from pandas import DataFrame +# -------------------------------- +import talib.abstract as ta + + +class MultiRSI(IStrategy): + """ + + author@: Gert Wohlgemuth + + based on work from Creslin + + """ + minimal_roi = { + "0": 0.01 + } + + # Optimal stoploss designed for the strategy + stoploss = -0.05 + + # Optimal ticker interval for the strategy + ticker_interval = '5m' + + def get_ticker_indicator(self): + return int(self.ticker_interval[:-1]) + + def populate_indicators(self, dataframe: DataFrame) -> DataFrame: + from technical.util import resample_to_interval + from technical.util import resampled_merge + + dataframe['sma5'] = ta.SMA(dataframe, timeperiod=5) + dataframe['sma200'] = ta.SMA(dataframe, timeperiod=200) + + # resample our dataframes + dataframe_short = resample_to_interval(dataframe, self.get_ticker_indicator() * 2) + dataframe_long = resample_to_interval(dataframe, self.get_ticker_indicator() * 8) + + # compute our RSI's + dataframe_short['rsi'] = ta.RSI(dataframe_short, timeperiod=14) + dataframe_long['rsi'] = ta.RSI(dataframe_long, timeperiod=14) + + # merge dataframe back together + dataframe = resampled_merge(dataframe, dataframe_short) + dataframe = resampled_merge(dataframe, dataframe_long) + + dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14) + + dataframe.fillna(method='ffill', inplace=True) + + return dataframe + + def populate_buy_trend(self, dataframe: DataFrame) -> DataFrame: + dataframe.loc[ + ( + # must be bearish + (dataframe['sma5'] >= dataframe['sma200']) & + (dataframe['rsi'] < (dataframe['resample_{}_rsi'.format(self.get_ticker_indicator() * 8)] - 20)) + ), + 'buy'] = 1 + return dataframe + + def populate_sell_trend(self, dataframe: DataFrame) -> DataFrame: + dataframe.loc[ + ( + (dataframe['rsi'] > dataframe['resample_{}_rsi'.format(self.get_ticker_indicator()*2)]) & + (dataframe['rsi'] > dataframe['resample_{}_rsi'.format(self.get_ticker_indicator()*8)]) + ), + 'sell'] = 1 + return dataframe