From adcde5efcc3f78872b223ebae461e65d674f429d Mon Sep 17 00:00:00 2001 From: ArvinLovegood Date: Mon, 3 Mar 2025 21:52:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(app):=E5=A2=9E=E5=8A=A0=E7=9B=98=E5=89=8D?= =?UTF-8?q?=E7=9B=98=E5=90=8E=E8=82=A1=E7=A5=A8=E6=95=B0=E6=8D=AE=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增盘前(4:00 AM到9:30 AM)和盘后(4:00 PM到8:00 PM)的判断逻辑 - 在不同时间段内更新股票数据 - 优化了股票代码的判断条件,区分不同市场的交易时间 - 移除了不必要的日志输出,提高了代码可读性 --- app.go | 33 ++++++++++++++++++++++++++------- app_test.go | 6 ++++++ backend/data/stock_data_api.go | 2 +- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/app.go b/app.go index 9379e98..94fce26 100644 --- a/app.go +++ b/app.go @@ -250,11 +250,21 @@ func IsUSTradingTime(date time.Time) bool { // 获取小时和分钟 hour, minute, _ := estTime.Clock() - // 判断是否在9:30到16:00之间 + // 判断是否在4:00 AM到9:30 AM之间(盘前) + if (hour == 4) || (hour == 5) || (hour == 6) || (hour == 7) || (hour == 8) || (hour == 9 && minute < 30) { + return true + } + + // 判断是否在9:30 AM到4:00 PM之间(盘中) if (hour == 9 && minute >= 30) || (hour >= 10 && hour < 16) || (hour == 16 && minute == 0) { return true } + // 判断是否在4:00 PM到8:00 PM之间(盘后) + if (hour == 16 && minute > 0) || (hour >= 17 && hour < 20) || (hour == 20 && minute == 0) { + return true + } + return false } @@ -279,14 +289,14 @@ func MonitorStockPrices(a *App) { if strutil.HasPrefixAny(stockInfo.Code, []string{"hk", "HK"}) && (!IsHKTradingTime(time.Now())) { continue } - //if strutil.HasPrefixAny(stockInfo.Code, []string{"us", "US", "gb_"}) && (!IsUSTradingTime(time.Now())) { - // continue - //} + if strutil.HasPrefixAny(stockInfo.Code, []string{"us", "US", "gb_"}) && (!IsUSTradingTime(time.Now())) { + continue + } - //total += stockInfo.ProfitAmountToday + total += stockInfo.ProfitAmountToday //price, _ := convertor.ToFloat(stockInfo.Price) //if stockInfo.PrePrice != price { - logger.SugaredLogger.Infof("-----------------------股票代码: %s, 股票名称: %s, 股票价格: %s,盘前盘后:%s", stockInfo.Code, stockInfo.Name, stockInfo.Price, stockInfo.BA) + //logger.SugaredLogger.Infof("-----------------------股票代码: %s, 股票名称: %s, 股票价格: %s,盘前盘后:%s", stockInfo.Code, stockInfo.Name, stockInfo.Price, stockInfo.BA) go runtime.EventsEmit(a.ctx, "stock_price", stockInfo) //} } @@ -303,6 +313,15 @@ func GetStockInfos(follows ...data.FollowedStock) *[]data.StockInfo { stockInfos := make([]data.StockInfo, 0) stockCodes := make([]string, 0) for _, follow := range follows { + if strutil.HasPrefixAny(follow.StockCode, []string{"SZ", "SH", "sh", "sz"}) && (!isTradingTime(time.Now())) { + continue + } + if strutil.HasPrefixAny(follow.StockCode, []string{"hk", "HK"}) && (!IsHKTradingTime(time.Now())) { + continue + } + if strutil.HasPrefixAny(follow.StockCode, []string{"us", "US", "gb_"}) && (!IsUSTradingTime(time.Now())) { + continue + } stockCodes = append(stockCodes, follow.StockCode) } stockData, _ := data.NewStockDataApi().GetStockCodeRealTimeData(stockCodes...) @@ -493,7 +512,7 @@ func (a *App) SendDingDingMessage(message string, stockCode string) string { // SendDingDingMessageByType msgType 报警类型: 1 涨跌报警;2 股价报警 3 成本价报警 func (a *App) SendDingDingMessageByType(message string, stockCode string, msgType int) string { ttl, _ := a.cache.TTL([]byte(stockCode)) - logger.SugaredLogger.Infof("stockCode %s ttl:%d", stockCode, ttl) + //logger.SugaredLogger.Infof("stockCode %s ttl:%d", stockCode, ttl) if ttl > 0 { return "" } diff --git a/app_test.go b/app_test.go index 5e9c47b..be40857 100644 --- a/app_test.go +++ b/app_test.go @@ -1,6 +1,7 @@ package main import ( + "go-stock/backend/logger" "testing" "time" ) @@ -15,5 +16,10 @@ func TestIsHKTradingTime(t *testing.T) { } func TestIsUSTradingTime(t *testing.T) { + + date := time.Now() + hour, minute, _ := date.Clock() + logger.SugaredLogger.Infof("当前时间: %d:%d", hour, minute) + t.Log(IsUSTradingTime(time.Now())) } diff --git a/backend/data/stock_data_api.go b/backend/data/stock_data_api.go index 104a507..35d4e3d 100644 --- a/backend/data/stock_data_api.go +++ b/backend/data/stock_data_api.go @@ -492,7 +492,7 @@ func ParseFullSingleStockData(data string) (*StockInfo, error) { if err != nil { return nil, err } - logger.SugaredLogger.Infof("股票数据解析完成marshal: %s", marshal) + //logger.SugaredLogger.Infof("股票数据解析完成marshal: %s", marshal) stockInfo := &StockInfo{} err = json.Unmarshal(marshal, &stockInfo) if err != nil {