IndexHistData.py 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. # -*- coding:utf-8 -*-
  2. __author__ = 'weijie'
  3. from EmQuantAPI import *
  4. import datetime
  5. import time
  6. import traceback
  7. from StockPojo import StockPojo
  8. from StockHistPojo import StockHistPojo
  9. import pandas as pd
  10. import json
  11. import array
  12. import db_config
  13. from dbOperation import dbOperation
  14. # 外汇
  15. class IndexHistData:
  16. def toGet(self):
  17. try:
  18. # csd使用范例
  19. db = dbOperation(db_config.db_zhishu)
  20. stockPojoList = db.query_list("select id, code, name, list_date listDate from t_stock_base_info where 1=1 and is_hist_add != 1")
  21. getDataTime = time.strftime('%Y-%m-%d',time.localtime(time.time()))
  22. for stockPojo in stockPojoList:
  23. # print(str(stockPojo['code']))
  24. isAdd = False
  25. sql = "select dates dates from data_hist_" + stockPojo['code'].replace(".", "_").lower() + " order by realTime desc limit 1"
  26. dates = db.query_one(sql)
  27. startDate = str(stockPojo['listDate'])
  28. if 0 == startDate.count("-"):
  29. startDate = startDate + "-01-01"
  30. elif 1 == startDate.count("-"):
  31. startDate = startDate + "-01"
  32. if dates is not None :
  33. startDate = str(dates['dates'].replace("/", "-"))
  34. dd = datetime.datetime.strptime(startDate, "%Y-%m-%d")
  35. dd = (dd + datetime.timedelta(days=1)).strftime("%Y-%m-%d")
  36. startDate = dd
  37. data = c.csd(
  38. str(stockPojo['code']),
  39. "OPEN,CLOSE,HIGH,LOW,PRECLOSE,CHANGE,PCTCHANGE,VOLUME,AMOUNT,TURN",
  40. startDate,
  41. getDataTime,
  42. "Period=1,adjustflag=1,curtype=1,Ispandas=1")
  43. print(data)
  44. data.reset_index(inplace=True)
  45. jsonData = data.to_json()
  46. text = json.loads(jsonData)
  47. stockHistPojoList = []
  48. for i in range(len(text['CODES'])):
  49. isAdd = True
  50. stockHistPojo = StockHistPojo()
  51. if "None".strip() == str(text['OPEN'][str(i)]).strip():
  52. continue
  53. stockHistPojo.codes = text['CODES'][str(i)].replace(".", "_")
  54. stockHistPojo.open = text['OPEN'][str(i)]
  55. stockHistPojo.close = text['CLOSE'][str(i)]
  56. stockHistPojo.high = text['HIGH'][str(i)]
  57. stockHistPojo.low = text['LOW'][str(i)]
  58. stockHistPojo.preclose = text['PRECLOSE'][str(i)]
  59. stockHistPojo.average = "0"
  60. stockHistPojo.change = text['CHANGE'][str(i)]
  61. stockHistPojo.pctchange = text['PCTCHANGE'][str(i)]
  62. stockHistPojo.volume = text['VOLUME'][str(i)]
  63. stockHistPojo.highlimit = "0"
  64. stockHistPojo.amount = text['AMOUNT'][str(i)]
  65. stockHistPojo.turn = text['TURN'][str(i)]
  66. stockHistPojo.tradestatus = "0"
  67. stockHistPojo.lowlimit = "0"
  68. stockHistPojo.amplitude = "0"
  69. stockHistPojo.tnum = "0"
  70. stockHistPojo.tafactor = "0"
  71. stockHistPojo.fronttafactor = "0"
  72. stockHistPojo.isststock = "0"
  73. stockHistPojo.isxststock = "0"
  74. stockHistPojo.dates = text['DATES'][str(i)]
  75. stockHistPojo.discount = "0"
  76. stockHistPojo.discountrate = "0"
  77. # datTime = datetime.datetime.strptime(stockHistPojo.dates, "%Y/%m/%d")
  78. # datTime = time.mktime(time.strptime(stockHistPojo.dates, "%Y/%m/%d"))
  79. datTime = time.mktime(time.strptime(stockHistPojo.dates, "%Y/%m/%d"))
  80. year = time.localtime(datTime).tm_year # 获取年份
  81. yearDatTime = time.mktime(time.strptime(str(year) + "/01/01", "%Y/%m/%d"))
  82. month = time.localtime(datTime).tm_mon # 获取月份
  83. monthDatTime = ""
  84. if 10 > month:
  85. datTime = time.mktime(time.strptime(str(year) + "/0" + str(month) + "/01", "%Y/%m/%d"))
  86. monthDatTime = int(datTime)
  87. else:
  88. datTime = time.mktime(time.strptime(str(year) + "/" + str(month) + "/01", "%Y/%m/%d"))
  89. monthDatTime = int(datTime)
  90. weekDatTime = time.mktime(time.strptime(stockHistPojo.dates, "%Y/%m/%d"))
  91. wday = time.localtime(weekDatTime).tm_wday # 获取周
  92. dt = datetime.datetime.strptime(stockHistPojo.dates, "%Y/%m/%d")
  93. out_date = (dt + datetime.timedelta(days=-wday)).strftime("%Y/%m/%d")
  94. weekDatTime1 = time.mktime(time.strptime(out_date, "%Y/%m/%d"))
  95. #获取日
  96. dayDatTime = time.mktime(time.strptime(stockHistPojo.dates, "%Y/%m/%d"))
  97. stockHistPojo.dateYear = str(int(yearDatTime))
  98. stockHistPojo.dateMonth = str(int(monthDatTime))
  99. stockHistPojo.dateWeek = str(int(weekDatTime1))
  100. stockHistPojo.dateDay = str(int(dayDatTime))
  101. stockHistPojoList.append(stockHistPojo)
  102. i = 0
  103. key = "`realTime`,`dates`,`open`,`close`,`high`,`low`,`preclose`,`average`,`change`,`pctchange`,`volume`,`highlimit`,`amount`,`turn`,`tradestatus`,`lowlimit`,`amplitude`,`tnum`,`tafactor`,`fronttafactor`,`isststock`,`isxststock`,`date_year`,`date_month`,`date_week`"
  104. # 批量插入 每次插入500
  105. while True :
  106. vlues = ""
  107. # print(i)
  108. # 如果数组数量大于500 截取前500个
  109. if len(stockHistPojoList) - i > 500 :
  110. # stockPojoList[i : 500] 等于java subList(i, 500)
  111. for stockHistPojo in stockHistPojoList[i : 500 + i]:
  112. vlues = vlues + "('"+str(stockHistPojo.dateDay)+"','"+str(stockHistPojo.dates)+"','" + str(stockHistPojo.open) + "','" + str(stockHistPojo.close) + "','" + str(stockHistPojo.high)+ "','" + str(stockHistPojo.low) + "','" + str(stockHistPojo.preclose) + "','" + str(stockHistPojo.average) + "','" + str(stockHistPojo.change) + "','" + str(stockHistPojo.pctchange) + "','" + str(stockHistPojo.volume) + "','" + str(stockHistPojo.highlimit) + "','" + str(stockHistPojo.amount) + "','" + str(stockHistPojo.turn) + "','" + str(stockHistPojo.tradestatus) + "','" + str(stockHistPojo.lowlimit) + "','" + str(stockHistPojo.amplitude) + "','" + str(stockHistPojo.tnum) + "','" + str(stockHistPojo.tafactor) + "','" + str(stockHistPojo.fronttafactor) + "','" + str(stockHistPojo.isststock) + "','" + str(stockHistPojo.isxststock) + "','" + str(stockHistPojo.dateYear) + "','" + str(stockHistPojo.dateMonth) + "','" + str(stockHistPojo.dateWeek) + "'),"
  113. vlues = vlues[:-1]
  114. db.batchInsert("data_hist_" + stockPojo['code'].replace(".", "_").lower(), key, vlues)
  115. i = i + 500
  116. else :
  117. # 如果数量小于500 并且不为数量不大于标记变量
  118. if len(stockHistPojoList) > i :
  119. for stockHistPojo in stockHistPojoList[i : len(stockHistPojoList)]:
  120. vlues = vlues + "('"+str(stockHistPojo.dateDay)+"','"+str(stockHistPojo.dates)+"','" + str(stockHistPojo.open) + "','" + str(stockHistPojo.close) + "','" + str(stockHistPojo.high)+ "','" + str(stockHistPojo.low) + "','" + str(stockHistPojo.preclose) + "','" + str(stockHistPojo.average) + "','" + str(stockHistPojo.change) + "','" + str(stockHistPojo.pctchange) + "','" + str(stockHistPojo.volume) + "','" + str(stockHistPojo.highlimit) + "','" + str(stockHistPojo.amount) + "','" + str(stockHistPojo.turn) + "','" + str(stockHistPojo.tradestatus) + "','" + str(stockHistPojo.lowlimit) + "','" + str(stockHistPojo.amplitude) + "','" + str(stockHistPojo.tnum) + "','" + str(stockHistPojo.tafactor) + "','" + str(stockHistPojo.fronttafactor) + "','" + str(stockHistPojo.isststock) + "','" + str(stockHistPojo.isxststock) + "','" + str(stockHistPojo.dateYear) + "','" + str(stockHistPojo.dateMonth) + "','" + str(stockHistPojo.dateWeek) + "'),"
  121. vlues = vlues[:-1]
  122. db.batchInsert("data_hist_" + stockPojo['code'].replace(".", "_").lower(), key, vlues)
  123. break
  124. if isAdd:
  125. db.update("update t_stock_base_info set is_hist_add = 1 where id = " + str(stockPojo['id']))
  126. db.close()
  127. except Exception as ee:
  128. print("error >>>",ee)
  129. traceback.print_exc()
  130. else:
  131. print("获取历史指数结束")