成功测试策略
This commit is contained in:
		
							parent
							
								
									04fec33a01
								
							
						
					
					
						commit
						239b30d716
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1 +1,3 @@ | ||||
| *.json | ||||
| *.random_base_data | ||||
| stocks.gob | ||||
							
								
								
									
										4
									
								
								api.go
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								api.go
									
									
									
									
									
								
							| @ -12,10 +12,10 @@ func GetFromAPI() { | ||||
| 
 | ||||
| 	for _, code := range GetStocks() { | ||||
| 
 | ||||
| 		if code.MCAP >= 200*100000000 { | ||||
| 		if code.MCAP >= 100*100000000 { | ||||
| 			pcode.StringSet(code.CODE) | ||||
| 			start.StringSet("20150101") | ||||
| 			end.StringSet("20220622") | ||||
| 			end.StringSet("20220701") | ||||
| 
 | ||||
| 			resp, err := tp.Execute() | ||||
| 			if err != nil { | ||||
|  | ||||
							
								
								
									
										71
									
								
								base.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								base.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,71 @@ | ||||
| package moneymoney | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/gob" | ||||
| 	"os" | ||||
| 
 | ||||
| 	"github.com/474420502/structure/compare" | ||||
| 	"github.com/474420502/structure/tree/treelist" | ||||
| 	"go.mongodb.org/mongo-driver/bson" | ||||
| ) | ||||
| 
 | ||||
| func GetAll() (result *treelist.Tree[int64]) { | ||||
| 
 | ||||
| 	result = treelist.New[int64](compare.Any[int64]) | ||||
| 	var stocks []*Stock | ||||
| 
 | ||||
| 	cur, err := cstock.Find(context.TODO(), bson.M{}) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 
 | ||||
| 	f, err := os.Open("./stocks.gob") | ||||
| 	if err == nil { | ||||
| 		err = gob.NewDecoder(f).Decode(&stocks) | ||||
| 		if err != nil { | ||||
| 			panic(err) | ||||
| 		} | ||||
| 	} else { | ||||
| 		for cur.Next(context.TODO()) { | ||||
| 			var s Stock | ||||
| 			err := cur.Decode(&s) | ||||
| 			if err != nil { | ||||
| 				panic(err) | ||||
| 			} | ||||
| 
 | ||||
| 			stocks = append(stocks, &s) | ||||
| 			// result = append(result, &s) | ||||
| 		} | ||||
| 
 | ||||
| 		f, err = os.OpenFile("./stocks.gob", os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0644) | ||||
| 		if err != nil { | ||||
| 			panic(err) | ||||
| 		} | ||||
| 
 | ||||
| 		err = gob.NewEncoder(f).Encode(stocks) | ||||
| 		if err != nil { | ||||
| 			panic(err) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	for _, s := range stocks { | ||||
| 		var daymap *treelist.Tree[int64] | ||||
| 		idaymap, ok := result.Get(s.Date.Unix()) | ||||
| 
 | ||||
| 		// daymap, ok := DateStocks[s.Date.Unix()] | ||||
| 		if !ok { | ||||
| 			idaymap = treelist.New(compare.Any[int64]) | ||||
| 			result.Put(s.Date.Unix(), idaymap) | ||||
| 			// DateStocks[s.Date.Unix()] = daymap | ||||
| 		} | ||||
| 		daymap = idaymap.(*treelist.Tree[int64]) | ||||
| 		daymap.Put(s.Code, s) | ||||
| 	} | ||||
| 
 | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func AggregateNewField(result []*Stock) { | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							| @ -9,6 +9,8 @@ require ( | ||||
| ) | ||||
| 
 | ||||
| require ( | ||||
| 	github.com/474420502/classify v1.3.1 | ||||
| 	github.com/474420502/structure v1.0.1 | ||||
| 	github.com/go-stack/stack v1.8.0 // indirect | ||||
| 	github.com/golang/snappy v0.0.1 // indirect | ||||
| 	github.com/klauspost/compress v1.13.6 // indirect | ||||
|  | ||||
							
								
								
									
										5
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								go.sum
									
									
									
									
									
								
							| @ -1,7 +1,12 @@ | ||||
| github.com/474420502/classify v1.3.1 h1:AakdyoS97lx54uiPjbtTFCyeYr16qebE+ScDvtZmXDA= | ||||
| github.com/474420502/classify v1.3.1/go.mod h1:Z2nPKjdgsxx7P1UfJZOiQdvZqlxlxGYgNswdVz1LYsM= | ||||
| github.com/474420502/gcurl v0.5.1 h1:Rpl0qdffIwgzOivc4BAn8biOpoGIFhOBAFe8vogswIk= | ||||
| github.com/474420502/gcurl v0.5.1/go.mod h1:bYc/86ynsx28WNFd6MDt/8gy0xRvuqhspmEqEm7Sybo= | ||||
| github.com/474420502/random v0.5.2-0.20220222044003-09d6ed40ca23 h1:ZO9oDeD8EOHiHbFLPlZ5WyfF0uBoYfRD0/NoEIFUeAQ= | ||||
| github.com/474420502/requests v1.11.1 h1:BLI95klIGRjTLeQ7U7CJLkkniVsL2tK0PLJnUTSTyfY= | ||||
| github.com/474420502/requests v1.11.1/go.mod h1:epMXb90Z7hmiOu+hMLFj8eFbkqOXWThNDYHuh2ThTlE= | ||||
| github.com/474420502/structure v1.0.1 h1:X8hM0m6CA+13HZI2/Uv3pO+Kce3cm/ZGfXVeE+S4uN8= | ||||
| github.com/474420502/structure v1.0.1/go.mod h1:rND3ZSiZH84JKV43+bR0/iUHvLlhkcBmW9hyUNkr3bU= | ||||
| github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
| github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | ||||
| github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
|  | ||||
							
								
								
									
										68
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								main.go
									
									
									
									
									
								
							| @ -16,6 +16,7 @@ import ( | ||||
| 	"time" | ||||
| 
 | ||||
| 	"github.com/474420502/gcurl" | ||||
| 	"github.com/474420502/structure/tree/treelist" | ||||
| 	"github.com/go-rod/rod" | ||||
| 	"github.com/go-rod/rod/lib/devices" | ||||
| 	"github.com/go-rod/rod/lib/launcher" | ||||
| @ -28,55 +29,6 @@ import ( | ||||
| 	"golang.org/x/text/transform" | ||||
| ) | ||||
| 
 | ||||
| type Stock struct { | ||||
| 	Date                   string  `json:"日期" bson:"日期"` | ||||
| 	CodeStr                string  `json:"股票代码" bson:"股票代码"` | ||||
| 	Name                   string  `json:"名称" bson:"名称"` | ||||
| 	ClosingPrice           float64 `json:"收盘价" bson:"收盘价"` | ||||
| 	MaxPrice               float64 `json:"最高价" bson:"最高价"` | ||||
| 	MinPrice               float64 `json:"最低价" bson:"最低价"` | ||||
| 	OpeningPrice           float64 `json:"开盘价" bson:"开盘价"` | ||||
| 	PreviousClosingPrice   float64 `json:"前收盘" bson:"前收盘"` | ||||
| 	UpsDowns               float64 `json:"涨跌额" bson:"涨跌额"` | ||||
| 	UpsDownsRatio          float64 `json:"涨跌幅" bson:"涨跌幅"` | ||||
| 	TurnoverRate           float64 `json:"换手率" bson:"换手率"` | ||||
| 	Volume                 float64 `json:"成交量" bson:"成交量"` | ||||
| 	Turnover               float64 `json:"成交金额" bson:"成交金额"` | ||||
| 	MarketValue            float64 `json:"总市值" bson:"总市值"` | ||||
| 	CirculatingMarketValue float64 `json:"流通市值" bson:"流通市值"` | ||||
| 
 | ||||
| 	Code int64 `json:"股票数字代码" bson:"股票数字代码"` | ||||
| } | ||||
| 
 | ||||
| type StockBase struct { | ||||
| 	// CodeStr string // 代地区码 | ||||
| 	// Code    string // 不带地区码 | ||||
| 
 | ||||
| 	CODE        string  `json:"CODE"` | ||||
| 	FIVE_MINUTE float64 `json:"FIVE_MINUTE"` | ||||
| 	HIGH        float64 `json:"HIGH"` | ||||
| 	HS          float64 `json:"HS"` | ||||
| 	LB          float64 `json:"LB"` | ||||
| 	LOW         float64 `json:"LOW"` | ||||
| 	MCAP        float64 `json:"MCAP"` | ||||
| 	MFSUM       float64 `json:"MFSUM"` | ||||
| 	NAME        string  `json:"NAME"` | ||||
| 	OPEN        float64 `json:"OPEN"` | ||||
| 	PE          float64 `json:"PE"` | ||||
| 	PERCENT     float64 `json:"PERCENT"` | ||||
| 	PRICE       float64 `json:"PRICE"` | ||||
| 	SNAME       string  `json:"SNAME"` | ||||
| 	SYMBOL      string  `json:"SYMBOL"` | ||||
| 	TCAP        float64 `json:"TCAP"` | ||||
| 	TURNOVER    float64 `json:"TURNOVER"` | ||||
| 	UPDOWN      float64 `json:"UPDOWN"` | ||||
| 	VOLUME      float64 `json:"VOLUME"` | ||||
| 	WB          float64 `json:"WB"` | ||||
| 	YESTCLOSE   float64 `json:"YESTCLOSE"` | ||||
| 	ZF          float64 `json:"ZF"` | ||||
| 	NO          float64 `json:"NO"` | ||||
| } | ||||
| 
 | ||||
| var DefaultPage *rod.Page | ||||
| 
 | ||||
| func GetDefaultPage() *rod.Page { | ||||
| @ -118,6 +70,8 @@ func GetDefaultPage() *rod.Page { | ||||
| } | ||||
| 
 | ||||
| var client *mongo.Client | ||||
| var cstock *mongo.Collection | ||||
| var DateStocks *treelist.Tree[int64] | ||||
| var err error | ||||
| 
 | ||||
| func init() { | ||||
| @ -127,6 +81,8 @@ func init() { | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	cstock = client.Database("money").Collection("stock") | ||||
| 	DateStocks = GetAll() | ||||
| } | ||||
| 
 | ||||
| func main() { | ||||
| @ -323,8 +279,13 @@ func DownloadDataFromCode(code *StockBase) { | ||||
| 				panic(err) | ||||
| 			} | ||||
| 
 | ||||
| 			ts, err := time.ParseInLocation("2006-01-02", fields[0], time.Local) | ||||
| 			if err != nil { | ||||
| 				panic(err) | ||||
| 			} | ||||
| 
 | ||||
| 			s := &Stock{ | ||||
| 				Date:                   fields[0], | ||||
| 				Date:                   ts, | ||||
| 				CodeStr:                fields[1], | ||||
| 				Name:                   fields[2], | ||||
| 				ClosingPrice:           ToFloat(fields[3]), | ||||
| @ -386,8 +347,13 @@ func SaveFromCSV(downloaddata []byte) { | ||||
| 			panic(err) | ||||
| 		} | ||||
| 
 | ||||
| 		ts, err := time.ParseInLocation("2006-01-02", fields[0], time.Local) | ||||
| 		if err != nil { | ||||
| 			panic(err) | ||||
| 		} | ||||
| 
 | ||||
| 		s := &Stock{ | ||||
| 			Date:                   fields[0], | ||||
| 			Date:                   ts, | ||||
| 			CodeStr:                fields[1], | ||||
| 			Name:                   fields[2], | ||||
| 			ClosingPrice:           ToFloat(fields[3]), | ||||
|  | ||||
							
								
								
									
										189
									
								
								main_test.go
									
									
									
									
									
								
							
							
						
						
									
										189
									
								
								main_test.go
									
									
									
									
									
								
							| @ -1,9 +1,194 @@ | ||||
| package moneymoney | ||||
| 
 | ||||
| import "testing" | ||||
| import ( | ||||
| 	"log" | ||||
| 	"sort" | ||||
| 	"testing" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"github.com/474420502/structure/tree/treelist" | ||||
| ) | ||||
| 
 | ||||
| const 亿 = 100000000 | ||||
| 
 | ||||
| func GetDate(date string) time.Time { | ||||
| 	ts, err := time.ParseInLocation("2006-01-02", date, time.Local) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	return ts | ||||
| } | ||||
| 
 | ||||
| var CurrentDay = "2017-03-15" | ||||
| 
 | ||||
| func GetStocksByCondition(cday time.Time) []*Stock { | ||||
| 	var stocks []*Stock | ||||
| 
 | ||||
| 	// cday := GetDate(CurrentDay) | ||||
| 	start := cday.Add(-time.Hour * 24 * 14) | ||||
| 	log.Println(start.Local(), cday.Local()) | ||||
| 
 | ||||
| 	// cur, err := cstock.Find(context.TODO(), bson.M{ | ||||
| 	// 	"日期": bson.M{"$gte": start, "$lte": cday}, | ||||
| 	// 	// "涨跌幅": bson.M{"$gte": -15.0, "$lte": -2.0}, | ||||
| 	// 	// // "换手率":  bson.M{"$gte": 1.0}, | ||||
| 	// 	// "流通市值": bson.M{"$gte": 100 * 亿}, | ||||
| 	// }) | ||||
| 	// if err != nil { | ||||
| 	// 	panic(err) | ||||
| 	// } | ||||
| 	// log.Println(cur.Current) | ||||
| 
 | ||||
| 	// // var total = 0.0 | ||||
| 	// var stocks []*Stock | ||||
| 	// for cur.Next(context.TODO()) { | ||||
| 	// 	var s Stock | ||||
| 	// 	err := cur.Decode(&s) | ||||
| 	// 	if err != nil { | ||||
| 	// 		panic(err) | ||||
| 	// 	} | ||||
| 	// 	// clf.Add(&s) | ||||
| 
 | ||||
| 	// 	var daymap *treelist.Tree[int64] | ||||
| 	// 	idaymap, ok := DateStocks.Get(s.Date.Unix()) | ||||
| 
 | ||||
| 	// 	// daymap, ok := DateStocks[s.Date.Unix()] | ||||
| 	// 	if !ok { | ||||
| 	// 		idaymap = treelist.New(compare.Any[int64]) | ||||
| 	// 		DateStocks.Put(s.Date.Unix(), idaymap) | ||||
| 	// 		// DateStocks[s.Date.Unix()] = daymap | ||||
| 	// 	} | ||||
| 	// 	daymap = idaymap.(*treelist.Tree[int64]) | ||||
| 	// 	daymap.Put(s.Code, &s) | ||||
| 	// } | ||||
| 
 | ||||
| 	// istartStock, _ := DateStocks.Get(start.Unix()) | ||||
| 	siter := DateStocks.Iterator() | ||||
| 	siter.SeekGE(start.Unix()) | ||||
| 	siter.Valid() | ||||
| 	{ | ||||
| 		ssiter := siter.Value().(*treelist.Tree[int64]).Iterator() | ||||
| 		ssiter.SeekToFirst() | ||||
| 		ss := ssiter.Value().(*Stock) | ||||
| 		log.Printf("%s", ss.Date.Local().Format("2006-01-02")) | ||||
| 	} | ||||
| 
 | ||||
| 	iter := DateStocks.Iterator() | ||||
| 
 | ||||
| 	log.Println(iter.SeekLE(cday.Unix()), iter.Valid()) | ||||
| 
 | ||||
| 	endStock := iter.Value().(*treelist.Tree[int64]) | ||||
| 
 | ||||
| 	log.Println(DateStocks.Size(), endStock.Size()) | ||||
| 
 | ||||
| 	endStock.Traverse(func(s *treelist.Slice[int64]) bool { | ||||
| 		var ok bool | ||||
| 		citer := siter.Clone() | ||||
| 
 | ||||
| 		stock := s.Value.(*Stock) | ||||
| 		if stock.MarketValue <= 100*亿 { | ||||
| 			return true | ||||
| 		} | ||||
| 
 | ||||
| 		startStock := citer.Value().(*treelist.Tree[int64]) | ||||
| 
 | ||||
| 		var istock any | ||||
| 		for { | ||||
| 			istock, ok = startStock.Get(stock.Code) | ||||
| 			if ok { | ||||
| 				break | ||||
| 			} | ||||
| 			citer.Next() | ||||
| 			if !citer.Valid() { | ||||
| 				return true | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		fstock := istock.(*Stock) | ||||
| 		if fstock.ClosingPrice == 0 { | ||||
| 			return true | ||||
| 		} | ||||
| 		if stock.ClosingPrice == 0 { | ||||
| 			return true | ||||
| 		} | ||||
| 
 | ||||
| 		stock.MinPrice = fstock.ClosingPrice | ||||
| 		stock.MaxPrice = stock.ClosingPrice | ||||
| 
 | ||||
| 		stock.UpsDownsRatio = ((stock.ClosingPrice - fstock.ClosingPrice) / fstock.ClosingPrice) | ||||
| 		// log.Println(stock.UpsDownsRatio, s) | ||||
| 
 | ||||
| 		stocks = append(stocks, stock) | ||||
| 		return true | ||||
| 	}) | ||||
| 
 | ||||
| 	sort.Slice(stocks, func(i, j int) bool { | ||||
| 		return stocks[i].UpsDownsRatio < stocks[j].UpsDownsRatio | ||||
| 	}) | ||||
| 
 | ||||
| 	return stocks | ||||
| } | ||||
| 
 | ||||
| func TestMoney(t *testing.T) { | ||||
| 
 | ||||
| 	var money float64 = 0.0 | ||||
| 	cday := GetDate("2017-05-15") | ||||
| 
 | ||||
| 	for money < 1.0 { | ||||
| 
 | ||||
| 		selectStocks := GetStocksByCondition(cday) | ||||
| 		log.Println(len(selectStocks)) | ||||
| 
 | ||||
| 		for _, s := range selectStocks[0:15] { | ||||
| 			log.Printf("%.4f%% %s %s %f %f", s.UpsDownsRatio*100.0, s.Date.Local().Format("2006-01-02"), s.Name, s.MinPrice, s.MaxPrice) | ||||
| 			// log.Println(s.UpsDownsRatio, s) | ||||
| 		} | ||||
| 
 | ||||
| 		selectStocks = selectStocks[0:15] | ||||
| 
 | ||||
| 		start := (len(selectStocks) - 10) / 2 | ||||
| 		selectStocks = selectStocks[start : start+10] | ||||
| 		for _, s := range selectStocks { | ||||
| 			log.Printf("%.4f%% %s", s.UpsDownsRatio*100.0, s.Name) | ||||
| 		} | ||||
| 		// TODO: 测试 收益 | ||||
| 		iter := DateStocks.Iterator() | ||||
| 		iter.SeekGT(cday.Unix()) | ||||
| 
 | ||||
| 		for { | ||||
| 			var total float64 = 0.0 | ||||
| 			iter.Next() | ||||
| 			cstocks := iter.Value().(*treelist.Tree[int64]) | ||||
| 
 | ||||
| 			var cs *Stock | ||||
| 
 | ||||
| 			for _, s := range selectStocks { | ||||
| 				itf, ok := cstocks.Get(s.Code) | ||||
| 				if ok { | ||||
| 					cs = itf.(*Stock) | ||||
| 					total += (cs.ClosingPrice - s.ClosingPrice) / s.ClosingPrice | ||||
| 					// log.Printf("%.2f", (cs.ClosingPrice-s.ClosingPrice)/s.ClosingPrice) | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			total = total / float64(len(selectStocks)) | ||||
| 
 | ||||
| 			log.Printf("%.2f%%, %s", total*100, cs.Date.Local()) | ||||
| 			if total >= 0.06 { | ||||
| 				money += total | ||||
| 				cday = cs.Date | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestCase3(t *testing.T) { | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| func TestCase2(t *testing.T) { | ||||
| 	GetFromAPI() | ||||
| 	GetFromAPI() // 获取基础数据 | ||||
| } | ||||
| 
 | ||||
| func TestCase1(t *testing.T) { | ||||
|  | ||||
							
								
								
									
										67
									
								
								unity.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								unity.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,67 @@ | ||||
| package moneymoney | ||||
| 
 | ||||
| import "time" | ||||
| 
 | ||||
| type Stock struct { | ||||
| 	// 日期 | ||||
| 	Date time.Time `json:"日期" bson:"日期"` | ||||
| 	// 股票代码 | ||||
| 	CodeStr string `json:"股票代码" bson:"股票代码"` | ||||
| 	// 名称 | ||||
| 	Name string `json:"名称" bson:"名称"` | ||||
| 	// 收盘价 | ||||
| 	ClosingPrice float64 `json:"收盘价" bson:"收盘价"` | ||||
| 	// 最高价 | ||||
| 	MaxPrice float64 `json:"最高价" bson:"最高价"` | ||||
| 	// 最低价 | ||||
| 	MinPrice float64 `json:"最低价" bson:"最低价"` | ||||
| 	// 开盘价 | ||||
| 	OpeningPrice float64 `json:"开盘价" bson:"开盘价"` | ||||
| 	// 前收盘 | ||||
| 	PreviousClosingPrice float64 `json:"前收盘" bson:"前收盘"` | ||||
| 	// 涨跌额 | ||||
| 	UpsDowns float64 `json:"涨跌额" bson:"涨跌额"` | ||||
| 	// 涨跌幅 | ||||
| 	UpsDownsRatio float64 `json:"涨跌幅" bson:"涨跌幅"` | ||||
| 	// 换手率 | ||||
| 	TurnoverRate float64 `json:"换手率" bson:"换手率"` | ||||
| 	// 成交量 | ||||
| 	Volume float64 `json:"成交量" bson:"成交量"` | ||||
| 	// 成交金额 | ||||
| 	Turnover float64 `json:"成交金额" bson:"成交金额"` | ||||
| 	// 总市值 | ||||
| 	MarketValue float64 `json:"总市值" bson:"总市值"` | ||||
| 	// 流通市值 | ||||
| 	CirculatingMarketValue float64 `json:"流通市值" bson:"流通市值"` | ||||
| 	// 股票数字代码 | ||||
| 	Code int64 `json:"股票数字代码" bson:"股票数字代码"` | ||||
| } | ||||
| 
 | ||||
| type StockBase struct { | ||||
| 	// CodeStr string // 代地区码 | ||||
| 	// Code    string // 不带地区码 | ||||
| 
 | ||||
| 	CODE        string  `json:"CODE"` | ||||
| 	FIVE_MINUTE float64 `json:"FIVE_MINUTE"` | ||||
| 	HIGH        float64 `json:"HIGH"` | ||||
| 	HS          float64 `json:"HS"` | ||||
| 	LB          float64 `json:"LB"` | ||||
| 	LOW         float64 `json:"LOW"` | ||||
| 	MCAP        float64 `json:"MCAP"` | ||||
| 	MFSUM       float64 `json:"MFSUM"` | ||||
| 	NAME        string  `json:"NAME"` | ||||
| 	OPEN        float64 `json:"OPEN"` | ||||
| 	PE          float64 `json:"PE"` | ||||
| 	PERCENT     float64 `json:"PERCENT"` | ||||
| 	PRICE       float64 `json:"PRICE"` | ||||
| 	SNAME       string  `json:"SNAME"` | ||||
| 	SYMBOL      string  `json:"SYMBOL"` | ||||
| 	TCAP        float64 `json:"TCAP"` | ||||
| 	TURNOVER    float64 `json:"TURNOVER"` | ||||
| 	UPDOWN      float64 `json:"UPDOWN"` | ||||
| 	VOLUME      float64 `json:"VOLUME"` | ||||
| 	WB          float64 `json:"WB"` | ||||
| 	YESTCLOSE   float64 `json:"YESTCLOSE"` | ||||
| 	ZF          float64 `json:"ZF"` | ||||
| 	NO          float64 `json:"NO"` | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user