💬 Forum

RSIStrategy

enricogolfieri/yuccatrader/user_data/strategies/RSIStrategy_converted.py · ★2 · ⑂2 · first seen 2026-07-28 · repo updated 2022-09-25

Basics mode: spot timeframe: 4h interface version: 3
Settings stoploss: -0.1 has minimal roi startup candle count: 25 hyperopt hyperopt params: 3
Indicators RSI talib
15 related strategies ( identical code, similar name)

Each tile is a different kind of check — from an instant code lint to full sandboxed backtests and forward tests on recent data. Not sure what a check actually proves? See the FAQ →

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# --- Do not remove these libs ---
import numpy as np  # noqa
import pandas as pd  # noqa
from functools import reduce
from pandas import DataFrame
from freqtrade.strategy import BooleanParameter, CategoricalParameter, DecimalParameter, IStrategy, IntParameter
# --- Add your lib to import here ---
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib
# --- Generic strategy settings ---

class RSIStrategy(IStrategy):
    INTERFACE_VERSION = 3
    # Determine timeframe and # of candles before strategysignals becomes valid
    timeframe = '4h'
    startup_candle_count: int = 25
    # Determine roi take profit and stop loss points
    minimal_roi = {'60': 0.01, '30': 0.03, '20': 0.04, '0': 0.05}
    stoploss = -0.1
    trailing_stop = False
    use_exit_signal = True
    exit_profit_only = False
    exit_profit_offset = 0.0
    ignore_roi_if_entry_signal = False
    # --- Define spaces for the indicators ---
    buy_rsi = IntParameter(25, 35, default=30, space='buy')
    sell_rsi = IntParameter(60, 80, default=70, space='sell')
    rsi_period = IntParameter(7, 21, default=14, space='sell')
    # --- Used indicators of strategy code ----

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe['RSI'] = ta.RSI(dataframe, timeperiod=self.rsi_period.value)
        return dataframe
    # --- Buy settings ---

    def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        conditions = []
        conditions.append(dataframe['RSI'] < self.buy_rsi.value)
        if conditions:
            dataframe.loc[reduce(lambda x, y: x & y, conditions), 'enter_long'] = 1
        return dataframe
    # --- Sell settings ---

    def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        conditions = []
        conditions.append(dataframe['RSI'] > self.sell_rsi.value)
        if conditions:
            dataframe.loc[reduce(lambda x, y: x & y, conditions), 'exit_long'] = 1
        return dataframe