Timeframe
1h
Direction
Long & Short
Stoploss
-7.0%
Trailing Stop
No
ROI
0m: 10.0%, 240m: -100.0%
Interface Version
3
Startup Candles
240
Indicators
0
freqtrade/freqtrade-strategies
freqtrade/freqtrade-strategies
freqtrade/freqtrade-strategies
this is an example class, implementing a PSAR based trailing stop loss you are supposed to take the `custom_stoploss()` and `populate_indicators()` parts and adapt it to your own strategy
freqtrade/freqtrade-strategies
"""
XGBoost FreqAI Strategy - Regression (continuous target)
"""
import numpy as np
from freqtrade.strategy import IStrategy
from pandas import DataFrame
class XGBoostFreqAIStrategy(IStrategy):
INTERFACE_VERSION = 3
timeframe = "1h"
can_short = True
minimal_roi = {"0": 0.1, "240": -1}
stoploss = -0.07
startup_candle_count = 240
max_open_trades = 1
def feature_engineering_expand_all(self, dataframe, period, metadata, **kwargs):
dataframe[f"%-rsi_{period}"] = 100 - 100 / (1 + dataframe["close"].pct_change().clip(0).rolling(period).mean() / ((-dataframe["close"].pct_change()).clip(0).rolling(period).mean() + 1e-10))
dataframe[f"%-z_{period}"] = (dataframe["close"] - dataframe["close"].rolling(period).mean()) / (dataframe["close"].rolling(period).std() + 1e-10)
dataframe[f"%-ret_{period}"] = dataframe["close"].pct_change(period)
return dataframe
def feature_engineering_expand_basic(self, dataframe, metadata, **kwargs):
dataframe["%-volume"] = dataframe["volume"]
return dataframe
def feature_engineering_standard(self, dataframe, metadata, **kwargs):
return dataframe
def set_freqai_targets(self, dataframe, **kwargs):
# Regression target: 24h future return
dataframe["&-target"] = dataframe["close"].pct_change(24).shift(-24).fillna(0)
return dataframe
def populate_indicators(self, dataframe, metadata):
dataframe = self.freqai.start(dataframe, metadata, self)
return dataframe
def populate_entry_trend(self, df, metadata):
if "do_predict" not in df.columns or "&-target" not in df.columns: return df
df.loc[(df["do_predict"]==1)&(df["&-target"]>0.005),["enter_long","enter_tag"]]=(1,"long")
df.loc[(df["do_predict"]==1)&(df["&-target"]<-0.005),["enter_short","enter_tag"]]=(1,"short")
return df
def populate_exit_trend(self, df, metadata):
if "do_predict" not in df.columns or "&-target" not in df.columns: return df
df.loc[(df["do_predict"]!=1)|(df["&-target"].abs()<0.002),"exit_long"]=1
df.loc[(df["do_predict"]!=1)|(df["&-target"].abs()<0.002),"exit_short"]=1
return df