Skip to content

[Bug] Dry run重启后订单历史与余额状态不一致,并建议引入更灵活的重启行为 #81

@EthanShang8989

Description

@EthanShang8989

在dry run(回测模式)下,当程序重启时,我们观察到一个不一致的行为。具体的表现为:
订单历史: 过去的订单会被保留并从本地的sqlite数据库(即name.db文件,其中name是YAML配置中的策略名称)中加载。
账户余额: 账户余额会重置为配置文件中定义的值,而不是从之前的dry run状态中恢复。
这种不一致导致了以下问题:
错误的亏损计算: 由于历史订单被保留而余额被重置,系统可能会错误地计算出巨大的亏损(例如,“180分钟内亏损67%”),即使这些亏损在本次dry run中并未实际发生。
订单禁止: 错误的亏损计算会进一步触发系统设置的订单禁止机制(例如,“禁止下单8小时!”),这使得后续的dry run无法正常进行。
预期行为与改进建议:
对于dry run模式,当程序重启时,我们期望能够有更灵活的选项来处理历史数据和余额状态。我们建议实现以下机制:
可配置的重启行为: 允许用户在配置中选择dry run重启后的行为:
完全重置 (默认选项): 订单历史和账户余额都应该完全重置到初始状态,就像开始一个新的dry run一样。这将确保每次dry run都是独立且可重复的。
完全恢复 (可选): 如果用户需要中断并恢复之前的dry run,系统应该能够从上一个dry run的完整状态中恢复订单历史和账户余额。这对于长时间的回测或中断后继续测试非常有用。
更智能的name.db管理: 考虑在dry run模式下,如果用户选择“完全重置”,系统应自动清除或忽略name.db中的历史订单,而无需手动删除文件。
当前临时解决方案:
目前,为了清除历史订单并避免上述问题,用户需要手动删除name.db文件。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions