diff --git a/user_data/strategies/Quickie.py b/user_data/strategies/Quickie.py index c8346b0c0..d40dffa0b 100644 --- a/user_data/strategies/Quickie.py +++ b/user_data/strategies/Quickie.py @@ -38,10 +38,11 @@ class Quickie(IStrategy): def populate_indicators(self, dataframe: DataFrame) -> DataFrame: dataframe['tema'] = ta.TEMA(dataframe, timeperiod=9) + dataframe['adx'] = ta.ADX(dataframe) + dataframe['sma_200'] = ta.SMA(dataframe, timeperiod=200) dataframe['sma_50'] = ta.SMA(dataframe, timeperiod=50) - dataframe['adx'] = ta.ADX(dataframe) # required for graphing bollinger = qtpylib.bollinger_bands(dataframe['close'], window=20, stds=2) diff --git a/user_data/strategies/Simple.py b/user_data/strategies/Simple.py new file mode 100644 index 000000000..f76ad9ab6 --- /dev/null +++ b/user_data/strategies/Simple.py @@ -0,0 +1,82 @@ +# --- Do not remove these libs --- +from freqtrade.strategy.interface import IStrategy +from typing import Dict, List +from hyperopt import hp +from functools import reduce +from pandas import DataFrame +# -------------------------------- + +import talib.abstract as ta +import freqtrade.vendor.qtpylib.indicators as qtpylib + + +class Simple(IStrategy): + """ + + author@: Gert Wohlgemuth + + idea: + this strategy is based on the book, 'The Simple Strategy' and can be found in detail here: + + https://www.amazon.com/Simple-Strategy-Powerful-Trading-Futures-ebook/dp/B00E66QPCG/ref=sr_1_1?ie=UTF8&qid=1525202675&sr=8-1&keywords=the+simple+strategy + """ + + # Minimal ROI designed for the strategy. + # since this strategy is planned around 5 minutes, we assume any time we have a 5% profit we should call it a day + # This attribute will be overridden if the config file contains "minimal_roi" + minimal_roi = { + "0": 0.5 + } + + # Optimal stoploss designed for the strategy + # This attribute will be overridden if the config file contains "stoploss" + stoploss = -0.25 + + # Optimal ticker interval for the strategy + ticker_interval = 5 + + def populate_indicators(self, dataframe: DataFrame) -> DataFrame: + # MACD + macd = ta.MACD(dataframe) + dataframe['macd'] = macd['macd'] + dataframe['macdsignal'] = macd['macdsignal'] + dataframe['macdhist'] = macd['macdhist'] + + # RSI + dataframe['rsi'] = ta.RSI(dataframe, timeperiod=7) + + # required for graphing + bollinger = qtpylib.bollinger_bands(dataframe['close'], window=12, stds=2) + dataframe['bb_lowerband'] = bollinger['lower'] + dataframe['bb_upperband'] = bollinger['upper'] + + dataframe['tema'] = ta.TEMA(dataframe, timeperiod=9) + dataframe['adx'] = ta.ADX(dataframe) + + return dataframe + + def populate_buy_trend(self, dataframe: DataFrame) -> DataFrame: + dataframe.loc[ + ( + ( + (dataframe['macd'] > 0) # over 0 + & (dataframe['macd'] > dataframe['macdsignal']) # over signal + & (dataframe['bb_upperband'] > dataframe['bb_upperband'].shift(1)) # pointed up + & (dataframe['rsi'] > 70) # optional filter, need to investigate + ) + ), + 'buy'] = 1 + return dataframe + + def populate_sell_trend(self, dataframe: DataFrame) -> DataFrame: + + #different strategy used for sell points, due to be able to duplicate it to 100% + dataframe.loc[ + ( + ( + (dataframe['adx'] > 70) & + (dataframe['tema'] < dataframe['tema'].shift(1)) + ) + ), + 'sell'] = 1 + return dataframe