📄 impliedvolatilitysmile.java
字号:
/* WARANTY NOTICE AND COPYRIGHTThis program is free software; you can redistribute it and/ormodify it under the terms of the GNU General Public Licenseas published by the Free Software Foundation; either version 2of the License, or (at your option) any later version.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.Copyright (C) Michael J. Meyermatmjm@mindspring.comspyqqqdia@yahoo.com*/* * ImpliedVolatilitySmile.java * * Created on December 29, 2001, 12:44 AM */package Examples.Hedging;import Hedging.*;import Statistics.*;import Market.*;import Options.*;import Graphics.*;import Exceptions.*;import java.awt.*;import javax.swing.*;import com.jrefinery.chart.*;/** <p>Computes the implied volatility derived from the price at * which a call is sold as a function of the strike price.<p> * * <p>The sale price is chosen so that hedging the call with analytic * deltas yields a targeted return on the call price with a certain * probability of success. The computation is carried out under the * assumption of a normal distribution for the outcome of the call hedge.</p> * *<p>This is motivated by the observation that calls become increasingly harder * to hedge the farther they move out of the money: hedge performance measured * as standard deviation of hedge outcome expressed as a percentage of * the Black Scholes call price deteriorates as the call moves more and more * out of the money.</p> * *<p>The idea is to see if a mundane explanation for the smile phenomenon can * be derived. The targeted return on the call price forces the implied * volatility up as the call gets deeper into the money.</p> * * @author Michael J. Meyer */public class ImpliedVolatilitySmile extends javax.swing.JFrame { /** Creates new form ImpliedVolatilitySmile */ public ImpliedVolatilitySmile() { initComponents(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() {//GEN-BEGIN:initComponents jSplitPane1 = new javax.swing.JSplitPane(); jScrollPane1 = new javax.swing.JScrollPane(); jTextArea1 = new javax.swing.JTextArea(); jSplitPane2 = new javax.swing.JSplitPane(); jPanel1 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); jTextField1 = new javax.swing.JTextField(); jTextField2 = new javax.swing.JTextField(); jTextField3 = new javax.swing.JTextField(); jTextField4 = new javax.swing.JTextField(); jTextField5 = new javax.swing.JTextField(); jLabel2 = new javax.swing.JLabel(); jTextField7 = new javax.swing.JTextField(); jTextField8 = new javax.swing.JTextField(); jLabel3 = new javax.swing.JLabel(); jTextField9 = new javax.swing.JTextField(); jTextField14 = new javax.swing.JTextField(); jTextField15 = new javax.swing.JTextField(); jLabel4 = new javax.swing.JLabel(); jTextField6 = new javax.swing.JTextField(); jTextField10 = new javax.swing.JTextField(); jTextField16 = new javax.swing.JTextField(); jTextField11 = new javax.swing.JTextField(); jTextField12 = new javax.swing.JTextField(); jProgressBar1 = new javax.swing.JProgressBar(); jLabel10 = new javax.swing.JLabel(); jPanel2 = new javax.swing.JPanel(); jLabel5 = new javax.swing.JLabel(); jSlider1 = new javax.swing.JSlider(); jSlider2 = new javax.swing.JSlider(); jSlider3 = new javax.swing.JSlider(); jSlider4 = new javax.swing.JSlider(); jSlider5 = new javax.swing.JSlider(); jLabel6 = new javax.swing.JLabel(); jSlider7 = new javax.swing.JSlider(); jSlider8 = new javax.swing.JSlider(); jLabel7 = new javax.swing.JLabel(); jSlider9 = new javax.swing.JSlider(); jSlider13 = new javax.swing.JSlider(); jSlider14 = new javax.swing.JSlider(); jLabel8 = new javax.swing.JLabel(); jSlider6 = new javax.swing.JSlider(); jSlider10 = new javax.swing.JSlider(); jSlider15 = new javax.swing.JSlider(); jSlider11 = new javax.swing.JSlider(); jSlider12 = new javax.swing.JSlider(); jLabel9 = new javax.swing.JLabel(); jButton1 = new javax.swing.JButton(); getContentPane().setLayout(new java.awt.GridLayout(1, 1)); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); jSplitPane1.setDividerLocation(90); jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); jTextArea1.setEditable(false); jScrollPane1.setViewportView(jTextArea1); jSplitPane1.setLeftComponent(jScrollPane1); jSplitPane2.setDividerLocation(350); jPanel1.setLayout(new java.awt.GridLayout(21, 1)); jLabel1.setText(" UNDERLYING"); jLabel1.setForeground(new java.awt.Color(0, 0, 51)); jPanel1.add(jLabel1); jTextField1.setEditable(false); jTextField1.setText("S(0):"); jPanel1.add(jTextField1); jTextField2.setEditable(false); jTextField2.setText("market drift:"); jPanel1.add(jTextField2); jTextField3.setEditable(false); jTextField3.setText("volatility:"); jPanel1.add(jTextField3); jTextField4.setEditable(false); jTextField4.setText("dividend yield:"); jPanel1.add(jTextField4); jTextField5.setEditable(false); jTextField5.setText("risk free rate:"); jPanel1.add(jTextField5); jLabel2.setText(" SIMULATION"); jLabel2.setForeground(new java.awt.Color(0, 0, 51)); jPanel1.add(jLabel2); jTextField7.setEditable(false); jTextField7.setText("number of paths:"); jPanel1.add(jTextField7); jTextField8.setEditable(false); jTextField8.setText("number of interpolating points:"); jPanel1.add(jTextField8); jLabel3.setText(" CALLS"); jLabel3.setForeground(new java.awt.Color(0, 0, 51)); jPanel1.add(jLabel3); jTextField9.setEditable(false); jTextField9.setText("time to expiry (years):"); jPanel1.add(jTextField9); jTextField14.setEditable(false); jTextField14.setText("minimum strike:"); jPanel1.add(jTextField14); jTextField15.setEditable(false); jTextField15.setText("maximum strike:"); jPanel1.add(jTextField15); jLabel4.setText(" CALL SELLER"); jLabel4.setForeground(new java.awt.Color(0, 0, 51)); jPanel1.add(jLabel4); jTextField6.setEditable(false); jTextField6.setText("rehedge interval (years):"); jPanel1.add(jTextField6); jTextField10.setEditable(false); jTextField10.setText("fixed transaction costs:"); jPanel1.add(jTextField10); jTextField16.setEditable(false); jTextField16.setText("Proportional transaction costs:"); jPanel1.add(jTextField16); jTextField11.setEditable(false); jTextField11.setText("targeted return:"); jPanel1.add(jTextField11); jTextField12.setEditable(false); jTextField12.setText("probability of success:"); jPanel1.add(jTextField12); jProgressBar1.setBackground(new java.awt.Color(204, 204, 255)); jProgressBar1.setBorder(new javax.swing.border.EtchedBorder(java.awt.Color.white, java.awt.Color.lightGray)); jPanel1.add(jProgressBar1); jPanel1.add(jLabel10); jSplitPane2.setLeftComponent(jPanel1); jPanel2.setLayout(new java.awt.GridLayout(21, 1)); jPanel2.add(jLabel5); jSlider1.setMaximum(20000); jSlider1.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { jSlider1MouseDragged(evt); } }); jPanel2.add(jSlider1); jSlider2.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { jSlider2MouseDragged(evt); } }); jPanel2.add(jSlider2); jSlider3.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { jSlider3MouseDragged(evt); } }); jPanel2.add(jSlider3); jSlider4.setMaximum(50); jSlider4.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { jSlider4MouseDragged(evt); } }); jPanel2.add(jSlider4); jSlider5.setMaximum(30); jSlider5.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { jSlider5MouseDragged(evt); } }); jPanel2.add(jSlider5); jPanel2.add(jLabel6); jSlider7.setMaximum(50000); jSlider7.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { jSlider7MouseDragged(evt); } }); jPanel2.add(jSlider7); jSlider8.setMaximum(500); jSlider8.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { jSlider8MouseDragged(evt); } }); jPanel2.add(jSlider8); jPanel2.add(jLabel7); jSlider9.setMaximum(300); jSlider9.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { jSlider9MouseDragged(evt); } }); jPanel2.add(jSlider9); jSlider13.setMaximum(10000); jSlider13.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { jSlider13MouseDragged(evt); } }); jPanel2.add(jSlider13); jSlider14.setMinimum(5000); jSlider14.setMaximum(30000); jSlider14.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { jSlider14MouseDragged(evt); } }); jPanel2.add(jSlider14); jPanel2.add(jLabel8); jSlider6.setMaximum(500); jSlider6.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { jSlider6MouseDragged(evt); } }); jPanel2.add(jSlider6); jSlider10.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { jSlider10MouseDragged(evt); } }); jPanel2.add(jSlider10); jSlider15.setMaximum(400); jSlider15.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { jSlider15MouseDragged(evt); } }); jPanel2.add(jSlider15); jSlider11.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { jSlider11MouseDragged(evt); } }); jPanel2.add(jSlider11); jSlider12.setMinimum(60); jSlider12.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { jSlider12MouseDragged(evt); } }); jPanel2.add(jSlider12); jPanel2.add(jLabel9); jButton1.setText("go");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -