Timeframe
5m
Direction
Long Only
Stoploss
-8.0%
Trailing Stop
Yes
ROI
0m: 4.0%, 120m: 1.0%, 360m: 0.0%
Interface Version
3
Startup Candles
240
Indicators
4
freqtrade/freqtrade-strategies
Strategy 003 author@: Gerald Lonlas github@: https://github.com/freqtrade/freqtrade-strategies
from __future__ import annotations
from pandas import DataFrame
import talib.abstract as ta
from freqtrade.strategy import DecimalParameter, IStrategy
class FreqaiTrendV1(IStrategy):
INTERFACE_VERSION = 3
timeframe = "5m"
can_short = False
process_only_new_candles = True
startup_candle_count = 240
minimal_roi = {"0": 0.04, "120": 0.01, "360": 0.0}
stoploss = -0.08
trailing_stop = True
trailing_stop_positive = 0.015
trailing_stop_positive_offset = 0.035
trailing_only_offset_is_reached = True
prediction_entry = DecimalParameter(0.004, 0.025, default=0.01, decimals=3, space="buy")
prediction_exit = DecimalParameter(-0.020, 0.004, default=-0.004, decimals=3, space="sell")
def feature_engineering_expand_all(
self, dataframe: DataFrame, period: int, metadata: dict, **kwargs
) -> DataFrame:
dataframe[f"%-rsi-{period}"] = ta.RSI(dataframe, timeperiod=period)
dataframe[f"%-mfi-{period}"] = ta.MFI(dataframe, timeperiod=period)
dataframe[f"%-adx-{period}"] = ta.ADX(dataframe, timeperiod=period)
dataframe[f"%-ema-distance-{period}"] = (
dataframe["close"] / ta.EMA(dataframe, timeperiod=period) - 1.0
)
return dataframe
def feature_engineering_standard(
self, dataframe: DataFrame, metadata: dict, **kwargs
) -> DataFrame:
dataframe["%-pct-change"] = dataframe["close"].pct_change()
dataframe["%-raw-volume"] = dataframe["volume"]
dataframe["%-day-of-week"] = dataframe["date"].dt.dayofweek
dataframe["%-hour-of-day"] = dataframe["date"].dt.hour
return dataframe
def set_freqai_targets(self, dataframe: DataFrame, metadata: dict, **kwargs) -> DataFrame:
label_period = self.freqai_info["feature_parameters"]["label_period_candles"]
dataframe["&-s_close"] = (
dataframe["close"].shift(-label_period) / dataframe["close"] - 1.0
)
return dataframe
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe = self.freqai.start(dataframe, metadata, self)
dataframe["ema_50"] = ta.EMA(dataframe, timeperiod=50)
dataframe["ema_200"] = ta.EMA(dataframe, timeperiod=200)
dataframe["rsi"] = ta.RSI(dataframe, timeperiod=14)
return dataframe
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(
(dataframe["do_predict"] == 1)
& (dataframe["&-s_close"] > self.prediction_entry.value)
& (dataframe["ema_50"] > dataframe["ema_200"])
& (dataframe["rsi"] > 45)
),
"enter_long",
] = 1
return dataframe
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(
(dataframe["do_predict"] != 1)
| (dataframe["&-s_close"] < self.prediction_exit.value)
| (dataframe["close"] < dataframe["ema_50"])
),
"exit_long",
] = 1
return dataframe