| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- 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
- }
|