第29篇:99%的量化新手死在挂单上:Freqtrade隐藏技能揭秘Freqtrade在挂单模型中提供了两个关键功能:adjust_entry_price:仅在新建订单(首次买入)时,用于修改挂单价格。adjust_order_price:用于控制所有挂单的价格,包括出场、加仓、减
Freqtrade 在挂单模型中提供了两个关键功能:
adjust_entry_price:仅在新建订单(首次买入)时,用于修改挂单价格。adjust_order_price:用于控制 所有挂单 的价格,包括出场、加仓、减仓合理使用这些控制点,可以最大化降低滑点,控制分段进场,进而提升策略维度和强度。
👉 点击访问:https://itrade.icu 这里有 Freqtrade 基础教程、策略源码、指标解析 等丰富内容,助你轻松掌握量化交易技巧!
挂单细节决定胜负:Freqtrade 自定义价格策略完全指南
| 函数名 | 作用描述 | 使用时机 |
|---|---|---|
adjust_entry_price |
修改首次建仓时挂单价格(只调用一次) | ✅ 首次买入 |
adjust_order_price |
对所有订单(买入、卖出)统一调整价格 | ✅ 每次下单都调用 |
该函数只在策略首次生成交易信号并准备下单建仓时被调用一次,你可以在这里动态调整挂单价格,例如控制滑点、下浮买入价等。
def adjust_entry_price(self, pair: str, order_type: str, current_rate: float, proposed_rate: float, **kwargs) -> float:
# 往下调整 0.5% 挂单价格
adjusted_price = proposed_rate * 0.995
print(f"[adjust_entry_price] 原始挂单价: {proposed_rate},调整后: {adjusted_price}")
return adjusted_price
这是一个更强大的挂单控制函数,无论是买入还是卖出,都会经过它。
def adjust_order_price(self, pair: str, is_buy: bool, current_price: float, proposed_price: float, **kwargs) -> float:
if is_buy:
# 买入时往下压0.3%
return proposed_price * 0.997
else:
# 卖出时往上抬0.3%
return proposed_price * 1.003
| 比较项 | adjust_entry_price |
adjust_order_price |
|---|---|---|
| 被调用时机 | 仅首次建仓买入 | 所有订单(包括买入和卖出) |
| 可控制方向 | 仅限买入 | 买入 + 卖出 |
| 控制范围 | 建仓价 | 全部订单价格 |
| 推荐组合使用方式 | ✔ 首次建仓时:用 adjust_entry_price 控制更细致的入场价格 |
✔ 所有订单:用 adjust_order_price 做统一价格控制 |
| 场景 | 是否会调用 adjust_entry_price? |
推荐做法 |
|---|---|---|
| 第一次买入建仓 | ✅ 会调用 | 用来调整初始挂单价 |
| 加仓(已有仓位再买) | ❌ 不会调用 | 使用 adjust_trade_position |
| 卖出止盈/止损 | ❌ 不会调用 | 使用 custom_exit_price 或 adjust_order_price |
adjust_entry_price 控制首次建仓挂单价adjust_order_price 控制所有订单滑点保护custom_exit_price 精准控制卖出价格adjust_entry_price 中实现加仓逻辑,Freqtrade 不会再调用它这是一个基于价格动量的入门策略,策略核心逻辑:
📈 当前K线的收盘价高于前一根K线 → 生成买入信号
📉 当前K线的收盘价低于前一根K线 → 生成卖出信号
同时结合了 Freqtrade 提供的订单价格控制功能:
adjust_entry_price:首次建仓时挂单价下调 0.5%adjust_order_price:统一滑点控制(买入 -0.3%,卖出 +0.3%)custom_exit_price:卖出挂比当前价格高 0.2%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
adjust_entry_price 和 adjust_order_price 是 Freqtrade 在限价挂单机制中最关键的两个控制钩子:
adjust_entry_price:只会在首次建仓时调用一次,用于精细控制第一次买入挂单价。adjust_order_price:每次下单都会调用,适用于买入、卖出、加仓、减仓、止盈、止损等所有订单。adjust_entry_pricecustom_exit_price 更完美如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!
