myTestFreqAI/freqtrade/templates/AIEnhancedStrategy.py
zhangkun9038@dingtalk.com 9a87fad909 AIEnhancedStrategy
2025-05-01 18:54:32 +08:00

60 lines
2.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from freqtrade.strategy.interface import IStrategy
from freqtrade.freqai.data_kitchen import FreqaiDataKitchen
from pandas import DataFrame
import numpy as np
import logging
logger = logging.getLogger(__name__)
class AIEnhancedStrategy(IStrategy):
INTERFACE_VERSION = 3
can_short = False # 只做多
timeframe = '5m'
process_only_new_candles = True
use_exit_signal = True
exit_profit_only = False
ignore_roi_if_entry_signal = False
def feature_engineering_expand_all(self, dataframe: DataFrame, period: int,
metadata: dict, **kwargs) -> DataFrame:
# 自定义特征工程
for col in ['open', 'high', 'low', 'close', 'volume']:
dataframe[f'{col}_pct_change'] = dataframe[col].pct_change(periods=period)
return dataframe
def set_freqai_targets(self, dataframe: DataFrame, metadata: dict, **kwargs) -> DataFrame:
# 目标变量未来n根K线的收盘价变化
dataframe['&s-close_pct'] = dataframe['close'].pct_change(periods=5).shift(-5)
return dataframe
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dk = self.freqai_info.get("dk", None)
if not dk:
raise ValueError("FreqaiDataKitchen is not available.")
dataframe = dk.feature_engineering_standard(dataframe, metadata, self)
if self.config["runmode"].value in ("live", "dry_run"):
dataframe = dk.live_models(self, dataframe, metadata=metadata)
return dataframe
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# 预测值大于阈值时开多仓
dataframe.loc[
(dataframe["&s-close_pct"] > 0.002),
"enter_long"
] = 1
return dataframe
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# 预测值小于负阈值时平仓
dataframe.loc[
(dataframe["&s-close_pct"] < -0.001),
"exit_long"
] = 1
return dataframe