trade_analysis.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package trade_analysis
  2. import (
  3. "hongze/hongze_yb/global"
  4. "time"
  5. )
  6. // 持仓榜单表
  7. type TradePositionTop struct {
  8. Id uint64 `orm:"column(id);pk"`
  9. ClassifyName string //分类名称
  10. ClassifyType string //分类名称下的类型
  11. DataTime string //数据日期
  12. CreateTime time.Time //插入时间
  13. ModifyTime time.Time //修改时间
  14. DealShortName string //成交量公司简称
  15. DealValue int //成交量
  16. DealChange int //成交变化量
  17. DealType int //交易类型:1多单,2空单,3净多单,4净空单
  18. SourceType int //数据来源,0是原始数据的值,1是由T+1日推算出的值,2是由T日的榜单数据推算出的值
  19. Rank int //排名
  20. }
  21. type TradeClassifyNameList struct {
  22. Exchange string `description:"交易所" json:"exchange"`
  23. Num int `description:"品种数量" json:"num"`
  24. DataTime string `description:"最新更新时间" json:"data_time"`
  25. Items []TradeClassifyNameListItem `description:"子类" json:"items"`
  26. }
  27. type TradeClassifyNameListItem struct {
  28. ClassifyName string `description:"交易分类" json:"classify_name"`
  29. Items []TradeClassifyNameListItemItem `description:"合约代码" json:"items"`
  30. }
  31. type TradeClassifyNameListItemItem struct {
  32. ClassifyType string `json:"classify_type"` //分类名称下的类型
  33. Sort int `json:"sort"`
  34. }
  35. type TradeClassifyName struct {
  36. ClassifyName string //分类名称
  37. ClassifyType string //分类名称下的类型
  38. }
  39. func GetExchangeClassify(exchange string) (list []TradeClassifyName, err error) {
  40. tableName := "base_from_trade_" + exchange + "_index"
  41. orderStr := "CONVERT(classify_name using gbk) DESC, classify_type asc"
  42. if exchange == "zhengzhou"{
  43. orderStr = "classify_name asc"
  44. }
  45. err = global.MYSQL["data"].
  46. Table(tableName).
  47. Select("classify_name, classify_type").
  48. Group("classify_name, classify_type").
  49. Order(orderStr).Scan(&list).Error
  50. return
  51. }
  52. type LastTimeItem struct {
  53. CreateTime time.Time
  54. }
  55. func GetExchangeLastTime(exchange string) (item LastTimeItem, err error) {
  56. tableName := "base_from_trade_" + exchange + "_index"
  57. err = global.MYSQL["data"].
  58. Table(tableName).
  59. Select("create_time").
  60. Order("create_time desc").First(&item).Error
  61. return
  62. }
  63. type GetPositionTopReq struct {
  64. Exchange string `json:"exchange" form:"exchange"` //交易所
  65. ClassifyName string `json:"classify_name" form:"classify_name"` //分类名称
  66. ClassifyType string `json:"classify_type" form:"classify_type"` //具体合约名称
  67. DataTime string `json:"data_time" form:"data_time"` //请求日期,如果为空,则返回最新的榜单日期
  68. }
  69. type GetPositionTopResp struct {
  70. BuyList GetPositionTopList `json:"buy_list"` //多单列表
  71. SoldList GetPositionTopList `json:"sold_list"` //空单列表
  72. CleanBuyList GetPositionTopList `json:"clean_buy_list"` //净多单列表
  73. CleanSoldList GetPositionTopList `json:"clean_sold_list"` //净空单列表
  74. DataTime string `json:"data_time"` //最新日期或者请求日期
  75. }
  76. type GetPositionTopList struct {
  77. TotalDealValue int `json:"total_deal_value"` //总计成交量
  78. TotalDealChange int `json:"total_deal_change"` //校昨日变化
  79. List []GetPositionTopListItem `json:"list"` //榜单详情列表
  80. }
  81. type GetPositionTopListItem struct {
  82. DealShortName string `json:"deal_short_name"` //成交量公司简称
  83. DealValue int `json:"deal_value"` //成交量
  84. DealChange int `json:"deal_change"` //成交变化量
  85. Rank int `json:"rank"` //当前名次
  86. Rate string `json:"rate"` //当前占比
  87. BeforeAllRate string `json:"before_all_rate"` //排在前面的成交量总计占比(包含)
  88. BeforeAllValue int `json:"before_all_value"` //排在前面的成交量总计
  89. BeforeAllChange int `json:"before_all_change"` //排在前面的成交量增减总计
  90. }
  91. func GetTradePositionTop(exchange string, classifyName, classifyType, dataTime string)(list []TradePositionTop, err error) {
  92. tableName := "trade_position_" + exchange + "_top"
  93. err = global.MYSQL["data"].
  94. Table(tableName).
  95. Where("classify_name=? and classify_type=? and data_time=? and rank <=20", classifyName, classifyType, dataTime).
  96. Order("deal_value desc").Scan(&list).Error
  97. return
  98. }
  99. func GetTradeTopLastDataTime(exchange string, classifyName, classifyType string)(item TradePositionTop, err error) {
  100. tableName := "trade_position_" + exchange + "_top"
  101. err = global.MYSQL["data"].
  102. Table(tableName).
  103. Where("classify_name=? and classify_type=?", classifyName, classifyType).
  104. Order("data_time desc").First(&item).Error
  105. return
  106. }