fix(交易信号): 修复极小价格展示精度丢失与策略覆盖匹配失效
Motivation: 部分 meme 币等标的价格极小(如 0.00000059),原有格式化统一保留两位小数会将其显示为 0.00,导致推送消息中的价格信息失真、误导用户;同时 viper 加载配置时会将嵌套 map 的 key 统一转为小写,导致按大写策略编码配置的策略覆盖项无法命中,仓位倍数、杠杆等覆盖参数失效。 Changes: * 新增价格展示格式化逻辑:绝对值不小于 1 的数值保留两位小数,小于 1 的数值采用最短精确表示,避免极小价格被截断为 0.00 * 策略覆盖查找改为大小写不敏感匹配,兼容 viper 将配置 key 小写化的行为,确保策略编码以任意大小写配置均可生效 * 补充极小价格展示、配置加载解析及策略覆盖匹配的单元测试
This commit is contained in:
@@ -36,6 +36,25 @@ func TestConvertOpen(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// TestOverrideForLowercaseKey verifies overrides still match when viper
|
||||
// lower-cases the strategy_overrides map keys during config load.
|
||||
func TestOverrideForLowercaseKey(t *testing.T) {
|
||||
lev := 100
|
||||
c := NewConverter(map[string]config.StrategyOverride{
|
||||
"blong": {QuantityMultipliers: config.QuantityMultipliers{Add: 100}, Leverage: &lev},
|
||||
})
|
||||
o := c.overrideFor("BLONG")
|
||||
if o == nil {
|
||||
t.Fatal("overrideFor(BLONG)=nil, lowercase config key should match")
|
||||
}
|
||||
if got := o.QuantityMultiplierFor("ADD"); got != 100 {
|
||||
t.Fatalf("add multiplier=%v want 100", got)
|
||||
}
|
||||
if o.Leverage == nil || *o.Leverage != 100 {
|
||||
t.Fatalf("leverage=%v want 100", o.Leverage)
|
||||
}
|
||||
}
|
||||
|
||||
func TestConvertKeepsExtraJSONFields(t *testing.T) {
|
||||
_, data, err := NewConverter(nil).Convert([]byte(`{
|
||||
"action":"OPEN","symbol":"BTCUSDT","price":63014.61,
|
||||
|
||||
Reference in New Issue
Block a user