bloomberg.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package pcsg
  2. import (
  3. "eta/eta_bridge/utils"
  4. "strings"
  5. "time"
  6. )
  7. // PythonBloombergGeneralData 通用数据格式
  8. type PythonBloombergGeneralData struct {
  9. NAME string `json:"NAME" description:"指标名称, 可能为null"`
  10. IDENTIFIER string `json:"IDENTIFIER" description:"指标编码"`
  11. PX_LAST_EOD *float64 `json:"PX_LAST_EOD" description:"数据值, 可能为null"`
  12. PX_VOLUME_EOD *float64 `json:"PX_VOLUME_EOD" description:"数据值, 可能为null"`
  13. PX_LAST *float64 `json:"PX_LAST" description:"数据值, 可能为null"`
  14. PX_VOLUME *float64 `json:"PX_VOLUME" description:"数据值, 可能为null"`
  15. LAST_UPDATE_DATE_EOD string `json:"LAST_UPDATE_DATE_EOD" description:"数据日期, 可能为null"`
  16. DATE string `json:"DATE" description:"数据日期, 可能为null"`
  17. PX_SETTLE *float64 `json:"PX_SETTLE" description:"数据值, 可能为null"`
  18. PX_SETTLE_LAST_DT string `json:"PX_SETTLE_LAST_DT" description:"数据日期, 可能为null"`
  19. }
  20. // PythonBloombergGeneralResult API响应体
  21. type PythonBloombergGeneralResult struct {
  22. Code int `json:"code"`
  23. Msg string `json:"msg"`
  24. Data []PythonBloombergGeneralData `json:"data"`
  25. }
  26. // BaseFromBloombergApiIndexAndData Bloomberg原始指标及数据
  27. type BaseFromBloombergApiIndexAndData struct {
  28. BaseFromBloombergIndexId int `description:"指标ID"`
  29. IndexCode string `description:"指标编码"`
  30. IndexName string `description:"指标名称"`
  31. Unit string `description:"单位"`
  32. Source string `description:"来源"`
  33. Frequency string `description:"频度"`
  34. CreateTime time.Time `description:"创建时间"`
  35. ModifyTime time.Time `description:"修改时间"`
  36. Data []BaseFromBloombergApiIndexData `description:"数据列表"`
  37. }
  38. // BaseFromBloombergApiIndexData Bloomberg原始指标数据
  39. type BaseFromBloombergApiIndexData struct {
  40. DataTime time.Time `description:"数据日期"`
  41. Value float64 `description:"数据值"`
  42. }
  43. func FormatPythonBloombergGeneralData2Base(origin PythonBloombergGeneralData, frequency string) (item BaseFromBloombergApiIndexAndData) {
  44. if origin.IDENTIFIER == "" {
  45. return
  46. }
  47. item.IndexCode = strings.TrimSpace(origin.IDENTIFIER)
  48. item.IndexName = strings.TrimSpace(origin.NAME)
  49. item.Frequency = frequency
  50. item.Unit = "无"
  51. item.Data = make([]BaseFromBloombergApiIndexData, 0)
  52. // 数据来源的值和日期对应字段不同
  53. var dataTime time.Time
  54. var val *float64
  55. if origin.LAST_UPDATE_DATE_EOD != "" && origin.PX_LAST_EOD != nil {
  56. dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.LAST_UPDATE_DATE_EOD, time.Local)
  57. val = origin.PX_LAST_EOD
  58. }
  59. if origin.LAST_UPDATE_DATE_EOD != "" && origin.PX_VOLUME_EOD != nil {
  60. dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.LAST_UPDATE_DATE_EOD, time.Local)
  61. val = origin.PX_VOLUME_EOD
  62. }
  63. if origin.DATE != "" && origin.PX_LAST != nil {
  64. dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.DATE, time.Local)
  65. val = origin.PX_LAST
  66. }
  67. if origin.DATE != "" && origin.PX_VOLUME != nil {
  68. dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.DATE, time.Local)
  69. val = origin.PX_VOLUME
  70. }
  71. if origin.PX_SETTLE_LAST_DT != "" && origin.PX_SETTLE != nil {
  72. dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.PX_SETTLE_LAST_DT, time.Local)
  73. val = origin.PX_SETTLE
  74. }
  75. if !dataTime.IsZero() && val != nil {
  76. item.Data = append(item.Data, BaseFromBloombergApiIndexData{
  77. DataTime: dataTime,
  78. Value: *val,
  79. })
  80. }
  81. return
  82. }