from freqtrade.strategy.interface import IStrategy
import pandas as pd
from pandas import DataFrame
class ExampleStrategy(IStrategy):
"""
示例策略:基于收盘价是否上涨来决定是否买入。
"""
timeframe = '5m'
order_types = {
'entry': 'limit',
'exit': 'limit',
'stoploss': 'market',
}
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# 没有使用额外指标
return dataframe
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
"""
当当前K线收盘价高于上一根K线 → 生成买入信号
"""
dataframe['enter_long'] = dataframe['close'] > dataframe['close'].shift(1)
return dataframe
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
"""
当当前K线收盘价低于上一根K线 → 生成卖出信号
"""
dataframe['exit_long'] = dataframe['close'] < dataframe['close'].shift(1)
return dataframe
def adjust_entry_price(self, pair: str, order_type: str, current_rate: float,proposed_rate: float, **kwargs) -> float:
"""
首次建仓时,挂单价格下调 0.5%
"""
return proposed_rate * 0.995
def adjust_order_price(self, pair: str, is_buy: bool, current_price: float,proposed_price: float, **kwargs) -> float:
"""
所有订单统一滑点保护:买入 -0.3%,卖出 +0.3%
"""
return proposed_price * (0.997 if is_buy else 1.003)
def custom_exit_price(self, pair: str, trade, current_time, current_rate, **kwargs) -> float:
"""
卖出挂单价格比当前价格高 0.2%
"""
return current_rate * 1.002