trade_position_analysis_guangzhou.go 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. package data_manage
  2. import (
  3. "eta_gn/eta_task/global"
  4. "eta_gn/eta_task/utils"
  5. "time"
  6. )
  7. func MultiInsertTradeGuangzhouDataToTop(exchange string, startDate, endDate string) (err error) {
  8. now := time.Now().Format(utils.FormatDateTime)
  9. sql1 := `INSERT INTO trade_position_guangzhou_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,rank,create_time,modify_time)
  10. SELECT
  11. n.classify_code,n.contract,SUBSTRING_INDEX(c.index_name, '_', 1) AS index_name,a.value,a.qty_sub,a.data_time,1,0,0,?,?
  12. FROM
  13. base_from_trade_guangzhou_data a
  14. LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  15. LEFT JOIN base_from_trade_guangzhou_contract n on c.base_from_trade_guangzhou_contract_id = n.base_from_trade_guangzhou_contract_id
  16. WHERE
  17. a.data_time between ? and ?
  18. and c.base_from_trade_guangzhou_classify_id in (7,8)
  19. and c.index_name like "%持买单量%"
  20. and c.index_name not like "%日成交持仓排名%"`
  21. err = global.DEFAULT_DmSQL.Exec(sql1, now, now, startDate, endDate).Error
  22. if err != nil {
  23. return
  24. }
  25. sql2 := `INSERT INTO trade_position_guangzhou_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,rank,create_time,modify_time)
  26. SELECT
  27. n.classify_code,n.contract,SUBSTRING_INDEX(c.index_name, '_', 1) AS index_name,a.value,a.qty_sub,a.data_time,2,0,0,?,?
  28. FROM
  29. base_from_trade_guangzhou_data a
  30. LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  31. LEFT JOIN base_from_trade_guangzhou_contract n on c.base_from_trade_guangzhou_contract_id = n.base_from_trade_guangzhou_contract_id
  32. WHERE
  33. a.data_time between ? and ?
  34. and c.base_from_trade_guangzhou_classify_id in (7,8)
  35. and c.index_name like "%持卖单量%"
  36. and c.index_name not like "%日成交持仓排名%"`
  37. err = global.DEFAULT_DmSQL.Exec(sql2, now, now, startDate, endDate).Error
  38. if err != nil {
  39. return
  40. }
  41. sql3 := `update trade_position_guangzhou_top s
  42. JOIN (
  43. SELECT
  44. classify_type,
  45. deal_short_name,
  46. data_time,
  47. deal_type,
  48. (@row_number := IF(@prev_year = CONCAT_WS( "_", data_time, deal_type, classify_type), @row_number + 1, 1) ) AS row_number,
  49. @prev_year := CONCAT_WS( "_", data_time, deal_type, classify_type)
  50. FROM
  51. trade_position_guangzhou_top,(SELECT @row_number := 0, @prev_year := NULL) r
  52. where data_time between ? and ?
  53. ORDER BY
  54. data_time asc,
  55. deal_type asc,
  56. classify_type asc,
  57. deal_value DESC
  58. ) t
  59. ON s.classify_type = t.classify_type AND s.deal_short_name = t.deal_short_name
  60. AND s.data_time = t.data_time AND s.deal_type = t.deal_type
  61. SET s.rank = t.row_number where s.data_time between ? and ?;`
  62. err = global.DEFAULT_DmSQL.Exec(sql3, startDate, endDate, startDate, endDate).Error
  63. return
  64. }
  65. func GetTradePositionTopOriginGuangzhouDataTimes(exchange string) (dates []string, err error) {
  66. sql := `SELECT
  67. DISTINCT a.data_time
  68. FROM
  69. base_from_trade_guangzhou_data a
  70. LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  71. WHERE
  72. c.base_from_trade_guangzhou_classify_id IN ( 7, 8 )
  73. AND ( c.index_name LIKE "%持买单量%" OR c.index_name LIKE "%持卖单量%" )
  74. AND c.index_name NOT LIKE "%日成交持仓排名%"
  75. ORDER BY
  76. a.data_time asc`
  77. err = global.DEFAULT_DmSQL.Raw(sql).Find(&dates).Error
  78. return
  79. }
  80. func GetTradePositionOriginGuangzhouClassifyCountByExchangeDataTime(exchange string, startDate, endDate string) (count int64, err error) {
  81. sql := `SELECT
  82. count(DISTINCT n.classify_code, n.contract )
  83. FROM
  84. base_from_trade_guangzhou_data a
  85. LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  86. LEFT JOIN base_from_trade_guangzhou_contract n ON c.base_from_trade_guangzhou_contract_id = n.base_from_trade_guangzhou_contract_id
  87. WHERE
  88. a.data_time between ? and ?
  89. AND c.base_from_trade_guangzhou_classify_id IN ( 7, 8 )
  90. AND ( c.index_name LIKE "%持买单量%" OR c.index_name LIKE "%持卖单量%" )
  91. AND c.index_name NOT LIKE "%日成交持仓排名%"
  92. ORDER BY
  93. a.value DESC`
  94. err = global.DEFAULT_DmSQL.Raw(sql, startDate, endDate).Scan(&count).Error
  95. return
  96. }
  97. func GetFirstBaseFromTradeGuangzhouIndexByDate(exchange string) (item *GetFirstBaseFromTradeIndeDate, err error) {
  98. sql := `SELECT
  99. a.data_time
  100. FROM
  101. base_from_trade_guangzhou_data a
  102. LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  103. WHERE
  104. c.base_from_trade_guangzhou_classify_id IN ( 7, 8 )
  105. AND ( c.index_name LIKE "%持买单量%" OR c.index_name LIKE "%持卖单量%" )
  106. AND c.index_name NOT LIKE "%日成交持仓排名%"
  107. ORDER BY
  108. a.data_time asc`
  109. err = global.DEFAULT_DmSQL.Raw(sql).First(&item).Error
  110. return
  111. }
  112. func GetTradePositionOriginClassifyGuangzhouByExchangeDataTime(exchange, startDate, endDate string) (list []TradePositionClassifyInfo, err error) {
  113. sql := `SELECT DISTINCT classify_code as classify_name, contract as classify_type FROM base_from_trade_guangzhou_contract where trade_date >= ? and trade_date <= ?`
  114. err = global.DEFAULT_DmSQL.Raw(sql, startDate, endDate).Find(&list).Error
  115. return
  116. }
  117. func MultiInsertTradeBaseDataToTopGuangzhouByClassify(exchange string, startDate, endDate string, classifyNames, classifyTypes []string) (err error) {
  118. now := time.Now().Format(utils.FormatDateTime)
  119. sql1 := `INSERT INTO trade_position_guangzhou_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,rank,create_time,modify_time)
  120. SELECT
  121. n.classify_code,n.contract,SUBSTRING_INDEX(c.index_name, '_', 1) AS index_name,a.value,a.qty_sub,a.data_time,1,0,0,?,?
  122. FROM
  123. base_from_trade_guangzhou_data a
  124. LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  125. LEFT JOIN base_from_trade_guangzhou_contract n on c.base_from_trade_guangzhou_contract_id = n.base_from_trade_guangzhou_contract_id
  126. WHERE
  127. a.data_time between ? and ?
  128. and c.base_from_trade_guangzhou_classify_id in (7,8)
  129. and n.classify_code in (` + utils.GetOrmInReplace(len(classifyNames)) + `) and n.contract in (` + utils.GetOrmInReplace(len(classifyTypes)) + `)
  130. and c.index_name like "%持买单量%"
  131. and c.index_name not like "%日成交持仓排名%"`
  132. err = global.DEFAULT_DmSQL.Exec(sql1, now, now, startDate, endDate, classifyNames, classifyTypes).Error
  133. if err != nil {
  134. return
  135. }
  136. sql2 := `INSERT INTO trade_position_guangzhou_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,rank,create_time,modify_time)
  137. SELECT
  138. n.classify_code,n.contract,SUBSTRING_INDEX(c.index_name, '_', 1) AS index_name,a.value,a.qty_sub,a.data_time,2,0,0,?,?
  139. FROM
  140. base_from_trade_guangzhou_data a
  141. LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  142. LEFT JOIN base_from_trade_guangzhou_contract n on c.base_from_trade_guangzhou_contract_id = n.base_from_trade_guangzhou_contract_id
  143. WHERE
  144. a.data_time between ? and ?
  145. and c.base_from_trade_guangzhou_classify_id in (7,8)
  146. and n.classify_code in (` + utils.GetOrmInReplace(len(classifyNames)) + `) and n.contract in (` + utils.GetOrmInReplace(len(classifyTypes)) + `)
  147. and c.index_name like "%持卖单量%"
  148. and c.index_name not like "%日成交持仓排名%"`
  149. err = global.DEFAULT_DmSQL.Exec(sql2, now, now, startDate, endDate, classifyNames, classifyTypes).Error
  150. if err != nil {
  151. return
  152. }
  153. sql3 := `update trade_position_guangzhou_top s
  154. JOIN (
  155. SELECT
  156. classify_type,
  157. deal_short_name,
  158. data_time,
  159. deal_type,
  160. (@row_number := IF(@prev_year = CONCAT_WS( "_", data_time, deal_type, classify_type), @row_number + 1, 1) ) AS row_number,
  161. @prev_year := CONCAT_WS( "_", data_time, deal_type, classify_type)
  162. FROM
  163. trade_position_guangzhou_top,(SELECT @row_number := 0, @prev_year := NULL) r
  164. where data_time between ? and ? and classify_type in (` + utils.GetOrmInReplace(len(classifyTypes)) + `)
  165. ORDER BY
  166. data_time asc,
  167. deal_type asc,
  168. classify_type asc,
  169. deal_value DESC
  170. ) t
  171. ON s.classify_type = t.classify_type AND s.deal_short_name = t.deal_short_name
  172. AND s.data_time = t.data_time AND s.deal_type = t.deal_type
  173. SET s.rank = t.row_number where s.data_time between ? and ? and s.classify_type in (` + utils.GetOrmInReplace(len(classifyTypes)) + `);`
  174. err = global.DEFAULT_DmSQL.Exec(sql3, startDate, endDate, classifyTypes, startDate, endDate, classifyTypes).Error
  175. return
  176. }