예제 #1
0
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()
예제 #2
0
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