无敌
This commit is contained in:
		
							parent
							
								
									239b30d716
								
							
						
					
					
						commit
						5f9147dc43
					
				
							
								
								
									
										137
									
								
								main_test.go
									
									
									
									
									
								
							
							
						
						
									
										137
									
								
								main_test.go
									
									
									
									
									
								
							| @ -19,48 +19,12 @@ func GetDate(date string) time.Time { | ||||
| 	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) | ||||
| 	// } | ||||
| 	log.Println("重新从", start.Local().Format("2006-01-02"), cday.Local().Format("2006-01-02"), "策略选股") | ||||
| 
 | ||||
| 	// istartStock, _ := DateStocks.Get(start.Unix()) | ||||
| 	siter := DateStocks.Iterator() | ||||
| @ -69,17 +33,17 @@ func GetStocksByCondition(cday time.Time) []*Stock { | ||||
| 	{ | ||||
| 		ssiter := siter.Value().(*treelist.Tree[int64]).Iterator() | ||||
| 		ssiter.SeekToFirst() | ||||
| 		ss := ssiter.Value().(*Stock) | ||||
| 		log.Printf("%s", ss.Date.Local().Format("2006-01-02")) | ||||
| 		// 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()) | ||||
| 
 | ||||
| 	// log.Println(iter.SeekLE(cday.Unix()), iter.Valid()) | ||||
| 	iter.SeekLE(cday.Unix()) | ||||
| 	endStock := iter.Value().(*treelist.Tree[int64]) | ||||
| 
 | ||||
| 	log.Println(DateStocks.Size(), endStock.Size()) | ||||
| 	// log.Println(DateStocks.Size(), endStock.Size()) | ||||
| 
 | ||||
| 	endStock.Traverse(func(s *treelist.Slice[int64]) bool { | ||||
| 		var ok bool | ||||
| @ -131,16 +95,17 @@ func GetStocksByCondition(cday time.Time) []*Stock { | ||||
| 
 | ||||
| func TestMoney(t *testing.T) { | ||||
| 
 | ||||
| 	var money float64 = 0.0 | ||||
| 	cday := GetDate("2017-05-15") | ||||
| 	var money float64 = 1000000.0 | ||||
| 	cday := GetDate("2017-04-01") | ||||
| 
 | ||||
| 	for money < 1.0 { | ||||
| ALL_LOOP: | ||||
| 	for money < 1000000*3 { | ||||
| 
 | ||||
| 		selectStocks := GetStocksByCondition(cday) | ||||
| 		log.Println(len(selectStocks)) | ||||
| 		// 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.Printf("%.4f%% %s %s %f", s.UpsDownsRatio*100.0, s.Date.Local().Format("2006-01-02"), s.Name, s.ClosingPrice) | ||||
| 			// log.Println(s.UpsDownsRatio, s) | ||||
| 		} | ||||
| 
 | ||||
| @ -148,20 +113,26 @@ func TestMoney(t *testing.T) { | ||||
| 
 | ||||
| 		start := (len(selectStocks) - 10) / 2 | ||||
| 		selectStocks = selectStocks[start : start+10] | ||||
| 		for _, s := range selectStocks { | ||||
| 			log.Printf("%.4f%% %s", s.UpsDownsRatio*100.0, s.Name) | ||||
| 		} | ||||
| 		// for _, s := range selectStocks { | ||||
| 		// 	log.Printf("%.4f%% %s", s.UpsDownsRatio*100.0, s.Name) | ||||
| 		// } | ||||
| 		// TODO: 测试 收益 | ||||
| 		iter := DateStocks.Iterator() | ||||
| 		iter.SeekGT(cday.Unix()) | ||||
| 		if !iter.Valid() { | ||||
| 			break | ||||
| 		} | ||||
| 
 | ||||
| 		for { | ||||
| 			var total float64 = 0.0 | ||||
| 			iter.Next() | ||||
| 
 | ||||
| 			if !iter.Valid() { | ||||
| 				break ALL_LOOP | ||||
| 			} | ||||
| 			cstocks := iter.Value().(*treelist.Tree[int64]) | ||||
| 
 | ||||
| 			var cs *Stock | ||||
| 
 | ||||
| 			for _, s := range selectStocks { | ||||
| 				itf, ok := cstocks.Get(s.Code) | ||||
| 				if ok { | ||||
| @ -171,20 +142,78 @@ func TestMoney(t *testing.T) { | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			csdate := cs.Date.Local().Format("2006-01-02") | ||||
| 			if csdate == "2017-12-07" { | ||||
| 				for _, s := range selectStocks { | ||||
| 					log.Printf("%.4f%% %s %s %f %f %f", s.UpsDownsRatio*100.0, s.Date.Local().Format("2006-01-02"), s.Name, s.ClosingPrice, s.MinPrice, s.MaxPrice) | ||||
| 					// log.Println(s.UpsDownsRatio, s) | ||||
| 				} | ||||
| 				log.Println() | ||||
| 			} | ||||
| 
 | ||||
| 			total = total / float64(len(selectStocks)) | ||||
| 
 | ||||
| 			log.Printf("%.2f%%, %s", total*100, cs.Date.Local()) | ||||
| 			if total >= 0.06 { | ||||
| 				money += total | ||||
| 			log.Printf("%s 总收益:%.2f%%", csdate, total*100) | ||||
| 			if total >= 0.10 || total <= -0.20 { | ||||
| 				money = money + money*total | ||||
| 				cday = cs.Date | ||||
| 				log.Printf("最后总财富 1000000 -> money: %f", money) | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	log.Printf("最后总财富 1000000 -> money: %f", money) | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| func TestCase3(t *testing.T) { | ||||
| 	cday := GetDate("2017-04-01") | ||||
| 	citer := DateStocks.Iterator() | ||||
| 	citer.SeekToFirst() | ||||
| 	citer.SeekGE(cday.Unix()) | ||||
| 
 | ||||
| 	for citer.Valid() { | ||||
| 
 | ||||
| 		stocks := citer.Value().(*treelist.Tree[int64]) | ||||
| 
 | ||||
| 		todayIter := stocks.Iterator() | ||||
| 
 | ||||
| 		cmpiter := citer.Clone() | ||||
| 
 | ||||
| 		var i = 0 | ||||
| 		var step = 1 | ||||
| 		for ; i < 2; i++ { | ||||
| 			cmpiter.Prev() | ||||
| 		} | ||||
| 
 | ||||
| 		for cmpiter.Valid() { | ||||
| 
 | ||||
| 			todayIter.SeekToFirst() | ||||
| 
 | ||||
| 			cmpday := cmpiter.Value().(*treelist.Tree[int64]) | ||||
| 
 | ||||
| 			for todayIter.Valid() { | ||||
| 
 | ||||
| 				s := todayIter.Value().(*Stock) | ||||
| 
 | ||||
| 				ic, ok := cmpday.Get(s.Code) | ||||
| 				if ok { | ||||
| 					c := ic.(*Stock) | ||||
| 					// TODO 存这个属性 | ||||
| 					(c.ClosingPrice - s.ClosingPrice/c.ClosingPrice) | ||||
| 				} | ||||
| 
 | ||||
| 				todayIter.Next() | ||||
| 			} | ||||
| 
 | ||||
| 			step = step << 1 | ||||
| 			for i := 0; i < step; i++ { | ||||
| 				cmpiter.Prev() | ||||
| 			} | ||||
| 		} | ||||
| 		citer.Next() | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestCase2(t *testing.T) { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user