Timeframe
5m
Direction
Long & Short
Stoploss
-10.0%
Trailing Stop
No
ROI
0m: 1.0%
Interface Version
N/A
Startup Candles
N/A
Indicators
1
freqtrade/freqtrade-strategies
from freqtrade.strategy.interface import IStrategy
from pandas import DataFrame
import talib.abstract as ta
from freqtrade.persistence import Trade
from freqtrade.strategy import (BooleanParameter, CategoricalParameter, stoploss_from_open, DecimalParameter,
IntParameter, IStrategy, informative, merge_informative_pair)
class Alligator(IStrategy):
INTERFACE_VERSION: int = 3
# Define strategy parameters
minimal_roi = {"0": 0.01}
stoploss = -0.10
timeframe = '5m'
startup_candle_count: int = 30
can_short = True
use_entry_signal = True
use_exit_signal = True
exit_profit_only = False
ignore_roi_if_entry_signal = False
protect_optimize = True
slowma = IntParameter(11, 15, default=13, space="buy")
mediumma = IntParameter(6, 10, default=8, space="buy")
fastma = IntParameter(3, 7, default=5, space="buy")
adxPeriod = IntParameter(12, 16, default=14, space="buy")
adxfilter = IntParameter(15, 30, default=20, space="buy")
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe['ma_slow'] = dataframe['close'].rolling(window=self.slowma.value).mean()
dataframe['ma_medium'] = dataframe['close'].rolling(window=self.mediumma.value).mean()
dataframe['ma_fast'] = dataframe['close'].rolling(window=self.fastma.value).mean()
dataframe['adx'] = ta.ADX(dataframe, timeperiod=self.adxPeriod.value)
return dataframe
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# Generate buy signal when ma_fast crosses above ma_slow
dataframe.loc[
(dataframe['close'] > dataframe['ma_fast']) &
(dataframe['ma_fast'] > dataframe['ma_medium']) &
(dataframe['ma_medium'] > dataframe['ma_slow']) &
(dataframe['adx'] > self.adxfilter.value),
'enter_long'
] = 1
# Generate sell signal when ma_fast crosses below ma_slow
dataframe.loc[
(dataframe['close'] < dataframe['ma_fast']) &
(dataframe['ma_fast'] < dataframe['ma_medium']) &
(dataframe['ma_medium'] < dataframe['ma_slow']) &
(dataframe['adx'] > self.adxfilter.value),
'enter_short'
] = 1
return dataframe
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# Generate exit long when price closes below ma_medium
dataframe.loc[
(dataframe['close'] < dataframe['ma_medium']),
'exit_long'
] = 1
# Generate exit short when price above ma_medium
dataframe.loc[
(dataframe['close'] > dataframe['ma_medium']),
'exit_short'
] = 1
return dataframe