myTestFreqAI/freqtrade/templates/MyHyperoptStragegy.py
2025-05-07 18:58:26 +08:00

65 lines
1.9 KiB
Python

from freqtrade.strategy import IStrategy, CategoricalParameter, DecimalParameter, IntParameter
import pandas as pd
import numpy as np
import talib.abstract as ta
class MyHyperoptStrategy(IStrategy):
INTERFACE_VERSION = 3
# Buy hyperspace params:
buy_params = {
"ema_short_period": 10,
"ema_long_period": 50,
}
# Sell hyperspace params:
sell_params = {
"rsi_high": 70,
}
ema_short_period = IntParameter(5, 20, default=10, space="buy", optimize=True)
ema_long_period = IntParameter(40, 100, default=50, space="buy", optimize=True)
rsi_high = IntParameter(60, 85, default=70, space="sell", optimize=True)
# Minimal ROI designed for the strategy
minimal_roi = {
"0": 0.1
}
# Optimal stoploss designed for the strategy
stoploss = -0.10
# Trailing stop
trailing_stop = False
def populate_indicators(self, dataframe: pd.DataFrame, metadata: dict) -> pd.DataFrame:
# Ensure only the 'close' column is passed to RSI
dataframe['rsi'] = ta.RSI(dataframe['close'], timeperiod=14)
dataframe['ema_short'] = dataframe['close'].ewm(span=self.ema_short_period.value, adjust=False).mean()
dataframe['ema_long'] = dataframe['close'].ewm(span=self.ema_long_period.value, adjust=False).mean()
return dataframe
def populate_entry_trend(self, dataframe: pd.DataFrame, metadata: dict) -> pd.DataFrame:
dataframe.loc[
(
(dataframe['ema_short'] > dataframe['ema_long']) &
(dataframe['rsi'] < 30)
),
'enter_long'
] = 1
return dataframe
def populate_exit_trend(self, dataframe: pd.DataFrame, metadata: dict) -> pd.DataFrame:
dataframe.loc[
(
(dataframe['ema_short'] < dataframe['ema_long']) &
(dataframe['rsi'] > self.rsi_high.value)
),
'exit_long'
] = 1
return dataframe