trade_analysis.go 6.9 KB

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