FundHistData.py 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  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 FundHistData:
  16. def toGet(self):
  17. try:
  18. # csd使用范例
  19. db = dbOperation(db_config.db_jijin)
  20. stockPojoList = db.query_list("select id, code, name, list_date listDate from t_stock_base_info where code not like '%OF'")
  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,AVERAGE,CHANGE,PCTCHANGE,VOLUME,AMOUNT,TURN,DISCOUNT,DISCOUNTRATE",
  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. stockHistPojo.codes = text['CODES'][str(i)].replace(".", "_")
  52. stockHistPojo.open = text['OPEN'][str(i)]
  53. stockHistPojo.close = text['CLOSE'][str(i)]
  54. stockHistPojo.high = text['HIGH'][str(i)]
  55. stockHistPojo.low = text['LOW'][str(i)]
  56. stockHistPojo.preclose = text['PRECLOSE'][str(i)]
  57. if "None".strip() == str(text['AVERAGE'][str(i)]).strip():
  58. continue
  59. stockHistPojo.average = text['AVERAGE'][str(i)]
  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 = text['DISCOUNT'][str(i)]
  76. stockHistPojo.discountrate = text['DISCOUNTRATE'][str(i)]
  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`,`dis_count`,`dis_count_rate`"
  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) + "','" + str(stockHistPojo.discount) + "','" + str(stockHistPojo.discountrate) + "'),"
  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) + "','" + str(stockHistPojo.discount) + "','" + str(stockHistPojo.discountrate) + "'),"
  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("获取历史基金结束")