freqtrade智能挂单策略,让你的资金利用率提升 50%+

📘 freqtrade智能挂单策略,让你的资金利用率提升 50%+

在量化交易中,挂单价格和挂单超时是决定交易效率和风险管理的关键因素。

Freqtrade 机器人提供了多种自定义挂单控制的钩子函数,帮助你精细化控制买卖价格和挂单生命周期,避免因挂单吃亏或资金被无效占用导致的机会损失。

🚀 想学量化交易?

👉 点击访问:www.itrade.icu 这里有 Freqtrade 基础教程策略源码指标解析 等丰富内容,助你轻松掌握量化交易技巧!

本文将围绕三个函数详细展开:

  • custom_entry_price:自定义买入挂单价格,避免挂单被瞬间吃掉或成本过高。
  • check_entry_timeout:判断买入挂单是否超时,及时取消未成交挂单,释放资金。
  • check_exit_timeout:判断卖出挂单是否超时,防止卖单长时间无效挂单。

1. 自定义买入挂单价格 ------ custom_entry_price

在 Freqtrade 中,默认买入价格由交易所市价或策略默认限价决定,但在实际交易中,精准控制挂单价格非常重要。

如果挂单价格设置过于保守,可能导致买单无法快速成交,错失良机;价格过高,则会增加买入成本。

custom_entry_price 函数允许你在限价买入时,自定义挂单价格,实现策略更灵活的买入逻辑。

使用场景举例

  • 激进策略:使用市价或接近市价价格,保证挂单迅速成交。
  • 保守策略:挂单价格稍微低于当前价格,追求更优买入成本。
  • 混合策略:根据市场波动或其他信号动态调整挂单价格。

完整代码示例

python 复制代码
def custom_entry_price(self, pair, current_time, proposed_rate, entry_tag, **kwargs) -> float:
    """
    自定义买入挂单价格

    参数:
    - pair: 交易对名称,如 'BTC/USDT'
    - current_time: 当前时间戳
    - proposed_rate: 系统推荐买入价格
    - entry_tag: 交易标签,方便多策略区分
    - kwargs: 其他参数

    返回:
    - float: 自定义买入挂单价格
    """

    if entry_tag == "aggressive":
        # 激进策略,使用推荐价格,尽快成交
        return proposed_rate
    elif entry_tag == "conservative":
        # 保守策略,价格下调0.5%
        return proposed_rate * 0.995
    else:
        # 默认轻微下调0.2%
        return proposed_rate * 0.998

小结

通过该方法,策略可以根据不同市场环境和资金管理需求灵活调整买入价格,有效避免挂单被瞬间吃掉或成交成本偏高。


2. 挂单超时处理:check_entry_timeoutcheck_exit_timeout

限价单挂单过程中,最怕出现挂单"卡死"导致资金被占用,但订单却长时间无法成交。

这种情况不仅影响资金周转,还会错失更好交易机会。

Freqtrade 通过 check_entry_timeoutcheck_exit_timeout 两个函数,允许策略开发者自定义超时取消挂单的规则。

设计思路

  • 高价币种(如 BTC/USDT),对资金占用敏感,挂单超过短时间未成交应及时取消。
  • 中价币种(如 BNB、LTC),适度缩短挂单等待时间。
  • 低价币种(如 SHIB、DOGE),价格低波动大,可允许更长时间挂单。

具体代码示例

python 复制代码
from datetime import timedelta

def check_entry_timeout(self, pair: str, trade: Trade, order: Order,
                        current_time: datetime, **kwargs) -> bool:
    """
    判断买入挂单是否超时,决定是否取消。

    超时逻辑:
    - 价格 > 100 USDT,挂单超5分钟取消
    - 价格介于10~100 USDT,挂单超3分钟取消
    - 价格 < 1 USDT,挂单超24小时取消

    返回:
    - True 表示取消挂单
    - False 表示继续等待成交
    """

    if trade.open_rate > 100 and trade.open_date_utc < current_time - timedelta(minutes=5):
        return True
    elif trade.open_rate > 10 and trade.open_date_utc < current_time - timedelta(minutes=3):
        return True
    elif trade.open_rate < 1 and trade.open_date_utc < current_time - timedelta(hours=24):
        return True
    return False


def check_exit_timeout(self, pair: str, trade: Trade, order: Order,
                       current_time: datetime, **kwargs) -> bool:
    """
    判断卖出挂单是否超时,决定是否取消。

    逻辑同买入挂单超时判断,分价位设定不同超时阈值。
    """
    if trade.open_rate > 100 and trade.open_date_utc < current_time - timedelta(minutes=5):
        return True
    elif trade.open_rate > 10 and trade.open_date_utc < current_time - timedelta(minutes=3):
        return True
    elif trade.open_rate < 1 and trade.open_date_utc < current_time - timedelta(hours=24):
        return True
    return False

进一步优化建议

  • 可根据市场波动动态调整超时阈值
  • 结合订单薄深度、成交量等指标,智能判断是否取消挂单
  • 对不同策略或品种设定不同的超时规则

3. 注意事项:限价单配置与执行

需要注意的是,custom_entry_price 和挂单超时判断函数只有在你使用限价单时才会被调用。

如果你使用市价单或其他类型订单,这些函数不会生效。

如何启用限价单

config.json 配置文件中设置:

json 复制代码
"order_types": {
  "entry": "limit",
  "exit": "limit"
}

这样,Freqtrade 会在买卖时使用限价单,确保上述自定义逻辑生效。

总结

挂单价格和挂单时效管理是提高交易执行质量的关键。

  • 通过 custom_entry_price,你可以根据市场状况和策略风格,自定义买入挂单价格,实现更合理的买入成本控制。
  • 利用 check_entry_timeoutcheck_exit_timeout,能够防止挂单长时间不成交,避免资金被无效占用,提高资金使用效率。
  • 结合限价单配置,这三者形成一个完整的挂单管理体系,为你的策略保驾护航。

实现精细的挂单管理,能有效避免挂单被瞬间吃掉、挂单长时间未成交或错失更优价格的尴尬,让交易更稳健、更高效!

相关推荐
子兮曰11 小时前
OpenClaw入门:从零开始搭建你的私有化AI助手
前端·架构·github
Victor35611 小时前
https://editor.csdn.net/md/?articleId=139321571&spm=1011.2415.3001.9698
后端
吴仰晖11 小时前
使用github copliot chat的源码学习之Chromium Compositor
前端
1024小神11 小时前
github发布pages的几种状态记录
前端
Victor35611 小时前
Hibernate(89)如何在压力测试中使用Hibernate?
后端
灰子学技术12 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
不像程序员的程序媛13 小时前
Nginx日志切分
服务器·前端·nginx
Daniel李华13 小时前
echarts使用案例
android·javascript·echarts
北原_春希13 小时前
如何在Vue3项目中引入并使用Echarts图表
前端·javascript·echarts
JY-HPS13 小时前
echarts天气折线图
javascript·vue.js·echarts