From cbe753b9e650df91cb385c8ef07df4fe1e1c22fc Mon Sep 17 00:00:00 2001 From: tinkle-community Date: Sat, 17 Jan 2026 21:43:14 +0800 Subject: [PATCH] fix(market): handle invalid period in calculateDonchian --- market/data.go | 2 +- market/data_test.go | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/market/data.go b/market/data.go index 8cce788d..4f4fa76e 100644 --- a/market/data.go +++ b/market/data.go @@ -1213,7 +1213,7 @@ func ExportCalculateBOLL(klines []Kline, period int, multiplier float64) (upper, // calculateDonchian calculates Donchian channel (highest high, lowest low) for given period func calculateDonchian(klines []Kline, period int) (upper, lower float64) { - if len(klines) == 0 { + if len(klines) == 0 || period <= 0 { return 0, 0 } diff --git a/market/data_test.go b/market/data_test.go index 5dcde7c2..17142167 100644 --- a/market/data_test.go +++ b/market/data_test.go @@ -537,3 +537,21 @@ func TestCalculateDonchian_PartialPeriod(t *testing.T) { t.Errorf("Expected lower = 88, got %v", lower) } } + +func TestCalculateDonchian_InvalidPeriod(t *testing.T) { + klines := []Kline{ + {High: 100, Low: 90}, + } + + // Zero period should return (0, 0) + upper, lower := ExportCalculateDonchian(klines, 0) + if upper != 0 || lower != 0 { + t.Errorf("Expected (0, 0) for zero period, got (%v, %v)", upper, lower) + } + + // Negative period should return (0, 0) + upper, lower = ExportCalculateDonchian(klines, -1) + if upper != 0 || lower != 0 { + t.Errorf("Expected (0, 0) for negative period, got (%v, %v)", upper, lower) + } +}