Timeframe
1h
Direction
Long Only
Stoploss
-25.0%
Trailing Stop
Yes
ROI
0m: 46.4%, 474m: 12.7%, 1153m: 3.6%, 1977m: 0.0%
Interface Version
N/A
Startup Candles
100
Indicators
4
freqtrade/freqtrade-strategies
Strategy 003 author@: Gerald Lonlas github@: https://github.com/freqtrade/freqtrade-strategies
from pandas import DataFrame
from functools import reduce
from freqtrade.strategy import IStrategy
from freqtrade.strategy import IntParameter
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib
class Momentum(IStrategy):
minimal_roi = {
"0": 0.464,
"474": 0.127,
"1153": 0.036,
"1977": 0
}
stoploss = -0.25
trailing_stop = True
trailing_stop_positive = 0.01
trailing_stop_positive_offset = 0.055
trailing_only_offset_is_reached = True
timeframe = "1h"
use_sell_signal = True
sell_profit_only = False
ignore_roi_if_buy_signal = False
process_only_new_candles = True
startup_candle_count = 100
buy_params = {
"stoch_lower_bound": 15
}
sell_params = {
"sell_rsi": 80,
"stoch_upper_bound": 85
}
stoch_lower_bound = IntParameter(0, 40, default=15, space='buy', optimize=True, load=True)
sell_rsi = IntParameter(60, 100, default=80, space='sell', optimize=True, load=True)
stoch_upper_bound = IntParameter(
60, 100, default=70, space='sell', optimize=True, load=True)
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# ADX
# dataframe['ADX'] = ta.ADX(dataframe, timeperiod=14)
dataframe['plus_di'] = ta.PLUS_DI(dataframe, timeperiod=14)
dataframe['minus_di'] = ta.MINUS_DI(dataframe, timeperiod=14)
# Stochastic RSI
stoch = ta.STOCHRSI(dataframe, timeperiod=14)
dataframe['stoch_fastk'] = stoch['fastk']
dataframe['stoch_fastd'] = stoch['fastd']
# # RSI
dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)
return dataframe
def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
conditions = []
conditions.append(qtpylib.crossed_above(dataframe['stoch_fastk'], dataframe['stoch_fastd']))
conditions.append(dataframe['plus_di'] > dataframe['minus_di'])
conditions.append(dataframe['stoch_fastk'] < self.stoch_lower_bound.value)
conditions.append(dataframe['volume'] > 0)
if conditions:
dataframe.loc[
reduce(lambda x, y: x & y, conditions),
'buy'] = 1
return dataframe
def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
conditions = []
conditions.append(qtpylib.crossed_below(dataframe['rsi'], self.sell_rsi.value) | (qtpylib.crossed_below(
dataframe['stoch_fastk'], dataframe['stoch_fastd']) & (dataframe['stoch_fastk'] > self.stoch_upper_bound.value)))
conditions.append(dataframe['volume'] > 0)
if conditions:
dataframe.loc[
reduce(lambda x, y: x & y, conditions),
'sell']=1
return dataframe