def collect_stock_data(stock_number, start_date, end_date): if not isinstance(start_date, datetime.date) or not isinstance( end_date, datetime.date): return end_date += datetime.timedelta(days=7) url = datayes_week_trading.format(stock_number, start_date.strftime('%Y%m%d'), end_date.strftime('%Y%m%d')) res_data = json.loads(send_request(url, datayes_headers)) if res_data.get('retCode', 0) != 1: return trading_data = res_data.get('data', []) for i in trading_data: trade_days = int(i.get('tradeDays')) if trade_days == 0: continue stock_number = i.get('ticker') try: first_trade_date = datetime.datetime.strptime( i.get('weekBeginDate'), '%Y-%m-%d') end_date = datetime.datetime.strptime(i.get('endDate'), '%Y-%m-%d') last_trade_date = datetime.datetime.strptime( i.get('endDate'), '%Y-%m-%d') except Exception as e: logging.error('Format time failed:' + str(e)) continue former_swt = SWT.objects( Q(stock_number=stock_number) & Q(first_trade_date=first_trade_date)) new_object = True if former_swt: swt = former_swt.next() new_object = False else: swt = SWT() swt.stock_number = stock_number swt.stock_name = i.get('secShortName') swt.trade_days = trade_days swt.first_trade_date = first_trade_date swt.last_trade_date = last_trade_date swt.end_date = end_date swt.pre_close_price = float(i.get('preClosePrice')) swt.weekly_open_price = float(i.get('openPrice')) swt.weekly_close_price = float(i.get('closePrice')) swt.weekly_highest_price = float(i.get('highestPrice')) swt.weekly_lowest_price = float(i.get('lowestPrice')) swt.increase_rate = str(round(i.get('chgPct') * 100, 2)) + '%' swt.turnover_amount = int(i.get('turnoverValue')) / 10000 swt.turnover_volume = int(i.get('turnoverVol')) / 100 if new_object: if not check_duplicate(swt): swt.save() else: swt.save()
def setup_realtime_swt(swt, stock_number, qr_date): # 当没有当周数据时,用日线数据补 sdt = SDT.objects(Q(stock_number=stock_number) & Q(date=qr_date)) if not sdt: return list() qr_date_trading = sdt[0] extra_swt = SWT() extra_swt.weekly_close_price = qr_date_trading.today_closing_price extra_swt.last_trade_date = qr_date_trading.date swt = list(swt) swt.insert(0, extra_swt) return swt