无敌
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
|
return ts
|
||||||
}
|
}
|
||||||
|
|
||||||
var CurrentDay = "2017-03-15"
|
|
||||||
|
|
||||||
func GetStocksByCondition(cday time.Time) []*Stock {
|
func GetStocksByCondition(cday time.Time) []*Stock {
|
||||||
var stocks []*Stock
|
var stocks []*Stock
|
||||||
|
|
||||||
// cday := GetDate(CurrentDay)
|
// cday := GetDate(CurrentDay)
|
||||||
start := cday.Add(-time.Hour * 24 * 14)
|
start := cday.Add(-time.Hour * 24 * 14)
|
||||||
log.Println(start.Local(), cday.Local())
|
log.Println("重新从", start.Local().Format("2006-01-02"), cday.Local().Format("2006-01-02"), "策略选股")
|
||||||
|
|
||||||
// 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())
|
// istartStock, _ := DateStocks.Get(start.Unix())
|
||||||
siter := DateStocks.Iterator()
|
siter := DateStocks.Iterator()
|
||||||
|
@ -69,17 +33,17 @@ func GetStocksByCondition(cday time.Time) []*Stock {
|
||||||
{
|
{
|
||||||
ssiter := siter.Value().(*treelist.Tree[int64]).Iterator()
|
ssiter := siter.Value().(*treelist.Tree[int64]).Iterator()
|
||||||
ssiter.SeekToFirst()
|
ssiter.SeekToFirst()
|
||||||
ss := ssiter.Value().(*Stock)
|
// ss := ssiter.Value().(*Stock)
|
||||||
log.Printf("%s", ss.Date.Local().Format("2006-01-02"))
|
// log.Printf("%s", ss.Date.Local().Format("2006-01-02"))
|
||||||
}
|
}
|
||||||
|
|
||||||
iter := DateStocks.Iterator()
|
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])
|
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 {
|
endStock.Traverse(func(s *treelist.Slice[int64]) bool {
|
||||||
var ok bool
|
var ok bool
|
||||||
|
@ -131,16 +95,17 @@ func GetStocksByCondition(cday time.Time) []*Stock {
|
||||||
|
|
||||||
func TestMoney(t *testing.T) {
|
func TestMoney(t *testing.T) {
|
||||||
|
|
||||||
var money float64 = 0.0
|
var money float64 = 1000000.0
|
||||||
cday := GetDate("2017-05-15")
|
cday := GetDate("2017-04-01")
|
||||||
|
|
||||||
for money < 1.0 {
|
ALL_LOOP:
|
||||||
|
for money < 1000000*3 {
|
||||||
|
|
||||||
selectStocks := GetStocksByCondition(cday)
|
selectStocks := GetStocksByCondition(cday)
|
||||||
log.Println(len(selectStocks))
|
// log.Println(len(selectStocks))
|
||||||
|
|
||||||
for _, s := range selectStocks[0:15] {
|
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)
|
// log.Println(s.UpsDownsRatio, s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,20 +113,26 @@ func TestMoney(t *testing.T) {
|
||||||
|
|
||||||
start := (len(selectStocks) - 10) / 2
|
start := (len(selectStocks) - 10) / 2
|
||||||
selectStocks = selectStocks[start : start+10]
|
selectStocks = selectStocks[start : start+10]
|
||||||
for _, s := range selectStocks {
|
// for _, s := range selectStocks {
|
||||||
log.Printf("%.4f%% %s", s.UpsDownsRatio*100.0, s.Name)
|
// log.Printf("%.4f%% %s", s.UpsDownsRatio*100.0, s.Name)
|
||||||
}
|
// }
|
||||||
// TODO: 测试 收益
|
// TODO: 测试 收益
|
||||||
iter := DateStocks.Iterator()
|
iter := DateStocks.Iterator()
|
||||||
iter.SeekGT(cday.Unix())
|
iter.SeekGT(cday.Unix())
|
||||||
|
if !iter.Valid() {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
var total float64 = 0.0
|
var total float64 = 0.0
|
||||||
iter.Next()
|
iter.Next()
|
||||||
|
|
||||||
|
if !iter.Valid() {
|
||||||
|
break ALL_LOOP
|
||||||
|
}
|
||||||
cstocks := iter.Value().(*treelist.Tree[int64])
|
cstocks := iter.Value().(*treelist.Tree[int64])
|
||||||
|
|
||||||
var cs *Stock
|
var cs *Stock
|
||||||
|
|
||||||
for _, s := range selectStocks {
|
for _, s := range selectStocks {
|
||||||
itf, ok := cstocks.Get(s.Code)
|
itf, ok := cstocks.Get(s.Code)
|
||||||
if ok {
|
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))
|
total = total / float64(len(selectStocks))
|
||||||
|
|
||||||
log.Printf("%.2f%%, %s", total*100, cs.Date.Local())
|
log.Printf("%s 总收益:%.2f%%", csdate, total*100)
|
||||||
if total >= 0.06 {
|
if total >= 0.10 || total <= -0.20 {
|
||||||
money += total
|
money = money + money*total
|
||||||
cday = cs.Date
|
cday = cs.Date
|
||||||
|
log.Printf("最后总财富 1000000 -> money: %f", money)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Printf("最后总财富 1000000 -> money: %f", money)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCase3(t *testing.T) {
|
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) {
|
func TestCase2(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user