stable/tests/strategy/strats/freqai_test_spice_rack.py

80 lines
2.2 KiB
Python

import logging
import talib.abstract as ta
from pandas import DataFrame
from freqtrade.strategy import IStrategy
logger = logging.getLogger(__name__)
class freqai_test_spice_rack(IStrategy):
"""
Test strategy - used for testing freqAI functionalities.
DO not use in production.
"""
minimal_roi = {"0": 0.1, "240": -1}
process_only_new_candles = True
startup_candle_count: int = 30
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# Example of how to use the freqai.spice_rack. User treats it the same as any
# typical talib indicator. They set a new column in their dataframe
dataframe['dissimilarity_index'] = self.freqai.spice_rack(
'DI_values', dataframe, metadata, self)
dataframe['maxima'] = self.freqai.spice_rack(
'&s-maxima', dataframe, metadata, self)
dataframe['minima'] = self.freqai.spice_rack(
'&s-minima', dataframe, metadata, self)
self.freqai.close_spice_rack() # user must close the spicerack
dataframe['rsi'] = ta.RSI(dataframe)
return dataframe
def populate_entry_trend(self, df: DataFrame, metadata: dict) -> DataFrame:
df.loc[
(
(df['rsi'] > df['rsi'].shift(1)) & # Guard: tema is raising
(df['dissimilarity_index'] < 1) &
(df['maxima'] > 0.1)
),
'enter_long'] = 1
df.loc[
(
(df['rsi'] < df['rsi'].shift(1)) & # Guard: tema is falling
(df['dissimilarity_index'] < 1) &
(df['minima'] > 0.1)
),
'enter_short'] = 1
return df
def populate_exit_trend(self, df: DataFrame, metadata: dict) -> DataFrame:
df.loc[
(
(df['rsi'] < df['rsi'].shift(1)) & # Guard: tema is falling
(df['dissimilarity_index'] < 1) &
(df['maxima'] > 0.1)
),
'exit_long'] = 1
df.loc[
(
(df['rsi'] > df['rsi'].shift(1)) & # Guard: tema is raising
(df['dissimilarity_index'] < 1) &
(df['minima'] > 0.1)
),
'exit_short'] = 1
return df