bloomberg.go 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. }
  18. // PythonBloombergGeneralResult API响应体
  19. type PythonBloombergGeneralResult struct {
  20. Code int `json:"code"`
  21. Msg string `json:"msg"`
  22. Data []PythonBloombergGeneralData `json:"data"`
  23. }
  24. // BaseFromBloombergApiIndexAndData Bloomberg原始指标及数据
  25. type BaseFromBloombergApiIndexAndData struct {
  26. BaseFromBloombergIndexId int `description:"指标ID"`
  27. IndexCode string `description:"指标编码"`
  28. IndexName string `description:"指标名称"`
  29. Unit string `description:"单位"`
  30. Source string `description:"来源"`
  31. Frequency string `description:"频度"`
  32. CreateTime time.Time `description:"创建时间"`
  33. ModifyTime time.Time `description:"修改时间"`
  34. Data []BaseFromBloombergApiIndexData `description:"数据列表"`
  35. }
  36. // BaseFromBloombergApiIndexData Bloomberg原始指标数据
  37. type BaseFromBloombergApiIndexData struct {
  38. DataTime time.Time `description:"数据日期"`
  39. Value float64 `description:"数据值"`
  40. }
  41. func FormatPythonBloombergGeneralData2Base(origin PythonBloombergGeneralData, frequency string) (item BaseFromBloombergApiIndexAndData) {
  42. if origin.IDENTIFIER == "" {
  43. return
  44. }
  45. item.IndexCode = strings.TrimSpace(origin.IDENTIFIER)
  46. item.IndexName = strings.TrimSpace(origin.NAME)
  47. item.Frequency = frequency
  48. item.Unit = "无"
  49. item.Data = make([]BaseFromBloombergApiIndexData, 0)
  50. // 数据来源的值和日期对应字段不同
  51. var dataTime time.Time
  52. var val *float64
  53. if origin.LAST_UPDATE_DATE_EOD != "" && origin.PX_LAST_EOD != nil {
  54. dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.LAST_UPDATE_DATE_EOD, time.Local)
  55. val = origin.PX_LAST_EOD
  56. }
  57. if origin.LAST_UPDATE_DATE_EOD != "" && origin.PX_VOLUME_EOD != nil {
  58. dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.LAST_UPDATE_DATE_EOD, time.Local)
  59. val = origin.PX_VOLUME_EOD
  60. }
  61. if origin.DATE != "" && origin.PX_LAST != nil {
  62. dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.DATE, time.Local)
  63. val = origin.PX_LAST
  64. }
  65. if origin.DATE != "" && origin.PX_VOLUME != nil {
  66. dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.DATE, time.Local)
  67. val = origin.PX_VOLUME
  68. }
  69. if !dataTime.IsZero() && val != nil {
  70. item.Data = append(item.Data, BaseFromBloombergApiIndexData{
  71. DataTime: dataTime,
  72. Value: *val,
  73. })
  74. }
  75. return
  76. }