From a52d105f99a0a1580b9da21bb9acfc3723b5b6d6 Mon Sep 17 00:00:00 2001 From: Philemon Ukane Date: Thu, 19 Sep 2024 00:07:47 +0100 Subject: [PATCH 1/3] dcrdata/exchanges: use EndRate from dcrdex EpochReportRoute as dcr rate Signed-off-by: Philemon Ukane --- exchanges/exchanges.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/exchanges/exchanges.go b/exchanges/exchanges.go index c80a57b11..ee3f26c72 100644 --- a/exchanges/exchanges.go +++ b/exchanges/exchanges.go @@ -2419,6 +2419,7 @@ type DecredDEX struct { reqs map[uint64]func(*msgjson.Message) cacheMtx sync.RWMutex candleCaches map[uint64]*candleCache + lastRate float64 seq uint64 stamp int64 cfg *DEXConfig @@ -2488,9 +2489,14 @@ func (dcr *DecredDEX) Refresh() { } } + // Use mid gap if we are yet to get an epoch report notification. + if dcr.lastRate == 0 { + dcr.lastRate = depth.MidGap() + } + dcr.Update(&ExchangeState{ BaseState: BaseState{ - Price: depth.MidGap(), + Price: dcr.lastRate, Change: change, Volume: float64(volume) / 1e8, Stamp: dcr.lastStamp(), @@ -2683,6 +2689,9 @@ func (dcr *DecredDEX) processWsMessage(raw []byte) { if note.Candle.EndStamp == 0 { return } + + dcr.lastRate = float64(note.Candle.EndRate) / 1e8 + candle := ¬e.Candle for binSize, cache := range dcr.candles() { cache.mtx.Lock() @@ -2852,7 +2861,7 @@ func (dcr *DecredDEX) setOrderBook(ob *msgjson.OrderBook) { dcr.Update(&ExchangeState{ BaseState: BaseState{ - Price: depth.MidGap(), + Price: dcr.lastRate, // Change: priceChange, // With candlesticks Stamp: dcr.stamp, }, From b4d82d0f72c811d0f04b55a21a76b387e960f948 Mon Sep 17 00:00:00 2001 From: Philemon Ukane Date: Fri, 20 Sep 2024 21:09:58 +0100 Subject: [PATCH 2/3] don't send dex update if we don't have sane value Signed-off-by: Philemon Ukane --- exchanges/exchanges.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/exchanges/exchanges.go b/exchanges/exchanges.go index ee3f26c72..03a9d5b47 100644 --- a/exchanges/exchanges.go +++ b/exchanges/exchanges.go @@ -2489,9 +2489,8 @@ func (dcr *DecredDEX) Refresh() { } } - // Use mid gap if we are yet to get an epoch report notification. if dcr.lastRate == 0 { - dcr.lastRate = depth.MidGap() + return // no rate, nothing to do. } dcr.Update(&ExchangeState{ @@ -2859,6 +2858,15 @@ func (dcr *DecredDEX) setOrderBook(ob *msgjson.OrderBook) { depth := dcr.wsDepthSnapshot() + if dcr.lastRate == 0 { + // Use mid gap as a sane default if the orderbook is not empty. + midGap := depth.MidGap() + if midGap == 1 { + return // don't send rate update if we don't have a valid rate. + } + dcr.lastRate = midGap + } + dcr.Update(&ExchangeState{ BaseState: BaseState{ Price: dcr.lastRate, From a491ae96f74055bae1c08735554d4ce7988c484d Mon Sep 17 00:00:00 2001 From: Philemon Ukane Date: Sun, 22 Sep 2024 19:12:55 +0100 Subject: [PATCH 3/3] buck review changes Signed-off-by: Philemon Ukane --- exchanges/exchanges.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/exchanges/exchanges.go b/exchanges/exchanges.go index 03a9d5b47..88c73d294 100644 --- a/exchanges/exchanges.go +++ b/exchanges/exchanges.go @@ -2859,12 +2859,11 @@ func (dcr *DecredDEX) setOrderBook(ob *msgjson.OrderBook) { depth := dcr.wsDepthSnapshot() if dcr.lastRate == 0 { - // Use mid gap as a sane default if the orderbook is not empty. - midGap := depth.MidGap() - if midGap == 1 { - return // don't send rate update if we don't have a valid rate. + if len(ob.Orders) == 0 { + return // don't send rate update if we don't have a valid rate and there are no orders to get a sane midGap. } - dcr.lastRate = midGap + // Use mid gap as a sane default if the orderbook is not empty. + dcr.lastRate = depth.MidGap() } dcr.Update(&ExchangeState{