feat(app):增加盘前盘后股票数据更新功能

- 新增盘前(4:00 AM到9:30 AM)和盘后(4:00 PM到8:00 PM)的判断逻辑
- 在不同时间段内更新股票数据
- 优化了股票代码的判断条件,区分不同市场的交易时间
- 移除了不必要的日志输出,提高了代码可读性
This commit is contained in:
ArvinLovegood 2025-03-03 21:52:11 +08:00
parent ce91b2e532
commit adcde5efcc
3 changed files with 33 additions and 8 deletions

33
app.go
View File

@ -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 ""
}

View File

@ -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()))
}

View File

@ -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 {