JAVA CODE JAVA CODE: BINOMIAL TREES OPTION PRICING BINOMIALTREE CLASS PAGE 1

Similar documents
Java Programming Summer 2008 LAB. Thursday 8/21/2008

* To change this license header, choose License Headers in Project Properties.

* To change this license header, choose License Headers in Project Properties.

Answer on question #61311, Programming & Computer Science / Java

Appendix I: Software Coding

/** Creates new form NewJFrame */ public NewJFrame() { initcomponents(); initblogsearch(); //initializes Index List box }

Travel Agency. Khateeb Engineering Classes. Mini Project. Khateeb Engineering Classes: / Technology to be used

jlabel14 = new javax.swing.jlabel(); jlabel15 = new javax.swing.jlabel(); jlabel16 = new javax.swing.jlabel(); jlabel17 = new javax.swing.

CHAPTER 8 INFERENCE. The concept of Inference would be explained in the following chapter, as the CTBN

I.1 Introduction Matisse GUI designer I.2 GroupLayout Basics Sequential and Parallel Arrangements sequential horizontal orientation

Role-Coll Role Based Collaboration Software

DAFTAR LAMPIRAN. Source Code Java Aplikasi Keyword to Image Renamer Split

Hanley s Survival Guide for Visual Applications with NetBeans 2.0 Last Updated: 5/20/2015 TABLE OF CONTENTS

privateint m, n, smithitemcount, raitaitemcount;

Lampiran A. SOURCE CODE PROGRAM

INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE CÓMPUTO

Goals. Lecture 7 More GUI programming. The application. The application D&D 12. CompSci 230: Semester JFrame subclass: ListOWords

CSCI 201L Midterm Written Summer % of course grade

We have several alternatives now, which we need to address. Here is a list of them: 1. How to get HTML interpreted correctly.

/* * MoraDrill.java * Version last updated 6 April 2010 * Written by John K. Estell * Created on November 30, 2008, 10:22 PM */

Project Helpine Report BANQUET HALL BOOKING

CSCI 201L Midterm Written SOLUTION Summer % of course grade

COMP16121 Sample Code Lecture 1

Example: Building a Java GUI

!"# $ %&# %####' #&() % # # # #&* # ## +, # -

Example: Building a Java GUI

Proctors are unable to respond to queries about the interpretation of exam questions. Do your best to answer exam questions as written.

SampleApp.java. Page 1

Proctors are unable to respond to queries about the interpretation of exam questions. Do your best to answer exam questions as written.

Proctors are unable to respond to queries about the interpretation of exam questions. Do your best to answer exam questions as written.

The class definition is not a program by itself. It can be used by other programs in order to create objects and use them.

APPENDIX. public void cekroot() { System.out.println("nilai root : "+root.data); }

Proctors are unable to respond to queries about the interpretation of exam questions. Do your best to answer exam questions as written.

AnimatedImage.java. Page 1

17 GUI API: Container 18 Hello world with a GUI 19 GUI API: JLabel 20 GUI API: Container: add() 21 Hello world with a GUI 22 GUI API: JFrame: setdefau

Proctors are unable to respond to queries about the interpretation of exam questions. Do your best to answer exam questions as written.

Systems Programming. Bachelor in Telecommunication Technology Engineering Bachelor in Communication System Engineering Carlos III University of Madrid

TECHNICAL DOCUMENTATION

Page 1 of 16. Proctors are unable to respond to queries about the interpretation of exam questions. Do your best to answer exam questions as written.

Multiple Choice Questions: Identify the choice that best completes the statement or answers the question. (15 marks)

Graphical User Interface

Proctors are unable to respond to queries about the interpretation of exam questions. Do your best to answer exam questions as written.

Overview. Lecture 7: Inheritance and GUIs. Inheritance. Example 9/30/2008

Swing - JTextField. Adding a text field to the main window (with tooltips and all)

Client-side GUI. A simple Swing-gui for searching for proudcts

CSIS 10A Assignment 7 SOLUTIONS

PART 23. Java GUI Advanced JList Component. more items.

AppBisect > PrBisect > class Functie. AppBisect > PrBisect > class Punct. public class Functie { double x(double t) { return t;

This is the java code for generating coördinates of molecules numerically using the CDNT framework with real-time input and diagramatic output.

Handout 14 Graphical User Interface (GUI) with Swing, Event Handling

// autor igre Ivan Programerska sekcija package mine;

CS 112 Introduction to Computing II. Wayne Snyder Computer Science Department Boston University

Building a GUI in Java with Swing. CITS1001 extension notes Rachel Cardell-Oliver

COSC 123 Computer Creativity. Graphics and Events. Dr. Ramon Lawrence University of British Columbia Okanagan

Constructing an Index Fund Using Interior Point Primal Dual Method

Proctors are unable to respond to queries about the interpretation of exam questions. Do your best to answer exam questions as written.

Proctors are unable to respond to queries about the interpretation of exam questions. Do your best to answer exam questions as written.

Proctors are unable to respond to queries about the interpretation of exam questions. Do your best to answer exam questions as written.

LAMPIRAN PERANGKAT LUNAK

CMP 326 Final Spring There is a blank page at the end of the exam if you need more room to answer a question.

CONTENTS. Chapter 1 Getting Started with Java SE 6 1. Chapter 2 Exploring Variables, Data Types, Operators and Arrays 13

CSCI 201L Midterm Written Fall % of course grade

Graphical User Interface (GUI) components in Java Applets. With Abstract Window Toolkit (AWT) we can build an applet that has the basic GUI

CSCI 201L Midterm Written SOLUTION Fall % of course grade

GUI (Graphic User Interface) Programming. Part 2 (Chapter 8) Chapter Goals. Events, Event Sources, and Event Listeners. Listeners

HomeWork 3. In this homework, an ArchJava application that allows one to query one s scores in a networked environment is presented.

グラフを表すデータ構造 JAVA での実装

Java Graphical User Interfaces AWT (Abstract Window Toolkit) & Swing

Graphical User Interfaces in Java - SWING

JRadioButton account_type_radio_button2 = new JRadioButton("Current"); ButtonGroup account_type_button_group = new ButtonGroup();

Our first program is a simple calculator, which will carry out the arithmetic operations of adding, subtracting, multiplying and dividing numbers.

Swing - JLabel. Adding a text (and HTML) labels to a GUI

MIT AITI Swing Event Model Lecture 17

/* Write a Program implementing GUI based Calculator using Swing */

Part I: Learn Common Graphics Components

PART1: Choose the correct answer and write it on the answer sheet:

Java Swing Introduction

Dr. Hikmat A. M. AbdelJaber

Control Statements: Part Pearson Education, Inc. All rights reserved.

Object-Oriented Software Engineering Re-exam, 2012 (Also Object-Oriented Analysis, Design and Programming, Re-exam, 2012)

Page 1 of 16. Proctors are unable to respond to queries about the interpretation of exam questions. Do your best to answer exam questions as written.

Section Basic graphics

Swing Programming Example Number 2

PART 22. Java GUI Library SWT GUI Library SWING GUI Library Swing First Program

Proctors are unable to respond to queries about the interpretation of exam questions. Do your best to answer exam questions as written.

COMP 1006/1406 Assignment 1 Carleton Foodorama (Part 1) Due: Friday, July 14 th 2006, before 11h55 pm

Based on slides by Prof. Burton Ma

Week Chapter Assignment SD Technology Standards. 1,2, Review Knowledge Check JP3.1. Program 5.1. Program 5.1. Program 5.2. Program 5.2. Program 5.

AP CS Unit 11: Graphics and Events

Contents Chapter 1 Introduction to Programming and the Java Language

CMP 326 Midterm Fall 2015

GUI Applications. Let s start with a simple Swing application in Java, and then we will look at the same application in Jython. See Listing 16-1.

This document shows the whole program for the implementation of the Withdraw operation specication.

Agenda. Container and Component

Datenbank-Praktikum. Universität zu Lübeck Sommersemester 2006 Lecture: Swing. Ho Ngoc Duc 1

package As7BattleShip;

Proctors are unable to respond to queries about the interpretation of exam questions. Do your best to answer exam questions as written.

Proctors are unable to respond to queries about the interpretation of exam questions. Do your best to answer exam questions as written.

The JFrame Class Frame Windows GRAPHICAL USER INTERFACES. Five steps to displaying a frame: 1) Construct an object of the JFrame class

Chapter 12 GUI Basics

Transcription:

CODE JAVA CODE BINOMIAL TREES OPTION PRICING JAVA CODE: BINOMIAL TREES OPTION PRICING BINOMIALTREE CLASS /** * * @author Ioannis Svigkos 2008 */ // This class corresponds to binomial tree option pricing. // Methods that calculate equity movement first are provided. // Then, methods that calculate option price in each note are // presented. Note that there is also implementation about // American options, however they need further refinement and testing import java.text.decimalformat; public class BinomialTree { // Private field members private DecimalFormat _decimalformat; private double[][] _equitymovement; // stores values of equity for each period (upper & lower) private double[][] _optionpricemovement; // stores price of call option for each period (upper & lower) private double[][] _americanputoptionpricemovement; // stores price of put option for each period private double _assetprice; private double _strikeprice; private double _riskfreerate; private double _sigma; private double _timetomaturity; private double _iteration; PAGE 1

private double _upperfactor; private double _lowerfactor; private double _probability; private double _deltat; // Constructor public BinomialTree ( double _assetprice, double _strikeprice, double _riskfreerate, double _sigma, double _timetomaturity, double _iteration) { // Set decimal Format _decimalformat = new DecimalFormat("#.##"); // Initialise private fields this._assetprice = _assetprice; this._strikeprice = _strikeprice; this._riskfreerate = _riskfreerate; this._sigma = _sigma; this._timetomaturity = _timetomaturity; this._iteration = _iteration; // Initilialise further parameters this._deltat = calculatedeltat(); this._upperfactor = calculateupperfactor(); this._lowerfactor = calculatelowerfactor(); this._probability = calculateprobability(); // calculate delta time public double calculatedeltat() { return _timetomaturity/_iteration; //calculate upper factor based on parameters given public double calculateupperfactor() { return Math.pow(Math.E, _sigma * Math.sqrt(_deltaT)); //calculate lower factor based on parameters given public double calculatelowerfactor() { return Math.pow(Math.E, (-_sigma) * Math.sqrt(_deltaT)); // calculate probability based on parameters given PAGE 2

public double calculateprobability() { return ( Math.pow(Math.E, _riskfreerate * _deltat) - _lowerfactor) / (_upperfactor - _lowerfactor); // calculate equity prices on each node public void calculateequitymovement() { // Set up matrix dimentions int _columns = ((int)_iteration) + 1; int _rows = (((int)_iteration) * 2) + 1; // Set up Matrix to hold price movements _equitymovement = new double[_rows][_columns]; // Prepare pointers for calculations int _pointer = (int)_iteration; int _pointerupper = 0; int _pointerlower = 0; int _columnpointer = 0; double _value = _assetprice; // Initialise upper pointer with row number _pointerupper = _pointer; while (true) { for (int i= _columnpointer; i < _columns; i++) { _equitymovement[_pointerupper][i] = Double.valueOf(_decimalFormat.format(_value)); i++; _pointerupper--; _columnpointer++; _value = Math.pow(_upperFactor, _columnpointer)*_assetprice; if (_pointerupper < 0) break; _columnpointer = 1; _pointerlower = _pointer + 1; _value = Math.pow(_lowerFactor, _columnpointer)*_assetprice; while (true) { PAGE 3

for (int i= _columnpointer; i < _columns; i++) { _equitymovement[_pointerlower][i] = Double.valueOf(_decimalFormat.format(_value)); i++; if (_pointerlower == _rows) break; _pointerlower++; _columnpointer++; _value = Math.pow(_lowerFactor, _columnpointer)*_assetprice; //priceeuropeanputoption(_equitymovement); // new BinomialTreeFrame(castArray(_equityMovement),(int)_iteration); //new BinomialTreeFrame(castArray(priceEuropeanPutOption(_strikePrice, _equitymovement)),(int) _iteration); // price European put option public double[][] priceeuropeanputoption() { calculateequitymovement(); int _rows = _equitymovement.length; int _columns = _equitymovement[1].length; _optionpricemovement = new double[_rows][_columns]; // At last column values are for (int i=0; i<_rows;i++) { if (_equitymovement[i][_columns-1]!= 0) { _optionpricemovement[i][_columns-1] = Math.max(_strikePrice-_equityMovement[i][_columns-1], 0); int pointer = _columns-2; while(true) { for (int i=0; i< _rows;i++) { if (_equitymovement[i][pointer]!= 0) { // get upper lower of next row double uppernext = _optionpricemovement[i-1][pointer+1]; double lowernext = _optionpricemovement[i+1][pointer+1]; PAGE 4

_optionpricemovement[i][pointer] = Math.pow(Math.E, -(_riskfreerate*_deltat)) *((_probability*uppernext)+((1- _probability)*lowernext)); if (pointer ==0) break; pointer--; //new BinomialTreeFrame(castArray(_optionPriceMovement), (int)_iteration); return _optionpricemovement; // return value located on first node (price of option) public double geteuropeanputoptionrootprice() { for (int i=0; i<_optionpricemovement.length; i++) { if (_optionpricemovement[i][0]!= 0) { return _optionpricemovement[i][0]; return 0; // calculate price of European Call Option public double[][] priceeuropeancalloption() { calculateequitymovement(); int _rows = _equitymovement.length; int _columns = _equitymovement[1].length; _optionpricemovement = new double[_rows][_columns]; // At last column values are for (int i=0; i<_rows;i++) { if (_equitymovement[i][_columns-1]!= 0) { _optionpricemovement[i][_columns-1] = Math.max(_equityMovement[i][_columns-1]-_strikePrice, 0); int pointer = _columns-2; while(true) { PAGE 5

for (int i=0; i< _rows;i++) { if (_equitymovement[i][pointer]!= 0) { // get upper lower of next row double uppernext = _optionpricemovement[i-1][pointer+1]; double lowernext = _optionpricemovement[i+1][pointer+1]; _optionpricemovement[i][pointer] = Math.pow(Math.E, -(_riskfreerate*_deltat)) *((_probability*uppernext)+((1- _probability)*lowernext)); if (pointer ==0) break; pointer--; //new BinomialTreeFrame(castArray(_optionPriceMovement), (int)_iteration); return _optionpricemovement; public BinomialTreeFrame getequitypricemovementpanel() { return new BinomialTreeFrame(castArray(_equityMovement), (int) _iteration); // return price held in first node (price of call option) public double geteuropeancalloptionrootprice() { for (int i=0; i<_optionpricemovement.length; i++) { if (_optionpricemovement[i][0]!= 0) { return _optionpricemovement[i][0]; return 0; // helper method that returns the number of rows // of a two dimentional array. private int getrownumber(double[][] _array) { return _array.length; // helper method that returns the number of columns // of a two dimentional array. private int getcolumnnumber(double[][] _array) { return _array[0].length; PAGE 6

// calculate price of American Option // NEEDS REVISION! public double[][] priceamericanputoption() { // Generate EquityPriceMovement calculateequitymovement(); // Generate EuropeanPutOptionMatrix double[][] _europeanputoptionmovement = priceeuropeanputoption(); int _rows = getrownumber(_europeanputoptionmovement); int _columns = getcolumnnumber(_europeanputoptionmovement); _americanputoptionpricemovement = new double[_rows][_columns]; // Put last two column of europeanoptionprices in new array for (int i=0; i < _rows; i++) { for (int j=0; j < _columns; j++) { _americanputoptionpricemovement[i][j] = _europeanputoptionmovement[i][j]; double _payoff = 0; double _optionprice = 0; boolean flag = false; int pointer =0; double _value = 0; // NEEDS IMPRVEMENT _americanputoptionpricemovement[3][0]=0; for (int j=_columns-2; j > 0; j--) { for (int i=0; i<_rows-1;i++) { if (_equitymovement[i][j]!= 0) { _payoff = Math.max(_strikePrice - _equitymovement[i][j], 0); _optionprice = _americanputoptionpricemovement[i][j]; if (_payoff > _optionprice) { _americanputoptionpricemovement[i][j] = _payoff; flag = true; else { _americanputoptionpricemovement[i][j] = _optionprice; if (flag) { PAGE 7

for (int k=j-1; k < _rows-2; k++) { _value = Math.pow(Math.E, (-_riskfreerate)*_deltat) *( (_probability*_americanputoptionpricemovement[k][j]) +((1-_probability)*_americanPutOptionPriceMovement[k+2][j])); _americanputoptionpricemovement[k+1][j-1]=_value; flag=false; _payoff = Math.max(_strikePrice - _equitymovement[((_rows-1)/2)+1][1], 0); _optionprice = _americanputoptionpricemovement[((_rows-1)/2)+1][1]; _value = Math.pow(Math.E, (-_riskfreerate)*_deltat) *( (_probability*_americanputoptionpricemovement[2][1]) +((1-_probability)*_americanPutOptionPriceMovement[4][1])); _americanputoptionpricemovement[0][0]=_value; // new BinomialTreeFrame(castArray(_optionPriceMovement), (int)_iteration); new BinomialTreeFrame(castArray(_americanPutOptionPriceMovement), (int)_iteration); return _americanputoptionpricemovement; public void recalculate(int _columns, int _rows, double[][] _array) { int pointer = _columns-2; while(true) { for (int i=0; i< _rows;i++) { if (_equitymovement[i][pointer]!= 0) { // get upper lower of next row double uppernext = _optionpricemovement[i-1][pointer+1]; double lowernext = _optionpricemovement[i+1][pointer+1]; _optionpricemovement[i][pointer] = Math.pow(Math.E, -(_riskfreerate*_deltat)) *((_probability*uppernext)+((1- _probability)*lowernext)); if (pointer ==0) break; pointer--; // Return array as an array of String values // that can be used by a JTable public String[][] castarray(double[][] _array) { int _rows = _array.length; int _columns = _array[1].length; PAGE 8

String[][] _sarray = new String[_rows][_columns]; for (int i=0; i < _rows; i++) { for (int j=0; j < _columns; j++) { if (_array[i][j]!= 0) { _sarray[i][j]=_array[i][j]+""; return _sarray; public static void main(string[] args) { //BinomialTree _binomialtree = new BinomialTree(7, 0.52916, 1.12240, 0.89095, 100, 100); //_binomialtree.toprint(); // _binomialtree.toprint(); //_binomialtree.calculateeuropeanputoption(); // _binomialtree.expand(); // BinomialTreeFrame btf = new BinomialTreeFrame(_binomialTree.obtainDataModel(), 5); // _binomialtree.obtaindatamodel(); BinomialTree t = new BinomialTree(100, 100, 0.04, 0.2, 1, 400); //t.calculateequitymovement(); //t.priceeuropeanputoption(); //t.priceeuropeancalloption(); t.priceeuropeanputoption(); BINOMIALTREEFRAME[EXTENDS JFRAME] /** * * @author Ioannis Svigkos 2008 */ // this class allows end-user to see equity price movements // and option price movements on each node in a tree representation // fashion. However, the applet provided does not consider this // option due to security settings. It is advisable that users should // run the application using java AppletViewr. import javax.swing.jframe; import javax.swing.jtable; PAGE 9

import javax.swing.jscrollpane; import java.awt.borderlayout; import java.text.decimalformat; public class BinomialTreeFrame extends JFrame { private JScrollPane jscrollpane1; private JTable jtable1; private double[] _columnnames; private String[] _scolumnnames; BinomialTreeFrame(String[][] _datamodel, int _iteration){ super("option Pricing: Binomial Tree"); this.setdefaultcloseoperation(jframe.exit_on_close); _columnnames = new double[_iteration + 1]; double temp1 = _iteration; DecimalFormat _dformat = new DecimalFormat("##.####"); for (int i=0; i < _iteration; i++) { if (i==0) { _columnnames[i] = 0; else { double temp = Double.valueOf(_dFormat.format(1/temp1)); _columnnames[i] = (temp) + _columnnames[i-1]; _columnnames[_columnnames.length-1] = 1; _scolumnnames = new String[_columnNames.length]; for (int i=0; i < _scolumnnames.length; i++) { _scolumnnames[i] = "" + _columnnames[i]; jtable1 = new JTable(_dataModel, _scolumnnames ); jtable1.setautoresizemode(jtable.auto_resize_off); jscrollpane1 = new JScrollPane(jTable1); jtable1.setfillsviewportheight(true); //jscrollpane1.sethorizontalscrollbar(new JScrollBar(JScrollBar.HORIZONTAL, 0, 1, 0, 255)); // this.getcontentpane(). add(jscrollpane1, BorderLayout.CENTER); // this.pack(); PAGE 10

this.setvisible(true); BINOMIALTREEAPPLET [GUI IMPLEMENTATION] /** * * @author Ioannis Svigkos 2008 */ import javax.swing.jtable; import java.text.decimalformat; import javax.swing.joptionpane; public class BinomialTree_Applet extends javax.swing.japplet { // Private Field Members private double _assetprice; private double _exerciseprice; private double _volatility; private double _riskfreerate; private double _iteration; private double _timetomaturity; private double _p, _u, _d; private BinomialTree _btree; private JTable jtable1; /** Initializes the applet BinomialTree_Applet */ public void init() { try { java.awt.eventqueue.invokeandwait(new Runnable() { public void run() { initcomponents(); ); catch (Exception ex) { ex.printstacktrace(); /** This method is called from within the init() method to PAGE 11

* initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="generated Code"> private void initcomponents() { jpanel5 = new javax.swing.jpanel(); jtextfield5 = new javax.swing.jtextfield(); jlabel5 = new javax.swing.jlabel(); jtextfield6 = new javax.swing.jtextfield(); jtextfield7 = new javax.swing.jtextfield(); jlabel7 = new javax.swing.jlabel(); jlabel8 = new javax.swing.jlabel(); jtextfield9 = new javax.swing.jtextfield(); jlabel6 = new javax.swing.jlabel(); jtextfield8 = new javax.swing.jtextfield(); jlabel9 = new javax.swing.jlabel(); jbutton1 = new javax.swing.jbutton(); jbutton2 = new javax.swing.jbutton(); jpanel1 = new javax.swing.jpanel(); jtextfield1 = new javax.swing.jtextfield(); jlabel1 = new javax.swing.jlabel(); jtextfield2 = new javax.swing.jtextfield(); jlabel2 = new javax.swing.jlabel(); jlabel3 = new javax.swing.jlabel(); jtextfield3 = new javax.swing.jtextfield(); jlabel4 = new javax.swing.jlabel(); jtextfield4 = new javax.swing.jtextfield(); jpanel4 = new javax.swing.jpanel(); jcombobox1 = new javax.swing.jcombobox(); jradiobutton1 = new javax.swing.jradiobutton(); jradiobutton2 = new javax.swing.jradiobutton(); jlabel11 = new javax.swing.jlabel(); jtextfield11 = new javax.swing.jtextfield(); jlabel10 = new javax.swing.jlabel(); jpanel5.setborder(javax.swing.borderfactory.createtitledborder(javax.swing.borderfactory.createetchedborder(), "OUTPUT", javax.swing.border.titledborder.left, javax.swing.border.titledborder.top, new java.awt.font("arial", 1, 12), new java.awt.color(153, 153, 153))); // NOI18N jtextfield5.setfont(new java.awt.font("arial", 1, 12)); // NOI18N jtextfield5.setforeground(new java.awt.color(102, 102, 102)); jtextfield5.sethorizontalalignment(javax.swing.jtextfield.right); jtextfield5.settooltiptext("[i.e. 100]"); jtextfield5.setborder(javax.swing.borderfactory.createetchedborder()); PAGE 12

jlabel5.setbackground(new java.awt.color(153, 153, 153)); jlabel5.setfont(new java.awt.font("arial", 3, 12)); jlabel5.setforeground(new java.awt.color(102, 102, 102)); jlabel5.sethorizontalalignment(javax.swing.swingconstants.center); jlabel5.settext("_ p _"); jtextfield6.seteditable(false); jtextfield6.setfont(new java.awt.font("arial", 1, 12)); // NOI18N jtextfield6.setforeground(new java.awt.color(102, 102, 102)); jtextfield6.sethorizontalalignment(javax.swing.jtextfield.center); jtextfield6.setborder(javax.swing.borderfactory.createetchedborder()); jtextfield7.seteditable(false); jtextfield7.setfont(new java.awt.font("arial", 1, 12)); // NOI18N jtextfield7.setforeground(new java.awt.color(102, 102, 102)); jtextfield7.sethorizontalalignment(javax.swing.jtextfield.center); jtextfield7.setborder(javax.swing.borderfactory.createetchedborder()); jlabel7.setbackground(new java.awt.color(153, 153, 153)); jlabel7.setfont(new java.awt.font("arial", 3, 12)); // NOI18N jlabel7.setforeground(new java.awt.color(102, 102, 102)); jlabel7.sethorizontalalignment(javax.swing.swingconstants.center); jlabel7.settext("_ u _"); jlabel8.setbackground(new java.awt.color(153, 153, 153)); jlabel8.setfont(new java.awt.font("arial", 3, 12)); jlabel8.setforeground(new java.awt.color(102, 102, 102)); jlabel8.sethorizontalalignment(javax.swing.swingconstants.center); jlabel8.settext("_ d _"); jtextfield9.seteditable(false); jtextfield9.setfont(new java.awt.font("arial", 1, 12)); // NOI18N jtextfield9.setforeground(new java.awt.color(102, 102, 102)); jtextfield9.sethorizontalalignment(javax.swing.jtextfield.center); jtextfield9.setborder(javax.swing.borderfactory.createetchedborder()); jlabel6.setbackground(new java.awt.color(153, 153, 153)); jlabel6.setfont(new java.awt.font("arial", 1, 12)); jlabel6.setforeground(new java.awt.color(102, 102, 102)); jlabel6.sethorizontalalignment(javax.swing.swingconstants.center); jlabel6.settext("itteration"); jtextfield8.seteditable(false); jtextfield8.setfont(new java.awt.font("arial", 1, 12)); // NOI18N jtextfield8.setforeground(new java.awt.color(102, 102, 102)); jtextfield8.sethorizontalalignment(javax.swing.jtextfield.right); jtextfield8.setborder(javax.swing.borderfactory.createetchedborder()); PAGE 13

jlabel9.setbackground(new java.awt.color(153, 153, 153)); jlabel9.setfont(new java.awt.font("arial", 1, 12)); // NOI18N jlabel9.setforeground(new java.awt.color(102, 102, 102)); jlabel9.sethorizontalalignment(javax.swing.swingconstants.center); jlabel9.settext("option PRICE"); jbutton1.setfont(new java.awt.font("arial", 1, 12)); // NOI18N jbutton1.setforeground(new java.awt.color(102, 102, 102)); jbutton1.settext("calculate"); jbutton1.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt) { jbutton1actionperformed(evt); ); jbutton2.setfont(new java.awt.font("arial", 1, 12)); // NOI18N jbutton2.setforeground(new java.awt.color(102, 102, 102)); jbutton2.settext("display BINOMIAL TREE"); jbutton2.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt) { jbutton2actionperformed(evt); ); javax.swing.grouplayout jpanel5layout = new javax.swing.grouplayout(jpanel5); jpanel5.setlayout(jpanel5layout); jpanel5layout.sethorizontalgroup( jpanel5layout.createparallelgroup(javax.swing.grouplayout.alignment.leading).addgroup(jpanel5layout.createsequentialgroup().addcontainergap().addgroup(jpanel5layout.createparallelgroup(javax.swing.grouplayout.alignment.leading).addgroup(jpanel5layout.createsequentialgroup().addcomponent(jbutton1, javax.swing.grouplayout.preferred_size, 215, javax.swing.grouplayout.preferred_size).addgap(27, 27, 27).addComponent(jButton2, javax.swing.grouplayout.default_size, 217, Short.MAX_VALUE)).addGroup(jPanel5Layout.createSequentialGroup().addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jTextField5, javax.swing.grouplayout.preferred_size, 90, javax.swing.grouplayout.preferred_size).addcomponent(jlabel6, javax.swing.grouplayout.preferred_size, 86, javax.swing.grouplayout.preferred_size)).addgap(6, 6, 6).addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addComponent(jLabel5, javax.swing.grouplayout.preferred_size, 84, javax.swing.grouplayout.preferred_size).addcomponent(jtextfield6, javax.swing.grouplayout.preferred_size, 82, javax.swing.grouplayout.preferred_size)) PAGE 14

.addgroup(jpanel5layout.createparallelgroup(javax.swing.grouplayout.alignment.leading, false).addcomponent(jlabel7, javax.swing.grouplayout.default_size, javax.swing.grouplayout.default_size, Short.MAX_VALUE).addComponent(jTextField7, javax.swing.grouplayout.default_size, 77, Short.MAX_VALUE)).addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false).addcomponent(jlabel8, javax.swing.grouplayout.default_size, javax.swing.grouplayout.default_size, Short.MAX_VALUE).addComponent(jTextField9, javax.swing.grouplayout.preferred_size, 74, javax.swing.grouplayout.preferred_size)).addgroup(jpanel5layout.createparallelgroup(javax.swing.grouplayout.alignment.leading).addcomponent(jtextfield8, javax.swing.grouplayout.preferred_size, 90, javax.swing.grouplayout.preferred_size).addcomponent(jlabel9)))).addcontainergap()) ); jpanel5layout.setverticalgroup( jpanel5layout.createparallelgroup(javax.swing.grouplayout.alignment.leading).addgroup(jpanel5layout.createsequentialgroup().addcontainergap().addgroup(jpanel5layout.createparallelgroup(javax.swing.grouplayout.alignment.leading).addgroup(jpanel5layout.createsequentialgroup().addcomponent(jlabel6).addcomponent(jtextfield5, javax.swing.grouplayout.preferred_size, javax.swing.grouplayout.default_size, javax.swing.grouplayout.preferred_size)).addgroup(jpanel5layout.createsequentialgroup().addgroup(jpanel5layout.createparallelgroup(javax.swing.grouplayout.alignment.baseline).addcomponent(jlabel5).addcomponent(jlabel8).addcomponent(jlabel7).addcomponent(jlabel9)).addgroup(jpanel5layout.createparallelgroup(javax.swing.grouplayout.alignment.baseline).addcomponent(jtextfield6, javax.swing.grouplayout.preferred_size, javax.swing.grouplayout.default_size, javax.swing.grouplayout.preferred_size).addcomponent(jtextfield9, javax.swing.grouplayout.preferred_size, javax.swing.grouplayout.default_size, javax.swing.grouplayout.preferred_size).addcomponent(jtextfield7, javax.swing.grouplayout.preferred_size, javax.swing.grouplayout.default_size, javax.swing.grouplayout.preferred_size).addcomponent(jtextfield8, javax.swing.grouplayout.preferred_size, javax.swing.grouplayout.default_size, javax.swing.grouplayout.preferred_size)))).addgap(17, 17, 17).addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jButton2, javax.swing.grouplayout.default_size, 23, Short.MAX_VALUE).addComponent(jButton1, javax.swing.grouplayout.default_size, 24, Short.MAX_VALUE)) PAGE 15

);.addcontainergap()) jpanel1.setborder(javax.swing.borderfactory.createtitledborder(javax.swing.borderfactory.createetchedborder(), "PARAMETERS", javax.swing.border.titledborder.left, javax.swing.border.titledborder.top, new java.awt.font("arial", 1, 12), new java.awt.color(153, 153, 153))); // NOI18N jtextfield1.setfont(new java.awt.font("arial", 1, 12)); // NOI18N jtextfield1.setforeground(new java.awt.color(102, 102, 102)); jtextfield1.sethorizontalalignment(javax.swing.jtextfield.right); jtextfield1.settooltiptext("[i.e. 100.14]"); jtextfield1.setborder(javax.swing.borderfactory.createetchedborder()); jlabel1.setbackground(new java.awt.color(153, 153, 153)); jlabel1.setfont(new java.awt.font("arial", 1, 12)); jlabel1.setforeground(new java.awt.color(102, 102, 102)); jlabel1.sethorizontalalignment(javax.swing.swingconstants.center); jlabel1.settext("asset PRICE"); jtextfield2.setfont(new java.awt.font("arial", 1, 12)); jtextfield2.setforeground(new java.awt.color(102, 102, 102)); jtextfield2.sethorizontalalignment(javax.swing.jtextfield.right); jtextfield2.settooltiptext("[i.e. 100.16]"); jtextfield2.setborder(javax.swing.borderfactory.createetchedborder()); jlabel2.setbackground(new java.awt.color(153, 153, 153)); jlabel2.setfont(new java.awt.font("arial", 1, 12)); jlabel2.setforeground(new java.awt.color(102, 102, 102)); jlabel2.sethorizontalalignment(javax.swing.swingconstants.center); jlabel2.settext("exercise PRICE"); jlabel3.setbackground(new java.awt.color(153, 153, 153)); jlabel3.setfont(new java.awt.font("arial", 1, 12)); jlabel3.setforeground(new java.awt.color(102, 102, 102)); jlabel3.sethorizontalalignment(javax.swing.swingconstants.center); jlabel3.settext("risk FREE RATE"); jtextfield3.setfont(new java.awt.font("arial", 1, 12)); jtextfield3.setforeground(new java.awt.color(102, 102, 102)); jtextfield3.sethorizontalalignment(javax.swing.jtextfield.right); jtextfield3.setborder(javax.swing.borderfactory.createetchedborder()); jlabel4.setbackground(new java.awt.color(153, 153, 153)); jlabel4.setfont(new java.awt.font("arial", 1, 12)); // NOI18N jlabel4.setforeground(new java.awt.color(102, 102, 102)); jlabel4.sethorizontalalignment(javax.swing.swingconstants.center); jlabel4.settext("volatility"); PAGE 16

jtextfield4.setfont(new java.awt.font("arial", 1, 12)); // NOI18N jtextfield4.setforeground(new java.awt.color(102, 102, 102)); jtextfield4.sethorizontalalignment(javax.swing.jtextfield.right); jtextfield4.setborder(javax.swing.borderfactory.createetchedborder()); javax.swing.grouplayout jpanel1layout = new javax.swing.grouplayout(jpanel1); jpanel1.setlayout(jpanel1layout); jpanel1layout.sethorizontalgroup( jpanel1layout.createparallelgroup(javax.swing.grouplayout.alignment.leading).addgroup(jpanel1layout.createsequentialgroup().addcontainergap().addgroup(jpanel1layout.createparallelgroup(javax.swing.grouplayout.alignment.trailing).addgroup(javax.swing.grouplayout.alignment.leading, jpanel1layout.createsequentialgroup().addgroup(jpanel1layout.createparallelgroup(javax.swing.grouplayout.alignment.trailing).addcomponent(jtextfield1, javax.swing.grouplayout.alignment.leading, javax.swing.grouplayout.default_size, 93, Short.MAX_VALUE).addComponent(jLabel1, javax.swing.grouplayout.alignment.leading, javax.swing.grouplayout.default_size, 93, Short.MAX_VALUE)).addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addComponent(jTextField2, javax.swing.grouplayout.alignment.leading, javax.swing.grouplayout.default_size, 93, Short.MAX_VALUE).addComponent(jLabel2, javax.swing.grouplayout.alignment.leading, javax.swing.grouplayout.default_size, javax.swing.grouplayout.default_size, Short.MAX_VALUE))).addGroup(javax.swing.GroupLayout.Alignment.LEADING, jpanel1layout.createsequentialgroup().addgroup(jpanel1layout.createparallelgroup(javax.swing.grouplayout.alignment.trailing).addcomponent(jtextfield3, javax.swing.grouplayout.alignment.leading, javax.swing.grouplayout.default_size, 93, Short.MAX_VALUE).addComponent(jLabel3, javax.swing.grouplayout.alignment.leading, javax.swing.grouplayout.default_size, 93, Short.MAX_VALUE)).addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addComponent(jTextField4, javax.swing.grouplayout.alignment.leading, javax.swing.grouplayout.default_size, 93, Short.MAX_VALUE).addComponent(jLabel4, javax.swing.grouplayout.alignment.leading, javax.swing.grouplayout.default_size, 93, Short.MAX_VALUE)))).addGap(28, 28, 28)) ); jpanel1layout.setverticalgroup( jpanel1layout.createparallelgroup(javax.swing.grouplayout.alignment.leading).addgroup(jpanel1layout.createsequentialgroup().addcontainergap().addgroup(jpanel1layout.createparallelgroup(javax.swing.grouplayout.alignment.leading).addgroup(jpanel1layout.createsequentialgroup().addcomponent(jlabel1).addcomponent(jtextfield1, javax.swing.grouplayout.preferred_size, javax.swing.grouplayout.default_size, javax.swing.grouplayout.preferred_size)) PAGE 17

.addgroup(jpanel1layout.createsequentialgroup().addcomponent(jlabel2).addcomponent(jtextfield2, javax.swing.grouplayout.preferred_size, javax.swing.grouplayout.default_size, javax.swing.grouplayout.preferred_size))).addgroup(jpanel1layout.createparallelgroup(javax.swing.grouplayout.alignment.leading).addgroup(jpanel1layout.createsequentialgroup().addcomponent(jlabel3).addcomponent(jtextfield3, javax.swing.grouplayout.preferred_size, javax.swing.grouplayout.default_size, javax.swing.grouplayout.preferred_size)).addgroup(jpanel1layout.createsequentialgroup().addcomponent(jlabel4).addcomponent(jtextfield4, javax.swing.grouplayout.preferred_size, javax.swing.grouplayout.default_size, javax.swing.grouplayout.preferred_size))).addcontainergap(22, Short.MAX_VALUE)) ); jpanel4.setborder(javax.swing.borderfactory.createtitledborder(javax.swing.borderfactory.createetchedborder(), "OPTION TYPE", javax.swing.border.titledborder.left, javax.swing.border.titledborder.top, new java.awt.font("arial", 1, 12), new java.awt.color(153, 153, 153))); // NOI18N jcombobox1.setfont(new java.awt.font("arial", 1, 12)); // NOI18N jcombobox1.setforeground(new java.awt.color(153, 153, 153)); jcombobox1.setmodel(new javax.swing.defaultcomboboxmodel(new String[] { "European")); jcombobox1.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt) { jcombobox1actionperformed(evt); ); jradiobutton1.setfont(new java.awt.font("arial", 1, 12)); // NOI18N jradiobutton1.setforeground(new java.awt.color(102, 102, 102)); jradiobutton1.setselected(true); jradiobutton1.settext("call OPTION"); jradiobutton1.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt) { jradiobutton1actionperformed(evt); ); jradiobutton2.setfont(new java.awt.font("arial", 1, 12)); // NOI18N jradiobutton2.setforeground(new java.awt.color(102, 102, 102)); jradiobutton2.settext("put OPTION"); jradiobutton2.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt) { PAGE 18

); jradiobutton2actionperformed(evt); jlabel11.setbackground(new java.awt.color(153, 153, 153)); jlabel11.setfont(new java.awt.font("arial", 1, 12)); // NOI18N jlabel11.setforeground(new java.awt.color(102, 102, 102)); jlabel11.sethorizontalalignment(javax.swing.swingconstants.center); jlabel11.settext("time TO MATURITY"); jtextfield11.setfont(new java.awt.font("arial", 1, 12)); // NOI18N jtextfield11.setforeground(new java.awt.color(102, 102, 102)); jtextfield11.sethorizontalalignment(javax.swing.jtextfield.right); jtextfield11.settooltiptext("[i.e. 0.25 for 3 months]"); jtextfield11.setborder(javax.swing.borderfactory.createetchedborder()); javax.swing.grouplayout jpanel4layout = new javax.swing.grouplayout(jpanel4); jpanel4.setlayout(jpanel4layout); jpanel4layout.sethorizontalgroup( jpanel4layout.createparallelgroup(javax.swing.grouplayout.alignment.leading).addgroup(javax.swing.grouplayout.alignment.trailing, jpanel4layout.createsequentialgroup().addcontainergap().addgroup(jpanel4layout.createparallelgroup(javax.swing.grouplayout.alignment.trailing).addgroup(jpanel4layout.createsequentialgroup().addcomponent(jradiobutton1).addpreferredgap(javax.swing.layoutstyle.componentplacement.related, 13, Short.MAX_VALUE).addComponent(jRadioButton2)).addComponent(jComboBox1, javax.swing.grouplayout.alignment.leading, 0, 211, Short.MAX_VALUE).addGroup(javax.swing.GroupLayout.Alignment.LEADING, jpanel4layout.createsequentialgroup().addcomponent(jlabel11).addgap(18, 18, 18).addComponent(jTextField11, javax.swing.grouplayout.default_size, 86, Short.MAX_VALUE))).addContainerGap()) ); jpanel4layout.setverticalgroup( jpanel4layout.createparallelgroup(javax.swing.grouplayout.alignment.leading).addgroup(jpanel4layout.createsequentialgroup().addcontainergap().addcomponent(jcombobox1, javax.swing.grouplayout.preferred_size, javax.swing.grouplayout.default_size, javax.swing.grouplayout.preferred_size).addgap(7, 7, 7).addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jRadioButton1).addComponent(jRadioButton2)).addGap(18, 18, 18).addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel11) PAGE 19

.addcomponent(jtextfield11, javax.swing.grouplayout.preferred_size, javax.swing.grouplayout.default_size, javax.swing.grouplayout.preferred_size)).addcontainergap(20, Short.MAX_VALUE)) ); jlabel10.setbackground(new java.awt.color(153, 153, 153)); jlabel10.setfont(new java.awt.font("arial", 1, 12)); jlabel10.setforeground(new java.awt.color(102, 102, 102)); jlabel10.sethorizontalalignment(javax.swing.swingconstants.center); jlabel10.settext("developed by Ioannis Svigkos 2008"); javax.swing.grouplayout layout = new javax.swing.grouplayout(getcontentpane()); getcontentpane().setlayout(layout); layout.sethorizontalgroup( layout.createparallelgroup(javax.swing.grouplayout.alignment.leading).addgroup(layout.createsequentialgroup().addcontainergap().addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.leading).addcomponent(jlabel10, javax.swing.grouplayout.default_size, 491, Short.MAX_VALUE).addGroup(layout.createSequentialGroup().addComponent(jPanel1, javax.swing.grouplayout.preferred_size, javax.swing.grouplayout.default_size, javax.swing.grouplayout.preferred_size).addcomponent(jpanel4, javax.swing.grouplayout.default_size, javax.swing.grouplayout.default_size, Short.MAX_VALUE)).addComponent(jPanel5, javax.swing.grouplayout.default_size, javax.swing.grouplayout.default_size, Short.MAX_VALUE)).addContainerGap()) ); layout.setverticalgroup( layout.createparallelgroup(javax.swing.grouplayout.alignment.leading).addgroup(layout.createsequentialgroup().addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.leading, false).addcomponent(jpanel4, javax.swing.grouplayout.default_size, javax.swing.grouplayout.default_size, Short.MAX_VALUE).addComponent(jPanel1, javax.swing.grouplayout.default_size, javax.swing.grouplayout.default_size, Short.MAX_VALUE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addComponent(jPanel5, javax.swing.grouplayout.preferred_size, javax.swing.grouplayout.default_size, javax.swing.grouplayout.preferred_size).addgap(25, 25, 25).addComponent(jLabel10).addContainerGap(13, Short.MAX_VALUE)) ); // </editor-fold> private void jbutton1actionperformed(java.awt.event.actionevent evt) { PAGE 20

try { _assetprice = Double.parseDouble(jTextField1.getText()); _exerciseprice = Double.parseDouble(jTextField2.getText()); _riskfreerate = Double.parseDouble(jTextField3.getText()); _volatility = Double.parseDouble(jTextField4.getText()); _iteration = Double.parseDouble(jTextField5.getText()); _timetomaturity = Double.parseDouble(jTextField11.getText()); catch(numberformatexception e) { JOptionPane.showMessageDialog(this, "Please check values entered!", "Error Message", JOptionPane.ERROR_MESSAGE); _btree = new BinomialTree( _assetprice, _exerciseprice, _riskfreerate, _volatility, _timetomaturity, _iteration); this._u = roundtoeightdecimals(_btree.calculateupperfactor()); // roundtoeightdecimals*/(math.pow(math.e, _volatility * Math.sqrt(1/(_iteration-1)))); this._d = roundtoeightdecimals(_btree.calculatelowerfactor()); //*roundtoeightdecimals*/(math.pow(math.e, - _volatility * Math.sqrt((1/_iteration-1)))); this._p = roundtoeightdecimals(_btree.calculateprobability()); //*roundtoeightdecimals*/((math.pow(math.e, _riskfreerate* ((_iteration-1)))-_d) / (_u - _d)); jtextfield6.settext(string.valueof(_p)); jtextfield7.settext(string.valueof(_u)); jtextfield9.settext(string.valueof(_d)); if (jcombobox1.getselecteditem().equals("european")) { if (jradiobutton1.isselected() ) { _btree.priceeuropeancalloption(); System.out.println(_btree.getEuropeanCallOptionRootPrice()); jtextfield8.settext(string.valueof(roundtoeightdecimals(_btree.geteuropeancalloptionrootprice()))); // _btree.expand(); else if (jradiobutton2.isselected()) { _btree.priceeuropeanputoption(); jtextfield8.settext(string.valueof(roundtoeightdecimals(_btree.geteuropeanputoptionrootprice()))); // _btree.expand(); public double roundtoeightdecimals(double _double) { DecimalFormat toeightdecimalform = new DecimalFormat("#.########"); return Double.valueOf(toEightDecimalForm.format(_double)); PAGE 21

private void jbutton2actionperformed(java.awt.event.actionevent evt) { // TODO add your handling code here: JOptionPane.showMessageDialog(this, "Browser's Security Features Restrict this Action!", "Information Message", JOptionPane.INFORMATION_MESSAGE); private void jcombobox1actionperformed(java.awt.event.actionevent evt) { // TODO add your handling code here: private void jradiobutton1actionperformed(java.awt.event.actionevent evt) { jradiobutton2.setselected(false); if (!jradiobutton1.isselected()) { jradiobutton1.setselected(true); private void jradiobutton2actionperformed(java.awt.event.actionevent evt) { jradiobutton1.setselected(false); if (!jradiobutton2.isselected()) { jradiobutton2.setselected(true); // Variables declaration - do not modify private javax.swing.jbutton jbutton1; private javax.swing.jbutton jbutton2; private javax.swing.jcombobox jcombobox1; private javax.swing.jlabel jlabel1; private javax.swing.jlabel jlabel10; private javax.swing.jlabel jlabel11; private javax.swing.jlabel jlabel2; private javax.swing.jlabel jlabel3; private javax.swing.jlabel jlabel4; private javax.swing.jlabel jlabel5; private javax.swing.jlabel jlabel6; private javax.swing.jlabel jlabel7; private javax.swing.jlabel jlabel8; private javax.swing.jlabel jlabel9; private javax.swing.jpanel jpanel1; private javax.swing.jpanel jpanel4; private javax.swing.jpanel jpanel5; private javax.swing.jradiobutton jradiobutton1; private javax.swing.jradiobutton jradiobutton2; private javax.swing.jtextfield jtextfield1; PAGE 22

private javax.swing.jtextfield jtextfield11; private javax.swing.jtextfield jtextfield2; private javax.swing.jtextfield jtextfield3; private javax.swing.jtextfield jtextfield4; private javax.swing.jtextfield jtextfield5; private javax.swing.jtextfield jtextfield6; private javax.swing.jtextfield jtextfield7; private javax.swing.jtextfield jtextfield8; private javax.swing.jtextfield jtextfield9; // End of variables declaration PAGE 23