Skip to content

Commit

Permalink
Interest Rate Swap Optimization added
Browse files Browse the repository at this point in the history
  • Loading branch information
ashis2004 committed Jul 21, 2024
1 parent c0d1084 commit 497faee
Show file tree
Hide file tree
Showing 3 changed files with 1,771 additions and 0 deletions.
285 changes: 285 additions & 0 deletions Interest Rate Swap Optimization/Interest_Rate_Swap_Optimization.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,285 @@
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"source": [
"Interest Rate Swap Optimization"
],
"metadata": {
"id": "lzMpV_sSg11t"
}
},
{
"cell_type": "markdown",
"source": [
"Dataset loading"
],
"metadata": {
"id": "KEcehVsEhkM8"
}
},
{
"cell_type": "code",
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"\n",
"# Load data\n",
"data_ir_swap = pd.read_csv('interest_rate_swap_data.csv')\n",
"print(data_ir_swap.head())\n",
"\n",
"# Convert to NumPy array (excluding the 'Date' column)\n",
"data_ir_swap = data_ir_swap.drop(columns=['Date']).to_numpy()\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "xZ-zMi5Cff_u",
"outputId": "3d867598-0b62-44ca-91bf-04d9b7b9ab54"
},
"execution_count": 3,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
" Date Fixed_Rate Floating_Rate\n",
"0 2020-01-01 2.498160 2.779315\n",
"1 2020-01-02 4.802857 0.873076\n",
"2 2020-01-03 3.927976 2.802459\n",
"3 2020-01-04 3.394634 3.997948\n",
"4 2020-01-05 1.624075 0.668742\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"perform fitness function"
],
"metadata": {
"id": "5ndezum0hoyc"
}
},
{
"cell_type": "markdown",
"source": [],
"metadata": {
"id": "LmBcL_8EhnrD"
}
},
{
"cell_type": "code",
"source": [
"def fitness_function(individual, data):\n",
" fixed_rates = data[:, 0]\n",
" floating_rates = data[:, 1]\n",
"\n",
" portfolio_value = 100000 # Starting capital\n",
"\n",
" for i in range(len(data)):\n",
" # Strategy: Receive fixed, pay floating\n",
" fixed_income = fixed_rates[i] * individual[0] # Fixed rate income\n",
" floating_payment = floating_rates[i] * individual[1] # Floating rate payment\n",
"\n",
" # Net income\n",
" net_income = fixed_income - floating_payment\n",
" portfolio_value *= (1 + net_income)\n",
"\n",
" return portfolio_value\n"
],
"metadata": {
"id": "xOc-ArYyfh5R"
},
"execution_count": 4,
"outputs": []
},
{
"cell_type": "code",
"source": [
"def initialize_population(pop_size):\n",
" population = []\n",
" for _ in range(pop_size):\n",
" fixed_rate_allocation = np.random.uniform(0, 1) # Random allocation for fixed rate\n",
" floating_rate_allocation = np.random.uniform(0, 1) # Random allocation for floating rate\n",
" individual = [fixed_rate_allocation, floating_rate_allocation]\n",
" population.append(individual)\n",
" return population\n"
],
"metadata": {
"id": "nWBHVN-2fjkA"
},
"execution_count": 5,
"outputs": []
},
{
"cell_type": "code",
"source": [
"def selection(population, fitness_scores, num_parents):\n",
" parents = [population[idx] for idx in np.argsort(fitness_scores)[-num_parents:]]\n",
" return parents\n"
],
"metadata": {
"id": "hKKCUCO9flFS"
},
"execution_count": 6,
"outputs": []
},
{
"cell_type": "code",
"source": [
"def crossover(parents, offspring_size):\n",
" offspring = []\n",
" for _ in range(offspring_size):\n",
" parent1 = parents[np.random.randint(len(parents))]\n",
" parent2 = parents[np.random.randint(len(parents))]\n",
" crossover_point = np.random.randint(1, len(parent1))\n",
" child = parent1[:crossover_point] + parent2[crossover_point:]\n",
" offspring.append(child)\n",
" return offspring\n"
],
"metadata": {
"id": "xyK-mDk-fmyZ"
},
"execution_count": 7,
"outputs": []
},
{
"cell_type": "code",
"source": [
"def mutation(offspring, mutation_rate):\n",
" for individual in offspring:\n",
" if np.random.rand() < mutation_rate:\n",
" mutation_point = np.random.randint(len(individual))\n",
" individual[mutation_point] = np.random.uniform(0, 1) # Mutate with new random allocation\n",
" return offspring\n"
],
"metadata": {
"id": "vXkVecAZfoP5"
},
"execution_count": 8,
"outputs": []
},
{
"cell_type": "code",
"source": [
"def genetic_algorithm(data, num_generations, pop_size, num_parents, mutation_rate):\n",
" population = initialize_population(pop_size)\n",
"\n",
" for generation in range(num_generations):\n",
" fitness_scores = [fitness_function(individual, data) for individual in population]\n",
" parents = selection(population, fitness_scores, num_parents)\n",
" offspring_size = pop_size - len(parents)\n",
" offspring = crossover(parents, offspring_size)\n",
" offspring = mutation(offspring, mutation_rate)\n",
" population = parents + offspring\n",
"\n",
" best_fitness = np.max(fitness_scores)\n",
" print(f\"Generation {generation}: Best Fitness = {best_fitness}\")\n",
"\n",
" best_individual = population[np.argmax(fitness_scores)]\n",
" return best_individual\n",
"\n",
"# Run the genetic algorithm\n",
"num_generations = 50\n",
"pop_size = 100\n",
"num_parents = 20\n",
"mutation_rate = 0.01\n",
"\n",
"best_params = genetic_algorithm(data_ir_swap, num_generations, pop_size, num_parents, mutation_rate)\n",
"print(f\"Best Strategy: Fixed Rate Allocation = {best_params[0]}, Floating Rate Allocation = {best_params[1]}\")\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "4TXuhoYafq-K",
"outputId": "ee84f105-ca64-44d4-c12a-f522317f5640"
},
"execution_count": 9,
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"<ipython-input-4-140d612c1ab4>:14: RuntimeWarning: overflow encountered in scalar multiply\n",
" portfolio_value *= (1 + net_income)\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Generation 0: Best Fitness = inf\n",
"Generation 1: Best Fitness = inf\n",
"Generation 2: Best Fitness = inf\n",
"Generation 3: Best Fitness = inf\n",
"Generation 4: Best Fitness = inf\n",
"Generation 5: Best Fitness = inf\n",
"Generation 6: Best Fitness = inf\n",
"Generation 7: Best Fitness = inf\n",
"Generation 8: Best Fitness = inf\n",
"Generation 9: Best Fitness = inf\n",
"Generation 10: Best Fitness = inf\n",
"Generation 11: Best Fitness = inf\n",
"Generation 12: Best Fitness = inf\n",
"Generation 13: Best Fitness = inf\n",
"Generation 14: Best Fitness = inf\n",
"Generation 15: Best Fitness = inf\n",
"Generation 16: Best Fitness = inf\n",
"Generation 17: Best Fitness = inf\n",
"Generation 18: Best Fitness = inf\n",
"Generation 19: Best Fitness = inf\n",
"Generation 20: Best Fitness = inf\n",
"Generation 21: Best Fitness = inf\n",
"Generation 22: Best Fitness = inf\n",
"Generation 23: Best Fitness = inf\n",
"Generation 24: Best Fitness = inf\n",
"Generation 25: Best Fitness = inf\n",
"Generation 26: Best Fitness = inf\n",
"Generation 27: Best Fitness = inf\n",
"Generation 28: Best Fitness = inf\n",
"Generation 29: Best Fitness = inf\n",
"Generation 30: Best Fitness = inf\n",
"Generation 31: Best Fitness = inf\n",
"Generation 32: Best Fitness = inf\n",
"Generation 33: Best Fitness = inf\n",
"Generation 34: Best Fitness = inf\n",
"Generation 35: Best Fitness = inf\n",
"Generation 36: Best Fitness = inf\n",
"Generation 37: Best Fitness = inf\n",
"Generation 38: Best Fitness = inf\n",
"Generation 39: Best Fitness = inf\n",
"Generation 40: Best Fitness = inf\n",
"Generation 41: Best Fitness = inf\n",
"Generation 42: Best Fitness = inf\n",
"Generation 43: Best Fitness = inf\n",
"Generation 44: Best Fitness = inf\n",
"Generation 45: Best Fitness = inf\n",
"Generation 46: Best Fitness = inf\n",
"Generation 47: Best Fitness = inf\n",
"Generation 48: Best Fitness = inf\n",
"Generation 49: Best Fitness = inf\n",
"Best Strategy: Fixed Rate Allocation = 0.6854438832219015, Floating Rate Allocation = 0.02519341395922936\n"
]
}
]
}
]
}
Loading

0 comments on commit 497faee

Please sign in to comment.