新版本

This commit is contained in:
eson 2022-07-05 01:47:54 +08:00
parent 5f9147dc43
commit a333376c57
4 changed files with 84 additions and 12 deletions

20
base.go
View File

@ -7,6 +7,7 @@ import (
"github.com/474420502/structure/compare" "github.com/474420502/structure/compare"
"github.com/474420502/structure/tree/treelist" "github.com/474420502/structure/tree/treelist"
"github.com/klauspost/compress/zstd"
"go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson"
) )
@ -22,10 +23,18 @@ func GetAll() (result *treelist.Tree[int64]) {
f, err := os.Open("./stocks.gob") f, err := os.Open("./stocks.gob")
if err == nil { if err == nil {
err = gob.NewDecoder(f).Decode(&stocks) dec, err := zstd.NewReader(f)
if err != nil { if err != nil {
panic(err) panic(err)
} }
defer dec.Close()
// dec := f
err = gob.NewDecoder(dec).Decode(&stocks)
if err != nil {
panic(err)
}
defer f.Close()
} else { } else {
for cur.Next(context.TODO()) { for cur.Next(context.TODO()) {
var s Stock var s Stock
@ -42,8 +51,15 @@ func GetAll() (result *treelist.Tree[int64]) {
if err != nil { if err != nil {
panic(err) panic(err)
} }
defer f.Close()
err = gob.NewEncoder(f).Encode(stocks) enc, err := zstd.NewWriter(f)
if err != nil {
panic(err)
}
defer enc.Close()
// enc := f
err = gob.NewEncoder(enc).Encode(&stocks)
if err != nil { if err != nil {
panic(err) panic(err)
} }

View File

@ -72,6 +72,7 @@ func GetDefaultPage() *rod.Page {
var client *mongo.Client var client *mongo.Client
var cstock *mongo.Collection var cstock *mongo.Collection
var DateStocks *treelist.Tree[int64] var DateStocks *treelist.Tree[int64]
var CountedDays map[int]bool
var err error var err error
func init() { func init() {
@ -83,6 +84,10 @@ func init() {
} }
cstock = client.Database("money").Collection("stock") cstock = client.Database("money").Collection("stock")
DateStocks = GetAll() DateStocks = GetAll()
CountedDays = map[int]bool{}
for i := 1; i < 7; i++ {
CountedDays[1<<i] = true
}
} }
func main() { func main() {

View File

@ -1,12 +1,15 @@
package moneymoney package moneymoney
import ( import (
"encoding/gob"
"log" "log"
"os"
"sort" "sort"
"testing" "testing"
"time" "time"
"github.com/474420502/structure/tree/treelist" "github.com/474420502/structure/tree/treelist"
"github.com/klauspost/compress/zstd"
) )
const 亿 = 100000000 const 亿 = 100000000
@ -182,15 +185,11 @@ func TestCase3(t *testing.T) {
cmpiter := citer.Clone() cmpiter := citer.Clone()
var i = 0 var i = 0
var step = 1
for ; i < 2; i++ {
cmpiter.Prev()
}
// 向前移动的天数
for cmpiter.Valid() { for cmpiter.Valid() {
todayIter.SeekToFirst() todayIter.SeekToFirst()
cmpday := cmpiter.Value().(*treelist.Tree[int64]) cmpday := cmpiter.Value().(*treelist.Tree[int64])
for todayIter.Valid() { for todayIter.Valid() {
@ -200,20 +199,64 @@ func TestCase3(t *testing.T) {
ic, ok := cmpday.Get(s.Code) ic, ok := cmpday.Get(s.Code)
if ok { if ok {
c := ic.(*Stock) c := ic.(*Stock)
// TODO 存这个属性 if c.Extend == nil {
(c.ClosingPrice - s.ClosingPrice/c.ClosingPrice) c.Extend = &StockExtend{}
}
// 满足相邻天数的处理
if len(c.Extend.UpsDownsRatioDays) == 0 {
if _, ok := CountedDays[i]; ok {
UpsDownsRatioDays := ((c.ClosingPrice - s.ClosingPrice) / c.ClosingPrice)
c.Extend.UpsDownsRatioDays = append(c.Extend.UpsDownsRatioDays, UpsDownsRatioDays)
}
}
// TODO: 其他的统计处理
} }
todayIter.Next() todayIter.Next()
} }
step = step << 1 if i >= 1<<7 {
for i := 0; i < step; i++ { break
cmpiter.Prev()
} }
cmpiter.Prev()
i++
} }
citer.Next() citer.Next()
} }
var stocks []*Stock
DateStocks.Traverse(func(s *treelist.Slice[int64]) bool {
s.Value.(*treelist.Tree[int64]).Traverse(func(s *treelist.Slice[int64]) bool {
stocks = append(stocks, s.Value.(*Stock))
return true
})
return true
})
if stocks != nil {
f, err := os.OpenFile("./stocks1.gob", os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0644)
if err != nil {
panic(err)
}
defer f.Close()
enc, err := zstd.NewWriter(f)
if err != nil {
panic(err)
}
defer enc.Close()
err = gob.NewEncoder(enc).Encode(stocks)
if err != nil {
panic(err)
}
}
} }
func TestCase2(t *testing.T) { func TestCase2(t *testing.T) {

View File

@ -35,6 +35,14 @@ type Stock struct {
CirculatingMarketValue float64 `json:"流通市值" bson:"流通市值"` CirculatingMarketValue float64 `json:"流通市值" bson:"流通市值"`
// 股票数字代码 // 股票数字代码
Code int64 `json:"股票数字代码" bson:"股票数字代码"` Code int64 `json:"股票数字代码" bson:"股票数字代码"`
Extend *StockExtend `json:"Extend" bson:"Extend"`
}
type StockExtend struct {
UpsDownsRatioDays []float64 `json:"UpsDownsRatioDays" bson:"UpsDownsRatioDays"`
MaxPriceDays float64 `json:"MaxPriceDays" bson:"MaxPriceDays"`
MinPriceDay float64 `json:"MinPriceDay" bson:"MinPriceDay"`
} }
type StockBase struct { type StockBase struct {