Advertisement
Guest User

bonds

a guest
Sep 9th, 2019
1,782
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.71 KB | None | 0 0
  1. #!/usr/bin/python
  2. # -*- coding:utf-8 -*-
  3.  
  4. import datetime
  5. import json
  6. import os
  7. import sys
  8. import time
  9.  
  10. import requests
  11.  
  12. import xlrd
  13. import xlwt
  14. from xlutils import copy as xlcopy
  15.  
  16. xlrd.Book.encoding = "utf-8"
  17.  
  18. file_name = 'bonds.xls'
  19.  
  20. url = 'https://www.jisilu.cn/data/cbnew/cb_list/'
  21.  
  22.  
  23. holds = {
  24.         113027 : ('华钰转债', 101, 10),
  25.         113514 : ('威帝转债', 99.1, 10),
  26.         113536 : ('三星转债', 101.77, 10),
  27.         123026 : ('中环转债', 110.9, 10),
  28.         128053 : ('尚荣转债', 108.096, 10),
  29.         128070 : ('智能转债', 100.107, 10),
  30.         }
  31.  
  32.  
  33. def open_or_create_book(file_name):
  34.     if not os.path.exists(file_name):
  35.         wb = xlwt.Workbook(encoding = 'utf-8')
  36.         return wb
  37.  
  38.     rb = xlrd.open_workbook(file_name, formatting_info=True)
  39.     wb = xlcopy.copy(rb)
  40.     return wb
  41.  
  42. def get_or_create_sheet(work_book):
  43.     local_time = time.localtime(time.time())
  44.     time_str = time.strftime("%Y_%m_%d", local_time)
  45.     try:
  46.         index = work_book.sheet_index(time_str)
  47.     except:
  48.         sheet = work_book.add_sheet(time_str)
  49.     else:
  50.         sheet = work_book.get_sheet(index)
  51.  
  52.     return sheet
  53.  
  54. def get_bonds(url):
  55.     res = requests.get(url)
  56.     rows = res.json()['rows']
  57.     double_lows = []
  58.  
  59.     now = datetime.datetime.now()
  60.  
  61.     for row in rows:
  62.         cur_bond = row['cell']
  63.         cur_id = cur_bond['bond_id']
  64.         name = cur_bond['bond_nm'].encode('utf-8').ljust(12)
  65.         price = float(cur_bond['price'])
  66.         ratio = cur_bond['premium_rt']
  67.         fratio = float(ratio.strip('%'))
  68.         sratio = 'Y' if fratio < 0 else ''
  69.         rating = cur_bond['rating_cd']
  70.         double_low = price + fratio
  71.         iratio = float(cur_bond['increase_rt'].strip('%'))
  72.         convert_dt = datetime.datetime.strptime(cur_bond['convert_dt'], '%Y-%m-%d')
  73.         interval = (convert_dt - now).days
  74.         convert_flag = interval if interval >= 0 else ''
  75.         pre_trading = '---' if cur_bond['price_tips'].encode('utf-8') == '待上市' else ''
  76.         if pre_trading:
  77.             continue
  78.         double_lows.append([int(cur_id), name, price, fratio, double_low, rating, convert_flag, iratio, pre_trading])
  79.  
  80.     double_lows.sort(key = lambda x:x[4])
  81.     return double_lows
  82.  
  83. def add_to_sheet(sheet, double_lows):
  84.     # header
  85.     head = ['序号', '代码', '转债名称', '现价', '溢价率', '评分', '评级', '距转股日', '涨幅', '成本', '持仓', '盈亏']
  86.     for j, c in enumerate(head):
  87.         sheet.write(0, j, c.decode('utf-8'))
  88.  
  89.     alignment = xlwt.Alignment()
  90.     alignment.horz = 0x01
  91.     style = xlwt.XFStyle()
  92.     style.alignment = alignment
  93.     for i, row in enumerate(double_lows):
  94.         if row[0] in holds:
  95.             hold = holds[row[0]]
  96.             row.pop()
  97.             row.append(hold[1])
  98.             row.append(hold[2])
  99.             row.append((row[2] - hold[1]) * hold[2])
  100.         else:
  101.             row.append('')
  102.             row.append('')
  103.  
  104.         sheet.write(i+1, 0, i+1, style)
  105.         for j, c in enumerate(row):
  106.             if j == 1:
  107.                 sheet.write(i+1, j+1, c.decode('utf-8'), style)
  108.             else:
  109.                 sheet.write(i+1, j+1, c, style)
  110.  
  111. def save_workbook(work_book):
  112.     local_time = time.localtime(time.time())
  113.     time_str = time.strftime("%Y_%m_%d", local_time)
  114.     try:
  115.         index = work_book.sheet_index(time_str)
  116.     except:
  117.         index = 0
  118.  
  119.     work_book.active_sheet = index
  120.     work_book.save(file_name)
  121.  
  122. if __name__ == '__main__':
  123.     work_book = open_or_create_book(file_name)
  124.     sheet = get_or_create_sheet(work_book)
  125.     double_lows = get_bonds(url)
  126.     add_to_sheet(sheet, double_lows)
  127.     save_workbook(work_book)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement