def __fetch_histdata(basic=SjGpJb, start=None, end=None, ktype='D'): df = tushare.get_hist_data(basic.dm, start=start, end=end, ktype=ktype) if df is not None and not df.empty: records = df.to_records() # 接口中date变量在ktype为日, 周, 月时为字符日期, 5, 15, 30, 60时为字符日期时间 if ktype == 'D' or ktype == 'W' or ktype == 'M': pattern = '%Y-%m-%d' else: pattern = '%Y-%m-%d %H:%M:%S' jyrq = str_utils.to_timezone(records[0]['date'], pattern).date() # 包含记录且行情日期大于基本表的交易日期,则更新对应字段 if len(records) > 0 and (basic.jyrq is None or basic.jyrq < jyrq): basic.jyrq = records[0]['date'] basic.kpj = records[0]['open'] basic.spj = records[0]['close'] basic.zgj = records[0]['high'] basic.zdj = records[0]['low'] basic.cjl = records[0]['volume'] basic.zde = records[0]['price_change'] basic.zdf = records[0]['p_change'] basic.hsl = records[0]['turnover'] basic.save() for record in records: model = SjLshqD # 默认日线 if ktype == 'W': # 周线 model = SjLshqW elif ktype == 'M': # 月线 model = SjLshqM elif ktype == '5': # 5分线 model = SjLshq5 elif ktype == '15': # 15分线 model = SjLshq15 elif ktype == '30': # 30分线 model = SjLshq30 elif ktype == '60': # 60线 model = SjLshq60 sj = str_utils.to_timezone(record['date'], pattern) data = model.objects.get_or_create(gpjb=basic, sj=sj)[0] data.dm = basic.dm data.kpj = record['open'] data.spj = record['close'] data.zgj = record['high'] data.zdj = record['low'] data.cjl = record['volume'] data.zde = record['price_change'] data.zdf = record['p_change'] data.jj5 = record['ma5'] data.jj10 = record['ma10'] data.jj20 = record['ma20'] data.jl5 = record['v_ma5'] data.jl10 = record['v_ma10'] data.jl20 = record['v_ma20'] data.hsl = record['turnover'] data.save()
def init_day_data_by_file(import_files_path): files = os.listdir(import_files_path) for f in files: temp_path = import_files_path + '/' + f print(temp_path) csvfile = file(temp_path, 'rb') reader = csv.reader(csvfile) reader.next() # 第一行略去 basic = SjGpJb.objects.get(dm=stock_utils.gen_ggid(f)) for line in reader: print(line) sj = str_utils.to_timezone(line[0], '%Y-%m-%d') data = SjLshqD.objects.get_or_create(gpjb=basic, sj=sj)[0] data.kpj = line[1] data.zgj = line[2] data.spj = line[3] data.zdj = line[4] data.cjl = line[5] data.zde = line[6] data.zdf = line[7] data.jj5 = line[8] data.jj10 = line[9] data.jj20 = line[10] data.jl5 = line[11] data.jl10 = line[12] data.jl20 = line[13] data.hsl = line[14] data.save() csvfile.close()
def init_day_data(start=None): SjLshqD.objects.all().delete() stocks = SjGpJb.objects.order_by('dm').all() t1 = datetime.now() for basic in stocks: print('fetch stock: %s\'s data ' % basic.dm) if start is None: df = ts.get_hist_data(basic.dm, ktype='D') else: df = ts.get_hist_data(basic.dm, start=start, ktype='D') if df is not None and not df.empty: records = df.to_records() pattern = '%Y-%m-%d' for record in records: sj = str_utils.to_timezone(record['date'], pattern) data = SjLshqD.objects.get_or_create(gpjb=basic, sj=sj)[0] data.kpj = record['open'] data.spj = record['close'] data.zgj = record['high'] data.zdj = record['low'] data.cjl = record['volume'] data.zde = record['price_change'] data.zdf = record['p_change'] data.jj5 = record['ma5'] data.jj10 = record['ma10'] data.jj20 = record['ma20'] data.jl5 = record['v_ma5'] data.jl10 = record['v_ma10'] data.jl20 = record['v_ma20'] data.hsl = record['turnover'] data.save() t2 = datetime.now() print('init_day_data use totaol\' time: %s' % (t2 - t1).total_seconds())
def fetch_stock_basic(request): result = dict() try: if fetch_info['is_fetching_basic']: result['code'] = '1' else: fetch_info['is_fetching_basic'] = True df = tushare.get_stock_basics() records = df.to_records() for record in records: code = record['code'] ggid = stock_utils.gen_ggid(code) sj_gp_jb = SjGpJb.objects.get_or_create(ggid=ggid)[0] sj_gp_jb.dm = code sj_gp_jb.mc = record['name'] py = pinyin.Converter().convert(record['name'], fmt='fl', sc=False) sj_gp_jb.py = str_utils.qj_to_bj(py.lower().replace(' ', '')) sj_gp_jb.sshy = record['industry'] sj_gp_jb.dq = record['area'] sj_gp_jb.syl = record['pe'] sj_gp_jb.ltgb = record['outstanding'] sj_gp_jb.zgb = record['totals'] sj_gp_jb.zzc = record['totalAssets'] sj_gp_jb.ldzc = record['liquidAssets'] sj_gp_jb.gdzc = record['fixedAssets'] sj_gp_jb.gjj = record['reserved'] sj_gp_jb.mggj = record['reservedPerShare'] sj_gp_jb.mgsy = record['esp'] sj_gp_jb.mgjz = record['bvps'] sj_gp_jb.sjl = record['pb'] ssrq = record['timeToMarket'] if ssrq > 0: sj_gp_jb.ssrq = str_utils.to_timezone(str(ssrq), "%Y%m%d") sj_gp_jb.tbsj = timezone.now() sj_gp_jb.save() result['code'] = '0' fetch_info['is_fetching_basic'] = False except Exception as e: result['code'] = '-1' result['message'] = e.message fetch_info['is_fetching_basic'] = False return JsonResponse(result)