主要内容

本页采用了机器翻译。点击此处可查看英文原文。

Java 客户端的债券定价工具

此示例展示了一个通过简单公式计算债券价格的应用程序。

通过在简单的图形界面中输入以下已知值来运行此示例:

  • 优惠券支付 - C

  • 支付次数 - N

  • 利率 - i

  • 债券或期权到期价值 - M

该应用程序根据以下公式计算价格(P):

P = C * ( (1 - (1 + i)^-N) / i ) + M * (1 + i)^-N

目标

债券定价工具体现了 MATLAB® Production Server™ 的以下特点:

  • 部署一个具有固定数量输入和一个输出的简单 MATLAB 函数

  • 部署一个带有简单 GUI 前端的 MATLAB 函数用于数据输入

  • 使用 dispose() 释放系统资源

步骤 1:编写 MATLAB 代码

通过编写以下代码实现 MATLAB 中的债券定价工具。将代码命名为 pricecalc.m

示例代码可在 MPS_INSTALL\client\java\examples\BondPricingTool\MATLAB 中找到。

function price = pricecalc(value_at_maturity, coupon_payment,...
                           interest_rate, num_payments)

    C = coupon_payment;
    N = num_payments;
    i = interest_rate;
    M = value_at_maturity;
    
    price = C * ( (1 - (1 + i)^-N) / i ) + M * (1 + i)^-N;

end

步骤 2:使用 Production Server 存档编译器创建可部署存档

要为此示例创建可部署存档:

  1. 从 MATLAB 中,选择“Production Server 存档编译器”。

  2. Exported Functions 字段中,添加 pricecalc.m

    pricecalc.m 位于 MPS_INSTALL\client\java\examples\BondPricingTool\MATLAB

  3. 将存档名称改为 BondTools

  4. 点击打包

生成的可部署存档 BondTools.ctf 位于工程文件夹下的输出文件夹中。

步骤 3:在服务器上共享可部署存档

  1. 如果需要,请从 https://www.mathworks.com/products/compiler/mcr 下载 MATLAB Runtime。有关详细信息,请参阅MATLAB Production Server 支持的 MATLAB Runtime 版本

  2. 使用 mps-new 创建服务器。有关详细信息,请参阅使用命令行创建服务器实例

  3. 如果您尚未这样做,请通过编辑服务器配置文件 main_config 并指定 --mcr-root 的路径来将 MATLAB Runtime 的位置指定到服务器。有关详细信息,请参阅 Server Configuration 属性

  4. 使用命令行启动服务器实例验证服务器状态

  5. BondTools.ctf 文件复制到服务器上的 auto_deploy 文件夹进行托管。

步骤 4:创建 Java 客户端代码

使用本节中的指南,创建兼容的客户端接口并定义 Java® 中的方法以匹配 MATLAB 函数 pricecalc.m,由服务器托管为 BondTools.ctf

还包括独立应用程序典型的附加 Java 文件。您可以在 MPS_INSTALL\client\java\examples\BondPricingTool\Java 中找到示例文件。

此 Java 代码...提供此功能...
BondPricingTool.java运行计算器应用程序。定价函数的变量值在这个类中声明。
BondTools.java定义 pricecalc 方法接口,稍后用于连接服务器调用 pricecalc.m
BondToolsFactory.java创建 BondTools 新实例的工厂
BondToolsStub.java

实现虚拟 pricecalc Java 方法的 Java 类。创建桩件方法是一种允许稍后将计算和处理添加到应用程序的技术。

BondToolsStubFactory.java返回 BondToolsStub 新实例的工厂
RequestSpeedMeter.java显示 GUI 界面并使用 Java Swing 类接受输入
ServerBondToolsFactory.java工厂创建 MWHttpClient 的新实例并创建代理,该代理提供 BondTools 接口的实现并允许访问由服务器托管的 pricecalc.m

在开发 Java 代码时,请注意以下部分中描述的以下基本任务。有关客户端编码基础和最佳实践的更多信息,请参阅Java 客户端编码最佳实践

该文档引用了客户端代码的特定部分。您可以在 MPS_INSTALL\client\java\examples\BondPricingTool\Java 中找到完整的 Java 客户端代码。

声明与您部署的 Java 函数兼容的 MATLAB 方法签名

要使用在 步骤 1:编写 MATLAB 代码 中定义的 MATLAB 函数,请在接口 BondTools.java 中声明相应的 Java 方法签名:

interface BondTools {
    double pricecalc (double faceValue,
                      double couponYield,
                      double interestRate,
                      double numPayments)
            throws IOException, MATLABException;
}

该接口创建原始 double 类型的数组,对应于 Double 中的 MATLAB 原始类型(MATLAB 中的 pricecalc.m,除非明确声明)。MATLAB 函数和 Java 接口中的输入参量之间存在一对一映射。接口指定兼容类型 double。MATLAB 和 Java 签名之间的兼容性证明了 Java 客户端编码最佳实践 中列出的准则。

实例化 MWClient、创建代理并指定可部署存档

ServerBondToolsFactory 类中,执行典型的 MATLAB Production Server 客户端设置:

  1. 使用 MWClient 的实例来实例化 MWHttpClient

    ...
        private final MWClient client = new MWHttpClient();
    
    

  2. 在新的客户端实例上调用 createProxy。指定服务器在 9910 文件夹中托管的端口号(BondTools)和可部署存档名称(auto_deploy):

    ...
    public BondTools newInstance () throws Exception
    {
      mpsUrl = new URL("http://user1.dhcp.mathworks.com:9910/BondTools");
      return client.createProxy(mpsUrl, BondTools.class);
    }
    ...

持续使用 dispose() 释放系统资源

该应用程序利用工厂模式来封装几种类型对象的创建。

任何时候创建对象(并因此分配资源),请确保使用 dispose() 释放这些资源。

例如,请注意,在 ServerBondToolsFactory.java 中,当不再需要 实例化 MWClient、创建代理并指定可部署存档 中创建的 MWHttpClient 实例时,您会将其销毁。

此外,请注意 dispose() 调用清理 BondToolsStubFactory.javaBondTools.java 中的工厂。

步骤 5:构建客户端代码并运行示例

在尝试构建和运行客户端代码之前,请确保已完成以下操作:

  • mps_client.jar ($MPS_INSTALL\client\java) 添加到您的 Java CLASSPATH 和 Build Path。

  • 将可部署存档复制到服务器的 auto_deploy 文件夹。

  • 修改了服务器的 main_config 文件以指向 MATLAB Runtime 的安装位置。

  • 使用命令行启动服务器实例验证服务器状态

运行计算器应用程序时,您应该看到以下输出:

Bond Pricing Tool with these outputs. Face Value: 1000, Coupon Yield: 50, Interest Rate: 6%, Number of Payments: 30, Bond Price: 862.35.