Update CAKE
This commit is contained in:
		@@ -11,3 +11,4 @@
 | 
			
		||||
| [CAKE_7](USDT/CAKE_7.py) | 2021-03-31 21:30:00 | 2021-05-01 17:40:00 | 77.63% | 1.32% | -406,221.09900 | SortinoHyperOptLoss | 7723 | 31/28/0 |
 | 
			
		||||
| [CAKE_8](USDT/CAKE_8.py) | 2021-03-31 21:30:00 | 2021-05-03 07:15:00 | 80.36% | 1.30% | -403,721.30770 | SortinoHyperOptLoss | 33420 | 32/30/0 |
 | 
			
		||||
| [CAKE_9](USDT/CAKE_9.py) | 2021-03-31 21:30:00 | 2021-05-07 16:25:00 | 78.31% | 0.99% | -28,686.06459 | SortinoHyperOptLoss | 5963 | 46/33/0 |
 | 
			
		||||
| [CAKE_10](USDT/CAKE_10.py) | 2021-03-31 21:30:00 | 2021-05-09 07:35:00 | 82.37% | 1.16% | -370,765.94923 | SortinoHyperOptLoss | 19839 | 37/34/0 |
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										386
									
								
								USDT/CAKE_10.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										386
									
								
								USDT/CAKE_10.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,386 @@
 | 
			
		||||
# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement
 | 
			
		||||
 | 
			
		||||
# --- Do not remove these libs ---
 | 
			
		||||
import numpy as np  # noqa
 | 
			
		||||
import pandas as pd  # noqa
 | 
			
		||||
from pandas import DataFrame
 | 
			
		||||
 | 
			
		||||
from freqtrade.strategy import IStrategy
 | 
			
		||||
 | 
			
		||||
# --------------------------------
 | 
			
		||||
# Add your lib to import here
 | 
			
		||||
import talib.abstract as ta
 | 
			
		||||
import freqtrade.vendor.qtpylib.indicators as qtpylib
 | 
			
		||||
 | 
			
		||||
class CAKE_10(IStrategy):
 | 
			
		||||
    """
 | 
			
		||||
    This is a strategy template to get you started.
 | 
			
		||||
    More information in https://github.com/freqtrade/freqtrade/blob/develop/docs/bot-optimization.md
 | 
			
		||||
 | 
			
		||||
    You can:
 | 
			
		||||
        :return: a Dataframe with all mandatory indicators for the strategies
 | 
			
		||||
    - Rename the class name (Do not forget to update class_name)
 | 
			
		||||
    - Add any methods you want to build your strategy
 | 
			
		||||
    - Add any lib you need to build your strategy
 | 
			
		||||
 | 
			
		||||
    You must keep:
 | 
			
		||||
    - the lib in the section "Do not remove these libs"
 | 
			
		||||
    - the prototype for the methods: minimal_roi, stoploss, populate_indicators, populate_buy_trend,
 | 
			
		||||
    populate_sell_trend, hyperopt_space, buy_strategy_generator
 | 
			
		||||
    """
 | 
			
		||||
    # Strategy interface version - allow new iterations of the strategy interface.
 | 
			
		||||
    # Check the documentation or the Sample strategy to get the latest version.
 | 
			
		||||
    INTERFACE_VERSION = 2
 | 
			
		||||
 | 
			
		||||
    # Minimal ROI designed for the strategy.
 | 
			
		||||
    # This attribute will be overridden if the config file contains "minimal_roi".
 | 
			
		||||
    # ROI table:
 | 
			
		||||
    minimal_roi = {
 | 
			
		||||
        "0": 0.195,
 | 
			
		||||
        "38": 0.037,
 | 
			
		||||
        "96": 0.018,
 | 
			
		||||
        "115": 0
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Stoploss:
 | 
			
		||||
    stoploss = -0.24852
 | 
			
		||||
 | 
			
		||||
    # Trailing stop:
 | 
			
		||||
    trailing_stop = True
 | 
			
		||||
    trailing_stop_positive = 0.334
 | 
			
		||||
    trailing_stop_positive_offset = 0.394
 | 
			
		||||
    trailing_only_offset_is_reached = True
 | 
			
		||||
 | 
			
		||||
    unfilledtimeout = {
 | 
			
		||||
        'buy': 10,
 | 
			
		||||
        'sell': 30
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Optimal timeframe for the strategy.
 | 
			
		||||
    timeframe = '5m'
 | 
			
		||||
 | 
			
		||||
    # Run "populate_indicators()" only for new candle.
 | 
			
		||||
    process_only_new_candles = False
 | 
			
		||||
 | 
			
		||||
    # These values can be overridden in the "ask_strategy" section in the config.
 | 
			
		||||
    use_sell_signal = True
 | 
			
		||||
    sell_profit_only = False
 | 
			
		||||
    ignore_roi_if_buy_signal = False
 | 
			
		||||
 | 
			
		||||
    # Number of candles the strategy requires before producing valid signals
 | 
			
		||||
    startup_candle_count: int = 30
 | 
			
		||||
 | 
			
		||||
    # Optional order type mapping.
 | 
			
		||||
    order_types = {
 | 
			
		||||
        'buy': 'limit',
 | 
			
		||||
        'sell': 'limit',
 | 
			
		||||
        'stoploss': 'market',
 | 
			
		||||
        'stoploss_on_exchange': False
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Optional order time in force.
 | 
			
		||||
    order_time_in_force = {
 | 
			
		||||
        'buy': 'gtc',
 | 
			
		||||
        'sell': 'gtc'
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    plot_config = {
 | 
			
		||||
        # Main plot indicators (Moving averages, ...)
 | 
			
		||||
        'main_plot': {
 | 
			
		||||
            'tema': {},
 | 
			
		||||
            'sar': {'color': 'white'},
 | 
			
		||||
        },
 | 
			
		||||
        'subplots': {
 | 
			
		||||
            # Subplots - each dict defines one additional plot
 | 
			
		||||
            "MACD": {
 | 
			
		||||
                'macd': {'color': 'blue'},
 | 
			
		||||
                'macdsignal': {'color': 'orange'},
 | 
			
		||||
            },
 | 
			
		||||
            "RSI": {
 | 
			
		||||
                'rsi': {'color': 'red'},
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    def informative_pairs(self):
 | 
			
		||||
        """
 | 
			
		||||
        Define additional, informative pair/interval combinations to be cached from the exchange.
 | 
			
		||||
        These pair/interval combinations are non-tradeable, unless they are part
 | 
			
		||||
        of the whitelist as well.
 | 
			
		||||
        For more information, please consult the documentation
 | 
			
		||||
        :return: List of tuples in the format (pair, interval)
 | 
			
		||||
            Sample: return [("ETH/USDT", "5m"),
 | 
			
		||||
                            ("BTC/USDT", "15m"),
 | 
			
		||||
                            ]
 | 
			
		||||
        """
 | 
			
		||||
        return []
 | 
			
		||||
 | 
			
		||||
    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
 | 
			
		||||
        """
 | 
			
		||||
        Adds several different TA indicators to the given DataFrame
 | 
			
		||||
 | 
			
		||||
        Performance Note: For the best performance be frugal on the number of indicators
 | 
			
		||||
        you are using. Let uncomment only the indicator you are using in your strategies
 | 
			
		||||
        or your hyperopt configuration, otherwise you will waste your memory and CPU usage.
 | 
			
		||||
        :param dataframe: Dataframe with data from the exchange
 | 
			
		||||
        :param metadata: Additional information, like the currently traded pair
 | 
			
		||||
        :return: a Dataframe with all mandatory indicators for the strategies
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
        # Momentum Indicators
 | 
			
		||||
        # ------------------------------------
 | 
			
		||||
 | 
			
		||||
        # ADX
 | 
			
		||||
        dataframe['adx'] = ta.ADX(dataframe)
 | 
			
		||||
 | 
			
		||||
        # # Plus Directional Indicator / Movement
 | 
			
		||||
        # dataframe['plus_dm'] = ta.PLUS_DM(dataframe)
 | 
			
		||||
        # dataframe['plus_di'] = ta.PLUS_DI(dataframe)
 | 
			
		||||
 | 
			
		||||
        # # Minus Directional Indicator / Movement
 | 
			
		||||
        # dataframe['minus_dm'] = ta.MINUS_DM(dataframe)
 | 
			
		||||
        # dataframe['minus_di'] = ta.MINUS_DI(dataframe)
 | 
			
		||||
 | 
			
		||||
        # # Aroon, Aroon Oscillator
 | 
			
		||||
        # aroon = ta.AROON(dataframe)
 | 
			
		||||
        # dataframe['aroonup'] = aroon['aroonup']
 | 
			
		||||
        # dataframe['aroondown'] = aroon['aroondown']
 | 
			
		||||
        # dataframe['aroonosc'] = ta.AROONOSC(dataframe)
 | 
			
		||||
 | 
			
		||||
        # # Awesome Oscillator
 | 
			
		||||
        # dataframe['ao'] = qtpylib.awesome_oscillator(dataframe)
 | 
			
		||||
 | 
			
		||||
        # # Keltner Channel
 | 
			
		||||
        # keltner = qtpylib.keltner_channel(dataframe)
 | 
			
		||||
        # dataframe["kc_upperband"] = keltner["upper"]
 | 
			
		||||
        # dataframe["kc_lowerband"] = keltner["lower"]
 | 
			
		||||
        # dataframe["kc_middleband"] = keltner["mid"]
 | 
			
		||||
        # dataframe["kc_percent"] = (
 | 
			
		||||
        #     (dataframe["close"] - dataframe["kc_lowerband"]) /
 | 
			
		||||
        #     (dataframe["kc_upperband"] - dataframe["kc_lowerband"])
 | 
			
		||||
        # )
 | 
			
		||||
        # dataframe["kc_width"] = (
 | 
			
		||||
        #     (dataframe["kc_upperband"] - dataframe["kc_lowerband"]) / dataframe["kc_middleband"]
 | 
			
		||||
        # )
 | 
			
		||||
 | 
			
		||||
        # # Ultimate Oscillator
 | 
			
		||||
        # dataframe['uo'] = ta.ULTOSC(dataframe)
 | 
			
		||||
 | 
			
		||||
        # # Commodity Channel Index: values [Oversold:-100, Overbought:100]
 | 
			
		||||
        dataframe['cci'] = ta.CCI(dataframe)
 | 
			
		||||
 | 
			
		||||
        # RSI
 | 
			
		||||
        dataframe['rsi'] = ta.RSI(dataframe)
 | 
			
		||||
 | 
			
		||||
        # # Inverse Fisher transform on RSI: values [-1.0, 1.0] (https://goo.gl/2JGGoy)
 | 
			
		||||
        # rsi = 0.1 * (dataframe['rsi'] - 50)
 | 
			
		||||
        # dataframe['fisher_rsi'] = (np.exp(2 * rsi) - 1) / (np.exp(2 * rsi) + 1)
 | 
			
		||||
 | 
			
		||||
        # # Inverse Fisher transform on RSI normalized: values [0.0, 100.0] (https://goo.gl/2JGGoy)
 | 
			
		||||
        # dataframe['fisher_rsi_norma'] = 50 * (dataframe['fisher_rsi'] + 1)
 | 
			
		||||
 | 
			
		||||
        # # Stochastic Slow
 | 
			
		||||
        # stoch = ta.STOCH(dataframe)
 | 
			
		||||
        # dataframe['slowd'] = stoch['slowd']
 | 
			
		||||
        # dataframe['slowk'] = stoch['slowk']
 | 
			
		||||
 | 
			
		||||
        # Stochastic Fast
 | 
			
		||||
        stoch_fast = ta.STOCHF(dataframe)
 | 
			
		||||
        dataframe['fastd'] = stoch_fast['fastd']
 | 
			
		||||
        dataframe['fastk'] = stoch_fast['fastk']
 | 
			
		||||
 | 
			
		||||
        # # Stochastic RSI
 | 
			
		||||
        # Please read https://github.com/freqtrade/freqtrade/issues/2961 before using this.
 | 
			
		||||
        # STOCHRSI is NOT aligned with tradingview, which may result in non-expected results.
 | 
			
		||||
        # stoch_rsi = ta.STOCHRSI(dataframe)
 | 
			
		||||
        # dataframe['fastd_rsi'] = stoch_rsi['fastd']
 | 
			
		||||
        # dataframe['fastk_rsi'] = stoch_rsi['fastk']
 | 
			
		||||
 | 
			
		||||
        # MACD
 | 
			
		||||
        macd = ta.MACD(dataframe)
 | 
			
		||||
        dataframe['macd'] = macd['macd']
 | 
			
		||||
        dataframe['macdsignal'] = macd['macdsignal']
 | 
			
		||||
        dataframe['macdhist'] = macd['macdhist']
 | 
			
		||||
 | 
			
		||||
        # MFI
 | 
			
		||||
        dataframe['mfi'] = ta.MFI(dataframe)
 | 
			
		||||
 | 
			
		||||
        # # ROC
 | 
			
		||||
        # dataframe['roc'] = ta.ROC(dataframe)
 | 
			
		||||
 | 
			
		||||
        # Overlap Studies
 | 
			
		||||
        # ------------------------------------
 | 
			
		||||
 | 
			
		||||
        # Bollinger Bands
 | 
			
		||||
        bollinger = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=2)
 | 
			
		||||
        dataframe['bb_lowerband'] = bollinger['lower']
 | 
			
		||||
        dataframe['bb_middleband'] = bollinger['mid']
 | 
			
		||||
        dataframe['bb_upperband'] = bollinger['upper']
 | 
			
		||||
        dataframe["bb_percent"] = (
 | 
			
		||||
            (dataframe["close"] - dataframe["bb_lowerband"]) /
 | 
			
		||||
            (dataframe["bb_upperband"] - dataframe["bb_lowerband"])
 | 
			
		||||
        )
 | 
			
		||||
        dataframe["bb_width"] = (
 | 
			
		||||
            (dataframe["bb_upperband"] - dataframe["bb_lowerband"]) / dataframe["bb_middleband"]
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        # Bollinger Bands - Weighted (EMA based instead of SMA)
 | 
			
		||||
        # weighted_bollinger = qtpylib.weighted_bollinger_bands(
 | 
			
		||||
        #     qtpylib.typical_price(dataframe), window=20, stds=2
 | 
			
		||||
        # )
 | 
			
		||||
        # dataframe["wbb_upperband"] = weighted_bollinger["upper"]
 | 
			
		||||
        # dataframe["wbb_lowerband"] = weighted_bollinger["lower"]
 | 
			
		||||
        # dataframe["wbb_middleband"] = weighted_bollinger["mid"]
 | 
			
		||||
        # dataframe["wbb_percent"] = (
 | 
			
		||||
        #     (dataframe["close"] - dataframe["wbb_lowerband"]) /
 | 
			
		||||
        #     (dataframe["wbb_upperband"] - dataframe["wbb_lowerband"])
 | 
			
		||||
        # )
 | 
			
		||||
        # dataframe["wbb_width"] = (
 | 
			
		||||
        #     (dataframe["wbb_upperband"] - dataframe["wbb_lowerband"]) / dataframe["wbb_middleband"]
 | 
			
		||||
        # )
 | 
			
		||||
 | 
			
		||||
        # # EMA - Exponential Moving Average
 | 
			
		||||
        #dataframe['ema3'] = ta.EMA(dataframe, timeperiod=3)
 | 
			
		||||
        #dataframe['ema5'] = ta.EMA(dataframe, timeperiod=5)
 | 
			
		||||
        #dataframe['ema10'] = ta.EMA(dataframe, timeperiod=10)
 | 
			
		||||
        #dataframe['ema21'] = ta.EMA(dataframe, timeperiod=21)
 | 
			
		||||
        #dataframe['ema50'] = ta.EMA(dataframe, timeperiod=50)
 | 
			
		||||
        #dataframe['ema100'] = ta.EMA(dataframe, timeperiod=100)
 | 
			
		||||
        #dataframe['ema120'] = ta.EMA(dataframe, timeperiod=120)
 | 
			
		||||
        #dataframe['ema150'] = ta.EMA(dataframe, timeperiod=150)
 | 
			
		||||
        #dataframe['ema180'] = ta.EMA(dataframe, timeperiod=180)
 | 
			
		||||
        #dataframe['ema200'] = ta.EMA(dataframe, timeperiod=200)
 | 
			
		||||
 | 
			
		||||
        # # SMA - Simple Moving Average
 | 
			
		||||
        # dataframe['sma3'] = ta.SMA(dataframe, timeperiod=3)
 | 
			
		||||
        # dataframe['sma5'] = ta.SMA(dataframe, timeperiod=5)
 | 
			
		||||
        # dataframe['sma10'] = ta.SMA(dataframe, timeperiod=10)
 | 
			
		||||
        # dataframe['sma21'] = ta.SMA(dataframe, timeperiod=21)
 | 
			
		||||
        # dataframe['sma50'] = ta.SMA(dataframe, timeperiod=50)
 | 
			
		||||
        # dataframe['sma100'] = ta.SMA(dataframe, timeperiod=100)
 | 
			
		||||
 | 
			
		||||
        # Parabolic SAR
 | 
			
		||||
        dataframe['sar'] = ta.SAR(dataframe)
 | 
			
		||||
 | 
			
		||||
        # TEMA - Triple Exponential Moving Average
 | 
			
		||||
        dataframe['tema'] = ta.TEMA(dataframe, timeperiod=9)
 | 
			
		||||
 | 
			
		||||
        # Cycle Indicator
 | 
			
		||||
        # ------------------------------------
 | 
			
		||||
        # Hilbert Transform Indicator - SineWave
 | 
			
		||||
        hilbert = ta.HT_SINE(dataframe)
 | 
			
		||||
        dataframe['htsine'] = hilbert['sine']
 | 
			
		||||
        dataframe['htleadsine'] = hilbert['leadsine']
 | 
			
		||||
 | 
			
		||||
        # Pattern Recognition - Bullish candlestick patterns
 | 
			
		||||
        # ------------------------------------
 | 
			
		||||
        # # Hammer: values [0, 100]
 | 
			
		||||
        # dataframe['CDLHAMMER'] = ta.CDLHAMMER(dataframe)
 | 
			
		||||
        # # Inverted Hammer: values [0, 100]
 | 
			
		||||
        # dataframe['CDLINVERTEDHAMMER'] = ta.CDLINVERTEDHAMMER(dataframe)
 | 
			
		||||
        # # Dragonfly Doji: values [0, 100]
 | 
			
		||||
        # dataframe['CDLDRAGONFLYDOJI'] = ta.CDLDRAGONFLYDOJI(dataframe)
 | 
			
		||||
        # # Piercing Line: values [0, 100]
 | 
			
		||||
        # dataframe['CDLPIERCING'] = ta.CDLPIERCING(dataframe) # values [0, 100]
 | 
			
		||||
        # # Morningstar: values [0, 100]
 | 
			
		||||
        # dataframe['CDLMORNINGSTAR'] = ta.CDLMORNINGSTAR(dataframe) # values [0, 100]
 | 
			
		||||
        # # Three White Soldiers: values [0, 100]
 | 
			
		||||
        # dataframe['CDL3WHITESOLDIERS'] = ta.CDL3WHITESOLDIERS(dataframe) # values [0, 100]
 | 
			
		||||
 | 
			
		||||
        # Pattern Recognition - Bearish candlestick patterns
 | 
			
		||||
        # ------------------------------------
 | 
			
		||||
        # # Hanging Man: values [0, 100]
 | 
			
		||||
        # dataframe['CDLHANGINGMAN'] = ta.CDLHANGINGMAN(dataframe)
 | 
			
		||||
        # # Shooting Star: values [0, 100]
 | 
			
		||||
        # dataframe['CDLSHOOTINGSTAR'] = ta.CDLSHOOTINGSTAR(dataframe)
 | 
			
		||||
        # # Gravestone Doji: values [0, 100]
 | 
			
		||||
        # dataframe['CDLGRAVESTONEDOJI'] = ta.CDLGRAVESTONEDOJI(dataframe)
 | 
			
		||||
        # # Dark Cloud Cover: values [0, 100]
 | 
			
		||||
        # dataframe['CDLDARKCLOUDCOVER'] = ta.CDLDARKCLOUDCOVER(dataframe)
 | 
			
		||||
        # # Evening Doji Star: values [0, 100]
 | 
			
		||||
        # dataframe['CDLEVENINGDOJISTAR'] = ta.CDLEVENINGDOJISTAR(dataframe)
 | 
			
		||||
        # # Evening Star: values [0, 100]
 | 
			
		||||
        # dataframe['CDLEVENINGSTAR'] = ta.CDLEVENINGSTAR(dataframe)
 | 
			
		||||
 | 
			
		||||
        # Pattern Recognition - Bullish/Bearish candlestick patterns
 | 
			
		||||
        # ------------------------------------
 | 
			
		||||
        # # Three Line Strike: values [0, -100, 100]
 | 
			
		||||
        # dataframe['CDL3LINESTRIKE'] = ta.CDL3LINESTRIKE(dataframe)
 | 
			
		||||
        # # Spinning Top: values [0, -100, 100]
 | 
			
		||||
        # dataframe['CDLSPINNINGTOP'] = ta.CDLSPINNINGTOP(dataframe) # values [0, -100, 100]
 | 
			
		||||
        # # Engulfing: values [0, -100, 100]
 | 
			
		||||
        # dataframe['CDLENGULFING'] = ta.CDLENGULFING(dataframe) # values [0, -100, 100]
 | 
			
		||||
        # # Harami: values [0, -100, 100]
 | 
			
		||||
        # dataframe['CDLHARAMI'] = ta.CDLHARAMI(dataframe) # values [0, -100, 100]
 | 
			
		||||
        # # Three Outside Up/Down: values [0, -100, 100]
 | 
			
		||||
        # dataframe['CDL3OUTSIDE'] = ta.CDL3OUTSIDE(dataframe) # values [0, -100, 100]
 | 
			
		||||
        # # Three Inside Up/Down: values [0, -100, 100]
 | 
			
		||||
        # dataframe['CDL3INSIDE'] = ta.CDL3INSIDE(dataframe) # values [0, -100, 100]
 | 
			
		||||
 | 
			
		||||
        # # Chart type
 | 
			
		||||
        # # ------------------------------------
 | 
			
		||||
        # # Heikin Ashi Strategy
 | 
			
		||||
        # heikinashi = qtpylib.heikinashi(dataframe)
 | 
			
		||||
        # dataframe['ha_open'] = heikinashi['open']
 | 
			
		||||
        # dataframe['ha_close'] = heikinashi['close']
 | 
			
		||||
        # dataframe['ha_high'] = heikinashi['high']
 | 
			
		||||
        # dataframe['ha_low'] = heikinashi['low']
 | 
			
		||||
 | 
			
		||||
        # Retrieve best bid and best ask from the orderbook
 | 
			
		||||
        # ------------------------------------
 | 
			
		||||
        """
 | 
			
		||||
        # first check if dataprovider is available
 | 
			
		||||
        if self.dp:
 | 
			
		||||
            if self.dp.runmode in ('live', 'dry_run'):
 | 
			
		||||
                ob = self.dp.orderbook(metadata['pair'], 1)
 | 
			
		||||
                dataframe['best_bid'] = ob['bids'][0][0]
 | 
			
		||||
                dataframe['best_ask'] = ob['asks'][0][0]
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
        return dataframe
 | 
			
		||||
 | 
			
		||||
    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
 | 
			
		||||
        """
 | 
			
		||||
        Based on TA indicators, populates the buy signal for the given dataframe
 | 
			
		||||
        :param dataframe: DataFrame populated with indicators
 | 
			
		||||
        :param metadata: Additional information, like the currently traded pair
 | 
			
		||||
        :return: DataFrame with buy column
 | 
			
		||||
        """
 | 
			
		||||
        dataframe.loc[
 | 
			
		||||
            (
 | 
			
		||||
                #(dataframe['adx'] > 22) &
 | 
			
		||||
                (dataframe['mfi'] < 21) &
 | 
			
		||||
                (dataframe['fastd'] < 44) &
 | 
			
		||||
                (dataframe['close'] < dataframe['bb_lowerband'])
 | 
			
		||||
                #qtpylib.crossed_above(dataframe['close'], dataframe['sar'])
 | 
			
		||||
            ),
 | 
			
		||||
            'buy'] = 1
 | 
			
		||||
 | 
			
		||||
        return dataframe
 | 
			
		||||
 | 
			
		||||
    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
 | 
			
		||||
        """
 | 
			
		||||
        Based on TA indicators, populates the sell signal for the given dataframe
 | 
			
		||||
        :param dataframe: DataFrame populated with indicators
 | 
			
		||||
        :param metadata: Additional information, like the currently traded pair
 | 
			
		||||
        :return: DataFrame with buy column
 | 
			
		||||
        """
 | 
			
		||||
        dataframe.loc[
 | 
			
		||||
            (
 | 
			
		||||
                (dataframe['adx'] < 100) &
 | 
			
		||||
                #(dataframe['cci'] > 446) &
 | 
			
		||||
                (dataframe['fastd'] > 93) &
 | 
			
		||||
                #(dataframe['mfi'] > 86) &
 | 
			
		||||
                (dataframe['rsi'] > 97) &
 | 
			
		||||
                #qtpylib.crossed_above(dataframe['sar'], dataframe['close'])
 | 
			
		||||
                (dataframe['close'] > dataframe['bb_upperband'])
 | 
			
		||||
                #(qtpylib.crossed_above(dataframe['macdsignal'], dataframe['macd']))
 | 
			
		||||
 | 
			
		||||
                #(qtpylib.crossed_above(dataframe['sar'], dataframe['close']))
 | 
			
		||||
                #(qtpylib.crossed_above(dataframe['rsi'], 70)) &  # Signal: RSI crosses above 70
 | 
			
		||||
                #(dataframe['tema'] > dataframe['bb_middleband']) &  # Guard: tema above BB middle
 | 
			
		||||
                #(dataframe['tema'] < dataframe['tema'].shift(1)) &  # Guard: tema is falling
 | 
			
		||||
                #(dataframe['volume'] > 0)  # Make sure Volume is not 0
 | 
			
		||||
            ),
 | 
			
		||||
            'sell'] = 1
 | 
			
		||||
        return dataframe
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user