quote.go 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package models
  2. import (
  3. "errors"
  4. "mtp2_if/db"
  5. "time"
  6. "gopkg.in/mgo.v2/bson"
  7. )
  8. // CycleType 周期类型
  9. type CycleType int
  10. const (
  11. // CycleTypeSecond 周期类型 - 秒
  12. CycleTypeSecond CycleType = 0
  13. // CycleTypeMinutes1 周期类型 - 1分钟
  14. CycleTypeMinutes1 CycleType = 1
  15. // CycleTypeMinutes5 周期类型 - 5分钟
  16. CycleTypeMinutes5 CycleType = 2
  17. // CycleTypeMinutes30 周期类型 - 30分钟
  18. CycleTypeMinutes30 CycleType = 3
  19. // CycleTypeMinutes60 周期类型 - 60分钟
  20. CycleTypeMinutes60 CycleType = 4
  21. // CycleTypeMinutes120 周期类型 - 2小时
  22. CycleTypeMinutes120 CycleType = 120
  23. // CycleTypeMinutes240 周期类型 - 4小时
  24. CycleTypeMinutes240 CycleType = 240
  25. // CycleTypeMinutesDay 周期类型 - 日线
  26. CycleTypeMinutesDay CycleType = 11
  27. // CycleTypeTik 周期类型 - Tik
  28. CycleTypeTik CycleType = 10
  29. )
  30. // CycleData MongoDB中历史数据模型
  31. type CycleData struct {
  32. ID bson.ObjectId `bson:"_id"` // id
  33. GC string `bson:"GC"` // 商品代码
  34. ST int `bson:"ST"` // 时间戳
  35. SST string `bson:"SST"` // 时间文本
  36. Open int `bson:"Open"` // 开盘价
  37. High int `bson:"High"` // 最高价
  38. Low int `bson:"Low"` // 最低价
  39. Close int `bson:"Close"` // 收盘价
  40. TV int `bson:"TV"` // 总量
  41. TT int `bson:"TT"` // 总金额
  42. HV int `bson:"HV"` // 持仓量
  43. SP int `bson:"SP"` // 结算价,日线周期(包括)以上才有
  44. }
  45. // GetHistoryCycleDatas 获取历史数据
  46. // 参数 cycleType CycleType 周期类型
  47. // 参数 goodsCode string 商品代码
  48. // 参数 startTime time.Time 开始时间(闭区间)
  49. // 参数 endTime time.Time 结束时间(闭区间)
  50. // 参数 count int 条数
  51. // 返回值 []CycleData 历史数据
  52. // 返回值 error 错误
  53. func GetHistoryCycleDatas(cycleType CycleType, goodsCode string, startTime, endTime time.Time, count int, isAscForST bool) ([]CycleData, error) {
  54. db := db.GetMongoDB()
  55. // 获取目标Collection
  56. collection := "mincycle"
  57. switch cycleType {
  58. case CycleTypeSecond:
  59. collection = "quotetik"
  60. case CycleTypeMinutes1:
  61. collection = "mincycle"
  62. case CycleTypeMinutes5:
  63. collection = "min5cycle"
  64. case CycleTypeMinutes30:
  65. collection = "min30cycle"
  66. default:
  67. return nil, errors.New("不支持的周期类型")
  68. }
  69. c := db.C(collection)
  70. // 按时间排序
  71. sort := "-ST"
  72. if isAscForST {
  73. sort = "ST"
  74. }
  75. // 查询数据
  76. var cycleDatas []CycleData
  77. if err := c.Find(bson.M{
  78. "GC": goodsCode,
  79. "ST": bson.M{"$gte": startTime.Unix(), "$lte": endTime.Unix()},
  80. }).Limit(count).Sort(sort).All(&cycleDatas); err != nil {
  81. return nil, err
  82. }
  83. return cycleDatas, nil
  84. }