{ "cells": [ { "cell_type": "markdown", "id": "10e2ddbc-c3e3-4027-96b9-b963a200d5ed", "metadata": {}, "source": [ "# 08-Finance Tutorial-Pricing Fixed-Income Assets\n", "### Modified for Quantum Rings toolkit for Qiskit 2.x" ] }, { "cell_type": "code", "execution_count": 1, "id": "d4baa06a-9f3b-42d4-b19d-59624ddcda4c", "metadata": {}, "outputs": [], "source": [ "# This tutorial is from:\n", "# https://qiskit-community.github.io/qiskit-finance/tutorials/08_fixed_income_pricing.html\n", "\n", "# Modified for use with Quantum Rings toolkit" ] }, { "cell_type": "code", "execution_count": 2, "id": "a5f6951c-7259-4b33-a829-d3d95874850f", "metadata": {}, "outputs": [], "source": [ "#\n", "# Setup your account\n", "# You can also save your account locally using the class method QrRuntimeService.save_account(...) and\n", "# invoke the QrRuntimeService class constructor without any arguments.\n", "#\n", "\n", "import os\n", "my_token = os.environ[\"QR_TOKEN\"]\n", "my_name = os.environ[\"QR_ACCOUNT\"]\n", "\n", "#\n", "# Set the backend of your choice, depending upon the task and your hardware configuration.\n", "# See SDK documentation for additional help.\n", "#\n", "\n", "my_backend = \"scarlet_quantum_rings\"" ] }, { "cell_type": "code", "execution_count": 3, "id": "532a19da-e767-4c2f-88e8-166a828af621", "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", "%matplotlib inline\n", "import numpy as np\n", "from qiskit import QuantumCircuit\n", "from qiskit_algorithms import IterativeAmplitudeEstimation, EstimationProblem\n", "#from qiskit_aer.primitives import Sampler\n", "from qiskit_finance.circuit.library import NormalDistribution\n", "\n", "from quantumrings.toolkit.qiskit import QrRuntimeService\n", "from quantumrings.toolkit.qiskit import QrSamplerV2 as Sampler\n", "\n", "qr_services = QrRuntimeService(name = my_name, token = my_token)\n", "qr_backend = qr_services.backend(name = my_backend, precision = \"single\")" ] }, { "cell_type": "code", "execution_count": 4, "id": "1ba55071-37b6-46f9-9d00-6ea50654b9f0", "metadata": {}, "outputs": [], "source": [ "# can be used in case a principal component analysis has been done to derive the uncertainty model, ignored in this example.\n", "A = np.eye(2)\n", "b = np.zeros(2)\n", "\n", "# specify the number of qubits that are used to represent the different dimenions of the uncertainty model\n", "num_qubits = [2, 2]\n", "\n", "# specify the lower and upper bounds for the different dimension\n", "low = [0, 0]\n", "high = [0.12, 0.24]\n", "mu = [0.12, 0.24]\n", "sigma = 0.01 * np.eye(2)\n", "\n", "# construct corresponding distribution\n", "bounds = list(zip(low, high))\n", "u = NormalDistribution(num_qubits, mu, sigma, bounds)" ] }, { "cell_type": "code", "execution_count": 5, "id": "c663a549-2560-4e76-825b-1b1fc7be0256", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plot contour of probability density function\n", "x = np.linspace(low[0], high[0], 2 ** num_qubits[0])\n", "y = np.linspace(low[1], high[1], 2 ** num_qubits[1])\n", "z = u.probabilities.reshape(2 ** num_qubits[0], 2 ** num_qubits[1])\n", "plt.contourf(x, y, z)\n", "plt.xticks(x, size=15)\n", "plt.yticks(y, size=15)\n", "plt.grid()\n", "plt.xlabel(\"$r_1$ (%)\", size=15)\n", "plt.ylabel(\"$r_2$ (%)\", size=15)\n", "plt.colorbar()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 6, "id": "ef06b99a-0dfc-4800-b725-93e708a1be13", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# specify cash flow\n", "cf = [1.0, 2.0]\n", "periods = range(1, len(cf) + 1)\n", "\n", "# plot cash flow\n", "plt.bar(periods, cf)\n", "plt.xticks(periods, size=15)\n", "plt.yticks(size=15)\n", "plt.grid()\n", "plt.xlabel(\"periods\", size=15)\n", "plt.ylabel(\"cashflow ($)\", size=15)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 7, "id": "2e20b419-8ddd-45cf-8165-097c8f656758", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Exact value: \t2.1942\n" ] } ], "source": [ "# estimate real value\n", "cnt = 0\n", "exact_value = 0.0\n", "for x1 in np.linspace(low[0], high[0], pow(2, num_qubits[0])):\n", " for x2 in np.linspace(low[1], high[1], pow(2, num_qubits[1])):\n", " prob = u.probabilities[cnt]\n", " for t in range(len(cf)):\n", " # evaluate linear approximation of real value w.r.t. interest rates\n", " exact_value += prob * (\n", " cf[t] / pow(1 + b[t], t + 1)\n", " - (t + 1) * cf[t] * np.dot(A[:, t], np.asarray([x1, x2])) / pow(1 + b[t], t + 2)\n", " )\n", " cnt += 1\n", "print(\"Exact value: \\t%.4f\" % exact_value)" ] }, { "cell_type": "code", "execution_count": 8, "id": "be15c2ef-933a-4a33-ad1f-62bdcf8203bd", "metadata": {}, "outputs": [], "source": [ "# specify approximation factor\n", "c_approx = 0.125\n", "\n", "# create fixed income pricing application\n", "from qiskit_finance.applications.estimation import FixedIncomePricing\n", "\n", "fixed_income = FixedIncomePricing(\n", " num_qubits=num_qubits,\n", " pca_matrix=A,\n", " initial_interests=b,\n", " cash_flow=cf,\n", " rescaling_factor=c_approx,\n", " bounds=bounds,\n", " uncertainty_model=u,\n", ")" ] }, { "cell_type": "code", "execution_count": 9, "id": "b46d5282-0d42-4e83-aaa2-e07701734abe", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
     ┌────┐\n",
       "q_0: ┤0   ├\n",
       "     │    │\n",
       "q_1: ┤1   ├\n",
       "     │    │\n",
       "q_2: ┤2 F ├\n",
       "     │    │\n",
       "q_3: ┤3   ├\n",
       "     │    │\n",
       "q_4: ┤4   ├\n",
       "     └────┘
" ], "text/plain": [ " ┌────┐\n", "q_0: ┤0 ├\n", " │ │\n", "q_1: ┤1 ├\n", " │ │\n", "q_2: ┤2 F ├\n", " │ │\n", "q_3: ┤3 ├\n", " │ │\n", "q_4: ┤4 ├\n", " └────┘" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fixed_income._objective.draw()" ] }, { "cell_type": "code", "execution_count": 10, "id": "6a63f5b3-5cd9-4dc8-8620-d3584df42b33", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
     ┌───────┐┌────┐\n",
       "q_0: ┤0      ├┤0   ├\n",
       "     │       ││    │\n",
       "q_1: ┤1      ├┤1   ├\n",
       "     │  P(X) ││    │\n",
       "q_2: ┤2      ├┤2 F ├\n",
       "     │       ││    │\n",
       "q_3: ┤3      ├┤3   ├\n",
       "     └───────┘│    │\n",
       "q_4: ─────────┤4   ├\n",
       "              └────┘
" ], "text/plain": [ " ┌───────┐┌────┐\n", "q_0: ┤0 ├┤0 ├\n", " │ ││ │\n", "q_1: ┤1 ├┤1 ├\n", " │ P(X) ││ │\n", "q_2: ┤2 ├┤2 F ├\n", " │ ││ │\n", "q_3: ┤3 ├┤3 ├\n", " └───────┘│ │\n", "q_4: ─────────┤4 ├\n", " └────┘" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fixed_income_circ = QuantumCircuit(fixed_income._objective.num_qubits)\n", "\n", "# load probability distribution\n", "fixed_income_circ.append(u, range(u.num_qubits))\n", "\n", "# apply function\n", "fixed_income_circ.append(fixed_income._objective, range(fixed_income._objective.num_qubits))\n", "\n", "fixed_income_circ.draw()" ] }, { "cell_type": "code", "execution_count": 11, "id": "5b3e56b1-a23f-4725-afdd-d3072a0d3f21", "metadata": {}, "outputs": [], "source": [ "# set target precision and confidence level\n", "epsilon = 0.01\n", "alpha = 0.05\n", "\n", "# construct amplitude estimation\n", "problem = fixed_income.to_estimation_problem()\n", "\n", "ae = IterativeAmplitudeEstimation(\n", " epsilon_target=epsilon, alpha=alpha, sampler=Sampler(backend = qr_backend, run_options={\"performance\":\"HighestEfficiency\", \"shots\": 100, \"seed\": 75})\n", ")" ] }, { "cell_type": "code", "execution_count": 12, "id": "934ffcb1-874d-4dc9-8d7a-1d3f87578333", "metadata": {}, "outputs": [], "source": [ "result = ae.estimate(problem)" ] }, { "cell_type": "code", "execution_count": 13, "id": "c7206450-2fc8-4936-b13a-0742d20cc65b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Exact value: \t2.1942\n", "Estimated value: \t2.3437\n", "Confidence interval:\t[2.3101, 2.3772]\n" ] } ], "source": [ "conf_int = np.array(result.confidence_interval_processed)\n", "print(\"Exact value: \\t%.4f\" % exact_value)\n", "print(\"Estimated value: \\t%.4f\" % (fixed_income.interpret(result)))\n", "print(\"Confidence interval:\\t[%.4f, %.4f]\" % tuple(conf_int))" ] }, { "cell_type": "code", "execution_count": 14, "id": "1421a427-1a93-443a-b214-caf59fca0e65", "metadata": {}, "outputs": [], "source": [ "# Example output:\n", "# Exact value: \t2.1942\n", "# Estimated value: \t2.3414\n", "# Confidence interval:\t[2.2963, 2.3865]" ] }, { "cell_type": "code", "execution_count": 15, "id": "14b8a4d9-ba8c-4d19-9d22-5abef16e901a", "metadata": {}, "outputs": [ { "data": { "text/html": [ "

Version Information

SoftwareVersion
qiskit2.2.1
qiskit_ibm_runtime0.40.1
qiskit_optimization0.7.0
qiskit_finance0.4.1
qiskit_aer0.17.1
qiskit_algorithms0.4.0
System information
Python version3.12.9
OSWindows
Thu Oct 16 11:24:46 2025 Mountain Daylight Time
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Quantum Rings Version Information

SoftwareVersion
QuantumRingsLib0.11.0
quantumrings-toolkit-qiskit0.1.10
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

This code is a part of a Qiskit project

© Copyright IBM 2017, 2025.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.

Modifications Copyright Quantum Rings Inc, 2025
Modified from the originals
Added support for Quantum Rings QrEstimatorV2 class.

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import tutorial_magics\n", "\n", "%qiskit_version_table\n", "%quantumrings_version_table\n", "%qiskit_copyright" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.9" } }, "nbformat": 4, "nbformat_minor": 5 }