短期国债价格

短期国债价格 根据收益率或贴现率计算国库券价格
根据债券等价收益率、货币市场收益率或贴现率,计算每 100 元面值短期国债(国库券)的价格。
格式 yyyy-mm-dd
格式 yyyy-mm-dd
计算结果
点击「计算」查看输出
code 计算逻辑代码
以下为「短期国债价格」QuantLib 代码示例。

# 依赖版本:
# python==3.9
# QuantLib==1.43
import QuantLib as ql

def _parse_date(s: str) -> ql.Date:
    """解析 'YYYY-MM-DD' 为 ql.Date"""
    from datetime import datetime
    d = datetime.strptime(s.strip(), "%Y-%m-%d")
    return ql.Date(d.day, d.month, d.year)


def qjquant_calu_tbillprice(rate, settle_date, maturity_date, type=2):
    try:
        if rate < 0:
            return {"ok": False, "msg": "利率不能为负"}
        if type not in (1, 2, 3):
            return {"ok": False, "msg": f"不支持的 Type: {type}"}

        settle_qd = _parse_date(settle_date)
        maturity_qd = _parse_date(maturity_date)

        if settle_qd >= maturity_qd:
            return {"ok": False, "msg": "结算日必须早于到期日"}

        FACE = 100.0
        # 用 QuantLib 计算 Actual/360 天数
        days = ql.Actual360().dayCount(settle_qd, maturity_qd)

        if days <= 0:
            return {"ok": False, "msg": "到期天数异常"}

        if type == 1:          # 货币市场收益率
            price = FACE / (1.0 + rate * days / 360.0)
        elif type == 2:        # 债券等价收益率
            price = FACE / (1.0 + rate * days / 365.0)
        else:                  # 贴现率
            price = FACE * (1.0 - rate * days / 360.0)

        if price < 0:
            price = 0.0

        return {"ok": True, "price": round(price, 4)}

    except ValueError as ve:
        return {"ok": False, "msg": f"参数错误: {ve}"}
    except Exception as e:
        return {"ok": False, "msg": f"未知错误: {e}"}
# ============================================================
# 3) 可复制运行的示例
# ============================================================
if __name__ == "__main__":
    print("=" * 60)
    print("短期国债价格 tbillprice 示例")
    print("=" * 60)

    # 示例 1:债券等价收益率(type=2,默认)
    r1 = qjquant_calu_tbillprice(
        rate=0.045,
        settle_date="2002-10-01",
        maturity_date="2003-03-31",
        type=2,
    )
    print("\n[示例1] type=2 债券等价收益率 5%")
    print("  结果:", r1)

    # 示例 2:货币市场收益率(type=1)
    r2 = qjquant_calu_tbillprice(
        rate=0.05,
        settle_date="2024-01-02",
        maturity_date="2024-07-01",
        type=1,
    )
    print("\n[示例2] type=1 货币市场收益率 5%")
    print("  结果:", r2)

    # 示例 3:贴现率(type=3)
    r3 = qjquant_calu_tbillprice(
        rate=0.05,
        settle_date="2024-01-02",
        maturity_date="2024-07-01",
        type=3,
    )
    print("\n[示例3] type=3 贴现率 5%")
    print("  结果:", r3)