package models import ( "errors" "mtp2_if/db" "time" "gopkg.in/mgo.v2/bson" ) // CycleType 周期类型 type CycleType int const ( // CycleTypeSecond 周期类型 - 秒 CycleTypeSecond CycleType = 0 // CycleTypeMinutes1 周期类型 - 1分钟 CycleTypeMinutes1 CycleType = 1 // CycleTypeMinutes5 周期类型 - 5分钟 CycleTypeMinutes5 CycleType = 2 // CycleTypeMinutes30 周期类型 - 30分钟 CycleTypeMinutes30 CycleType = 3 // CycleTypeMinutes60 周期类型 - 60分钟 CycleTypeMinutes60 CycleType = 4 // CycleTypeMinutes120 周期类型 - 2小时 CycleTypeMinutes120 CycleType = 120 // CycleTypeMinutes240 周期类型 - 4小时 CycleTypeMinutes240 CycleType = 240 // CycleTypeMinutesDay 周期类型 - 日线 CycleTypeMinutesDay CycleType = 11 // CycleTypeTik 周期类型 - Tik CycleTypeTik CycleType = 10 ) // CycleData MongoDB中历史数据模型 type CycleData struct { ID bson.ObjectId `bson:"_id"` // id GC string `bson:"GC"` // 商品代码 ST int `bson:"ST"` // 时间戳 SST string `bson:"SST"` // 时间文本 Open int `bson:"Open"` // 开盘价 High int `bson:"High"` // 最高价 Low int `bson:"Low"` // 最低价 Close int `bson:"Close"` // 收盘价 TV int `bson:"TV"` // 总量 TT int `bson:"TT"` // 总金额 HV int `bson:"HV"` // 持仓量 SP int `bson:"SP"` // 结算价,日线周期(包括)以上才有 } // GetHistoryCycleDatas 获取历史数据 // 参数 cycleType CycleType 周期类型 // 参数 goodsCode string 商品代码 // 参数 startTime time.Time 开始时间(闭区间) // 参数 endTime time.Time 结束时间(闭区间) // 参数 count int 条数 // 返回值 []CycleData 历史数据 // 返回值 error 错误 func GetHistoryCycleDatas(cycleType CycleType, goodsCode string, startTime, endTime time.Time, count int, isAscForST bool) ([]CycleData, error) { db := db.GetMongoDB() // 获取目标Collection collection := "mincycle" switch cycleType { case CycleTypeSecond: collection = "quotetik" case CycleTypeMinutes1: collection = "mincycle" case CycleTypeMinutes5: collection = "min5cycle" case CycleTypeMinutes30: collection = "min30cycle" default: return nil, errors.New("不支持的周期类型") } c := db.C(collection) // 按时间排序 sort := "-ST" if isAscForST { sort = "ST" } // 查询数据 var cycleDatas []CycleData if err := c.Find(bson.M{ "GC": goodsCode, "ST": bson.M{"$gte": startTime.Unix(), "$lte": endTime.Unix()}, }).Limit(count).Sort(sort).All(&cycleDatas); err != nil { return nil, err } return cycleDatas, nil }