在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python-寫個可轉債分析器

汽車電子技術 ? 來源:程序猿知秋 ? 作者:程序猿知秋 ? 2023-02-16 15:13 ? 次閱讀

業務需求分析

  • 根據輸入的可轉債代碼和 價格(可選) ,分析單個可轉債主要信息
  • 分析的主要字段是:
    • 基本信息: 代碼、名稱、現價、剩余年限、行業、溢價率
    • 已轉股比例: 此比例過高的話,大股東提升股價或下修轉股價的動力就弱
    • 到期價值: 贖回價+持有期未付利息之和*80%, 扣除了20%的稅
    • 到期收益率: 到期價值/當前轉債價格-100%
    • 到期年化收益率: 到期收益率/剩余年限
    • 回售價值: [回售價+當期的利息(按第四年算)] +持有到第四年所有未付利息之和*80%
    • 回售收益率: 回售價值/當前轉債價格-100%
    • 回售年化收益率: 回售收益率/ 當前持有到第四年的年限(如果小于1,則直接取回售收益率)
    • 股東質押比例: 此值越高,代表公司越缺錢,將債主轉成股東的動力越大
    • 評級: 評級越高,違約的風險越低
    • PB: 市值/凈資產, PB越大,說明下修轉股價的空間越大
    • 發行規模: 此值越大說明盤子越大
    • 有無回售條款: 個別大公司,可能沒有,盡量買有回售的
    • 有無擔保: 有的話可減少違約風險
    • 轉債占比:當前剩余的可轉債占公司當前流通市值的比值
    • 是否登記強贖 :如果登記了強贖,買之前應仔細看強贖日期
  • 關于轉債利息部分,大部分轉債都是一年一付,且是按轉債發行日期開始計算,與持有人持有時間無關,所以此處計算利息時,認為超過1年,則按兩年利息計算

程序分析

程序依賴

  • 提供數據的網站(集思錄)、中登公司

  • **第三方庫依賴:requests、bs4、prettytable

    **

程序邏輯分析

  • 抓取所有可轉債列表,通過輸入的轉債代碼過濾出具體轉債
  • 根據轉債代碼,找到當前轉債的 行業、已轉股比例、擔保情況、利息等信息
  • 在中登官網獲取該公司的質押比例
  • 計算到期價值、到期收益率、到期年化收益率、回售價值、回售收益率、回售年化收益率
  • 格式化輸出所有關鍵字段信息

程序重要代碼

請求可轉債列表

def get_request(url):
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
    }


    try:
        resp = requests.get(url, headers=header)
        resp.encoding = "utf-8"
        if resp.status_code == 200:
            return resp.text
        return None
    except Exception as e:
        print("http 請求失敗!!,", e)
        return None




def get_bonds_list(url):
    '''獲取可轉債列表'''
    resp = get_request(url)
    resp_json = json.loads(resp)
    datas = resp_json["rows"]
    if datas is None:
        return None


    return datas

查詢可轉債詳細信息

def get_bonds_detail(datas, bondCode):
    if datas == None or bondCode == None:
        print("請求參數為空,請檢查程序!!")
        return None


    result = None;
    for cell in datas:
        data=cell["cell"]
        bond_id = data["bond_id"]


        if bond_id == bondCode:
            result = data
            break
    else:
        print("沒有查詢到需要找的可轉債,請重新開始!!")
        print("*"*50)
        return None


    bondId = result["bond_id"]
    # 查詢債券詳細信息
    content = get_request("https://www.jisilu.cn/data/convert_bond_detail/%s" % bondId)
    if not content:
        print("查詢單個轉債信息失敗,bondId: %s" % bondId)
        return None


    # 解析行業,已轉股比例等信息
    soup = BeautifulSoup(content, "html.parser")
    cvtRt = soup.find(id="cvt_rt").text
    if cvtRt is None:
        cvtRt = "-"
    result["cvt_rt"] = cvtRt


    indusity = soup.find(class_="jisilu_nav").select("a")[1].text
    if indusity is None:
        indusity = "-"
    result["indusity"] = indusity


    # 利息
    rate = soup.find(id="cpn_desc").text
    if rate is None:
        rate = "-"
    result["rate"] = rate


    # 到期贖回價
    redeem_price = soup.find(id="redeem_price").text
    if redeem_price is None:
        redeem_price = "-"
    result["redeem_price"] = redeem_price


    # 回售價
    put_price = soup.find(id="put_price").text
    if put_price is None:
        put_price = "-"
    result["put_price"] = put_price


    # 擔保
    guarantor = soup.find(id="guarantor").text
    if guarantor is None:
        guarantor = "-"
    result["guarantor"] = guarantor


    # 轉債占流通市值占比
    convert_amt_ratio = soup.find(id="convert_amt_ratio").text
    if convert_amt_ratio is None:
        convert_amt_ratio = "-"
    result["convert_amt_ratio"] = convert_amt_ratio


    # 查詢股東質押率
    pledge = get_pledge(result["stock_cd"])
    result["pledge"] = pledge


    return result

通過中登公司管網 查詢股東質押比例(質押比例每周最后一個交易日才更新,當前如果不是周六的話,就往前推6天,取上一周的)

def get_pledge(stock_cd):
    '''查詢股東質押比例,暫時發現周日好像無法查詢'''
    # queryData = "2021.01.02"113035
    queryData = time.strftime("%Y.%m.%d", time.localtime())
    today = datetime.datetime.today().weekday() - 1
    if today!=6:
        today = datetime.date.today()- datetime.timedelta(days=6)
        queryData=today.strftime("%Y.%m.%d")


    content = get_request("http://www.chinaclear.cn/cms-rank/queryPledgeProportion?queryDate=%s&secCde=%s" % (
        queryData, stock_cd))
    soup = BeautifulSoup(content, "html.parser")
    frTmp = soup.find(class_="Stock Stock2")
    tdList = frTmp.find_all("td")
    pledge = tdList[-1].text
    if pledge is None:
        pledge = "-"
    else:
        pledge = pledge + "%"
    return pledge

計算投資價值及收益率

def calc_rate(data):
    '''計算收益率'''
    # 過濾利息
    newRateList = []
    rateList = data["rate"].split("%")
    # 將每年的利息過濾出來
    for r in rateList:
        newR = re.findall(r"\\d.\\d", r)
        if len(newR) > 0:
            newRateList.append(float(newR[0]))


    # 到期價值=到期贖回價+ 除最后一年外,所有未付利息之和*80%
    maturity = calc_maturity(newRateList, data["year_left"], data["redeem_price"])
    data["maturity"] = maturity


    # 到期收益率
    price = float(data["price"])
    priceDq = format((maturity - price)/price*100, ".2f")
    data["priceDq"] = priceDq + "%"


    # 到期年化收益率
    priceDqYear = format(float(priceDq) / float(data["year_left"]), ".2f")
    data["priceDqYear"] = priceDqYear + "%"


    # 回售價= 100+ 除最后兩年,所有未付利息之和*80% (由于大部分轉債都是最后兩年開始回售,此處利息按第四年算)
    priceBack = 100 + newRateList[3]
    backPrice = calc_back(newRateList, data["year_left"], priceBack)
    data["backPrice"] = backPrice


    # 回售收益率
    priceHs = format((backPrice - price)/price*100, ".2f")
    data["priceHs"] = priceHs + "%"


    # 回售年化收益率
    priceHsYear = priceHs
    leftYear = float(data["year_left"]) - 2
    if leftYear > 0:
        priceHsYear = format(float(priceHs) / leftYear, ".2f")
    data["priceHsYear"] = priceHsYear + "%"


    return data

根據利息計算價值

def calc_back(newRateList, yearLeft, priceBack):
    yearLeft = float(yearLeft)


    leftYear = yearLeft - 2
    rateTotal = float(0)
    if leftYear >= 1:
        rateTotal += newRateList[3]
    if leftYear >= 2:
        rateTotal += newRateList[2]
    if leftYear >= 3:
        rateTotal += newRateList[1]
    if leftYear >= 4:
        rateTotal += newRateList[0]


    # 扣除20%的稅
    result = priceBack + rateTotal * 0.8
    return result




def calc_maturity(newRateList, yearLeft, redeemPrice):
    yearLeft = float(yearLeft)


    rateTotal = 0
    if yearLeft > 1:
        # 大于1年,按兩年利息算,最贖回價+ 倒數第二年的利息
        rateTotal += newRateList[4]
    if yearLeft > 2:
        rateTotal += newRateList[3]
    if yearLeft > 3:
        rateTotal += newRateList[2]
    if yearLeft > 4:
        rateTotal += newRateList[1]
    if yearLeft > 5:
        rateTotal += newRateList[0]


    # 扣除20%的稅
    result = float(redeemPrice) + rateTotal * 0.8
    return result

最終結果打印

def print_data(data):
    table=PrettyTable(header=False)
    table.add_row(["轉債代碼",data["bond_id"]])
    table.add_row(["轉債名稱",data["bond_nm"]])
    table.add_row(["現價",data["price"]])
    table.add_row(["評級",data["rating_cd"]])
    table.add_row(["PB(下調轉股價空間)",str(data["pb"])+"(PB越大說明下修轉股價的空間越大)"])
    table.add_row(["已轉股比例",str(data["cvt_rt"])+"(已轉股的比率太多了的話,建議不要買了,公司提升股價的愿望較弱)"])
    table.add_row(["剩余年限",data["year_left"]])
    table.add_row(["到期價值",str(data["maturity"])+"(按當前情況買入,持有到期來估算,加上持有中的利息,已扣除利息稅,持有超過1年按2年利息計算)"])
    table.add_row(["到期收益率",data["priceDq"]])
    table.add_row(["到期年化收益率",data["priceDqYear"]])
    table.add_row(["回售價值",str(data["backPrice"])+"(按當前情況買入,持有到倒數第二年計算,加上持有中的利息,已扣除利息稅,持有超過1年按2年利息計算)"])
    table.add_row(["回售收益率",data["priceHs"]])
    table.add_row(["回售年化收益率",data["priceHsYear"]])
    table.add_row(["有無回售條款","無(無回售條款,最好不要買)" if data["put_price"]=="-" else "有"])
    table.add_row(["有無擔保",data["guarantor"]])
    table.add_row(["轉債占比",str(data["convert_amt_ratio"])+"(表示當前剩余可轉債占當前流通市值的比值)"])
    table.add_row(["股東質押比例",str(data["pledge"])+"(此值越高,說明公司越缺錢,公司提高股價或者下修轉股價的概率越大)"])
    table.add_row(["行業",data["indusity"]])
    table.add_row(["溢價率",str(data["premium_rt"])+"%"])
    table.add_row(["是否登記強贖","否" if data["force_redeem"]==None else data["force_redeem"].replace("\\r\\n",",")])
    print(table)

主方法調用

while True:
    print("請輸入要分析的可轉債代碼與價格,中間用逗號分隔(如不輸入價格,默認按當前價),輸入q退出!!")
    input_str=input("請輸入:")
    if input_str==None or input_str.strip()==None or len(input_str)==0:
        print("輸入為空,需要重新輸入")
        continue


    if input_str=="q":
        break


    input_list=input_str.split(",")
    input_code=input_list[0].strip()
    input_price=input_list[1].strip() if len(input_list)>1 else None


    # 獲取可轉債列表
    datas=tools.get_bonds_list("https://www.jisilu.cn/data/cbnew/cb_list/?___jsl=LST___t=1609766310721")


    # 查詢轉債詳細信息,及組裝行業,已轉股比率等信息
    data=tools.get_bonds_detail(datas,input_code)


    if data==None:
        continue


    # 計算收益率
    if input_price != None:
        data["price"]=input_price
    data=tools.calc_rate(data)


    # 輸出當前轉債的信息
    tools.print_data(data)

使用案例

圖片

127007 ** 湖廣轉債分析**

  • 評級:AA+ ,評級比較高,表示違約的概率小
  • PB:0.63, PB是 市值/凈資產,這個值越小,說明公司下調轉股價的空間就越小,小于1,基本上不會下調轉股價了
  • 已轉股比例:29.71% , 說明之前漲到了 130以上了,已經轉了一部分股票了,這個比例還不算高,說明還有一大部分沒轉股
  • 到期價值:111.44, 根據年限及利息,從現在拿著,一直等到到期贖回,每張相當于 111.44元
  • 到期收益率:11.38%, 以當前的價格買入,持有到期的收益率
  • 到期年化收益率:3.27%, 用到期收益率除以剩余年限,這個收益率比貨幣基金高點,比債券基金少點
  • 回售價值:102.7, 表示從現在開始持有到第四年,加上利息,如果回售的話,每張大概是102.7元,收益率是 2.56%, 年化收益率是 1.79%,價值跟貨幣基金差不多
  • 股東質押比例:7.77% , 不是很高,說明公司暫時不是很缺錢,相對而言,轉股的動力會比較弱
  • **行業: 有線電視網絡 ** , 這是傳媒行業,根據之前統計的已退市可轉債情況來看,這個行業 觸發強贖的概率還是比較高的

**總結下: **湖廣轉債,違約概率很低,最差的情況,以當前價格買的話,最后收益略高于貨幣基金。 其所處行業還不錯,但公司暫時不是很缺錢,暫時基本上不能通過下調轉股價,來增加觸發強贖概率(說明短期內,除非市場環境影響,公司自己主動采取措施提升股價的希望很小)。 但是投資者如果長期持有的話,是不會虧本的,在剩余的3.5年中,還是有不小的概率觸發強贖的。 整體評價一般。

**注: 以上分析,都是分析在最差的情況下,能有什么樣的收益率,投資可轉債想要好收益率,當然是在強贖的情況下。 用安道全的話說,每只可轉債都應該強贖,且概率都很大。 但這兩年發行的可轉債很多,質量也都參差不齊,未來是否有轉債會違約,誰也說不準,但相信只要在 到期價值以內購買,AA級以上的債卷,長期持有,收益率想來是不會太差的,風險也小。 巴菲特: 投資的第一條原則是 不要虧損, 第二條原則是, 參照第一條 ...

**

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 分析器
    +關注

    關注

    0

    文章

    92

    瀏覽量

    12493
  • python
    +關注

    關注

    56

    文章

    4797

    瀏覽量

    84689
收藏 人收藏

    評論

    相關推薦

    CCS中性能分析器profile的使用?

    專家好, CCS調試程序過程中,需要分析下各函數的執行時間,CCS中提供了性能分析器profile Q1:性能分析器profile是否只能在Simulator下才能使用,Emulator下沒有這個功能? Q2:性能
    發表于 06-21 19:20

    請問python-樹莓派如何通過按鍵控制步進電機正反轉?

    步進電機驅動原理是什么?python-樹莓派如何通過按鍵控制步進電機正反轉?
    發表于 10-09 08:45

    一個高效的語法分析器生成工具

    VPGE(Visual Parser Generation Environment)是一個可視化語法分析器集成開發環境,除了具有良好的界面和強大的調試功能,其LALR(1)分析器的生成速度達到并超過公認的分析器生成速度最快
    發表于 08-29 10:04 ?16次下載

    轉換到TimeQuest時序分析器教程(電子書)

    轉換到TimeQuest時序分析器教程(電子書)
    發表于 03-23 16:49 ?0次下載

    一種實用的脈沖幅度分析器

    摘要:通過對高精度脈沖幅度分析器的電路分析,得出了在使用過程中,采用高精度和低溫系數的電壓基準集成塊,可保證該脈沖幅度分析器比傳統脈沖幅度分析器靈敏度高、穩定
    發表于 05-25 08:39 ?29次下載

    遙控分析器

    遙控分析器
    發表于 09-18 14:14 ?609次閱讀
    遙控<b class='flag-5'>分析器</b>

    諧波失真分析器

    諧波失真分析器 電路包括一個1KHZ的低失真
    發表于 09-23 14:34 ?829次閱讀
    諧波失真<b class='flag-5'>分析器</b>

    網絡分析器,網絡分析器原理是什么?

    網絡分析器,網絡分析器原理是什么? 網絡分析器   具有發現并解決各種故障特性的硬件或軟件設備
    發表于 03-22 11:25 ?1054次閱讀

    協議分析器在WLAN中的應用

    協議分析器在WLAN中的應用 協議分析器廣泛應用于有線網絡,成為一類極有用的測試和維護工具。然而,在WLAN領域,這個問題很有可
    發表于 03-29 17:11 ?517次閱讀

    靜態代碼分析器

    Fortify的靜態代碼分析器(Static Code Analyzer,SCA)是組成Fortify 360的三個分析器之一。SCA工作在開發階段,以用于分析應用程序的源代碼是否存在安全漏洞。這種類型的
    發表于 04-07 20:32 ?22次下載

    交換機端口分析器

    本文將重點介紹“交換端口分析器(SPAN)”的工作原理及配置方法。
    發表于 02-03 14:09 ?1002次閱讀

    python-控制khr3hv-master機器人

    python-控制khr3hv機器人,感興趣的小伙伴們可以瞧一瞧。
    發表于 11-22 15:40 ?2次下載

    圖形音頻分析器開源設計

    電子發燒友網站提供《圖形音頻分析器開源設計.zip》資料免費下載
    發表于 08-02 15:18 ?0次下載
    圖形音頻<b class='flag-5'>分析器</b>開源設計

    Py-spy:用于Python 程序性能監控、分析器

    py-spy是用于Python程序的性能監控、分析器。它使你可以直觀地看到Python程序花費的時間,而無需重新啟動程序或以任何方式修改代碼。 py-spy的開銷非常低:為了最大化提高速度,它是用
    的頭像 發表于 10-16 11:50 ?880次閱讀
    Py-spy:用于<b class='flag-5'>Python</b> 程序性能監控、<b class='flag-5'>分析器</b>

    py-spy:用于Python程序的性能監控、分析器

    py-spy是用于Python程序的性能監控、分析器。它使你可以直觀地看到Python程序花費的時間,而無需重新啟動程序或以任何方式修改代碼。 py-spy的開銷非常低:為了最大化提高速度,它是用
    的頭像 發表于 11-01 10:13 ?1156次閱讀
    py-spy:用于<b class='flag-5'>Python</b>程序的性能監控、<b class='flag-5'>分析器</b>
    主站蜘蛛池模板: 四虎精品成人免费观看| 欧美成人精品| 久久99精品久久久久久园产越南| 怡红院影院| 午夜黄色小视频| 亚洲一级毛片免观看| 久久综合久| 免费网站黄色| 99热免费| 黄视频在线观看免费| 就要干就要操| 不卡免费在线视频| 精品一区 二区三区免费毛片| 日本黄色网址视频| 日本不卡在线视频高清免费 | 酒色影院| 天堂网在线资源www种子| videosgratis欧美另类老太| 啪一啪日一日| 日本免费一级视频| 手机看片1024免费视频| 男女交性永久免费视频播放| 免费看污视频软件| 黄色三级网站| 午夜欧美视频| 午夜在线播放视频在线观看视频| 亚洲一区二区三区四区在线 | 97人人在线视频| 91大神网址| 欧美一卡二三卡四卡不卡| 色天天综合色天天天天看大| www.av免费| 藏经阁在线| 日本三级黄在线观看| 久久久噜噜噜久久网| 98色花堂永久地址国产精品| 色天使美国| 久久免费公开视频| 四虎a级欧美在线观看| 天天爱天天做天天爽天天躁| 亚洲最大的黄色网址|