⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 impliedvolatilitysmile.java

📁 金融资产定价,随机过程,MONTE CARLO 模拟 JAVA 程序和文档资料
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        jButton1.addMouseListener(new java.awt.event.MouseAdapter() {            public void mouseClicked(java.awt.event.MouseEvent evt) {                jButton1MouseClicked(evt);            }        });        jPanel2.add(jButton1);        jSplitPane2.setRightComponent(jPanel2);        jSplitPane1.setRightComponent(jSplitPane2);        getContentPane().add(jSplitPane1);        pack();    }//GEN-END:initComponents    private void jSlider15MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jSlider15MouseDragged                prop_trc=1.0*jSlider15.getValue()/1000;        jTextField16.setText("Proportional transaction cost = "+prop_trc);    }//GEN-LAST:event_jSlider15MouseDragged    private void jSlider14MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jSlider14MouseDragged                K_max=jSlider14.getValue()/100;        jTextField15.setText("K_max = "+K_max);    }//GEN-LAST:event_jSlider14MouseDragged    private void jSlider13MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jSlider13MouseDragged                K_min=jSlider13.getValue()/100;        jTextField14.setText("K_min = "+K_min);    }//GEN-LAST:event_jSlider13MouseDragged        //underlying at ime t=0    private void jSlider1MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jSlider1MouseDragged                S_0=(double)jSlider1.getValue()/100;        jTextField1.setText("S(0) = "+S_0);    }//GEN-LAST:event_jSlider1MouseDragged        //market drift    private void jSlider2MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jSlider2MouseDragged                mu=(double)jSlider2.getValue()/100;        jTextField2.setText("market drift = "+mu);    }//GEN-LAST:event_jSlider2MouseDragged        //volatility    private void jSlider3MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jSlider3MouseDragged                sigma=(double)jSlider3.getValue()/100;        jTextField3.setText("volatility = "+sigma);     }//GEN-LAST:event_jSlider3MouseDragged        //dividend yield    private void jSlider4MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jSlider4MouseDragged                q=1.0*jSlider5.getValue()/100;        jTextField4.setText("dividend yield = "+q);    }//GEN-LAST:event_jSlider4MouseDragged        //risk free rate    private void jSlider5MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jSlider5MouseDragged                r=1.0*jSlider5.getValue()/100;        jTextField5.setText("risk free rate = "+r);    }//GEN-LAST:event_jSlider5MouseDragged        //size of time step    private void jSlider6MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jSlider6MouseDragged                dt=(double)jSlider6.getValue()/1000;          //time step in years        T=(int)Math.round(Tc/dt);        jTextField6.setText("rehedge interval (years) = "+dt);    }//GEN-LAST:event_jSlider6MouseDragged        //number of paths    private void jSlider7MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jSlider7MouseDragged                nPaths=jSlider7.getValue();        jTextField7.setText("number of paths = "+nPaths);    }//GEN-LAST:event_jSlider7MouseDragged        //number of interpolating points    private void jSlider8MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jSlider8MouseDragged                nPoints=jSlider8.getValue();        jTextField8.setText("number of sample points = "+nPoints);    }//GEN-LAST:event_jSlider8MouseDragged     //time to expiry    private void jSlider9MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jSlider9MouseDragged                Tc=(double)jSlider9.getValue()/100;            //time to expiry in years        T=(int)Math.round(Tc/dt);                      //time steps to expiry        jTextField9.setText("time to expiration (years) = "+Tc);    }//GEN-LAST:event_jSlider9MouseDragged        //fixed transaction cost    private void jSlider10MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jSlider10MouseDragged                fixed_trc=(double)jSlider10.getValue()/1000;             jTextField10.setText("fixed transaction cost = "+fixed_trc);    }//GEN-LAST:event_jSlider10MouseDragged    //target return     private void jSlider11MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jSlider11MouseDragged                int Rho=jSlider11.getValue();                    //target return in %        rho=(double)Rho/100;        jTextField11.setText("targeted return = "+Rho+"%");    }//GEN-LAST:event_jSlider11MouseDragged    //probability of success    private void jSlider12MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jSlider12MouseDragged                p=(double)jSlider12.getValue()/100;        jTextField12.setText("probability of success = "+p);    }//GEN-LAST:event_jSlider12MouseDragged        //starts off computation    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton1MouseClicked            try{ computeGraph(); }      catch(NoSolutionException e){}         }//GEN-LAST:event_jButton1MouseClicked        /** Exit the Application */    private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm        System.exit(0);    }//GEN-LAST:event_exitForm                      /**    * @param args the command line arguments    */    public static void main(String args[])    {         ImpliedVolatilitySmile        mainWindow=new ImpliedVolatilitySmile();       mainWindow.setTitle("Implied volatility smile");       mainWindow.setBounds(50,50,800,500);                      //set and display defaults       S_0=40;       mu=0.3;       sigma=0.4;       q=0.06;       r=0.06;            //risk free rate       K_min=0.6*mainWindow.S_0;       K_max=1.5*mainWindow.S_0;       dt=0.05;       Tc=0.4;       T=(int)Math.round(mainWindow.Tc/mainWindow.dt);       rho=0.12;    //target return       p=0.95;      //probability of success       fixed_trc=0.01;       prop_trc=0.2;       nPoints=100;       nPaths=2000;       nSignChange=10;       reportFrequency=200;                    mainWindow.jTextField16.setText       ("Proportional transaction cost = "+prop_trc);       mainWindow.jTextField15.setText("K_max = "+K_max);       mainWindow.jTextField14.setText("K_min = "+K_min);       mainWindow.jTextField1.setText("S(0) = "+S_0);       mainWindow.jTextField2.setText("market drift = "+mu);       mainWindow.jTextField3.setText("volatility = "+sigma);        mainWindow.jTextField4.setText("dividend yield = "+q);       mainWindow.jTextField5.setText("risk free rate = "+r);       mainWindow.jTextField6.setText("rehedge interval (years) = "+dt);       mainWindow.jTextField7.setText("number of paths = "+nPaths);       mainWindow.jTextField8.setText("number of sample points = "+nPoints);       mainWindow.jTextField9.setText("time to expiry (years) = "+Tc);       mainWindow.jTextField10.setText("fixed transaction cost = "+fixed_trc);       mainWindow.jTextField11.setText("targeted return = "+rho);       mainWindow.jTextField12.setText("probability of success = "+p);                       mainWindow.show();                 }//end main    // Variables declaration - do not modify//GEN-BEGIN:variables    private javax.swing.JSlider jSlider4;    private javax.swing.JSlider jSlider3;    private javax.swing.JSlider jSlider2;    private javax.swing.JSlider jSlider1;    private javax.swing.JSlider jSlider15;    private javax.swing.JButton jButton1;    private javax.swing.JSlider jSlider14;    private javax.swing.JSlider jSlider13;    private javax.swing.JSlider jSlider12;    private javax.swing.JSlider jSlider11;    private javax.swing.JTextArea jTextArea1;    private javax.swing.JSlider jSlider10;    private javax.swing.JScrollPane jScrollPane1;    private javax.swing.JLabel jLabel10;    private javax.swing.JTextField jTextField16;    private javax.swing.JTextField jTextField15;    private javax.swing.JTextField jTextField14;    private javax.swing.JTextField jTextField12;    private javax.swing.JPanel jPanel2;    private javax.swing.JTextField jTextField11;    private javax.swing.JPanel jPanel1;    private javax.swing.JTextField jTextField10;    private javax.swing.JTextField jTextField9;    private javax.swing.JTextField jTextField8;    private javax.swing.JTextField jTextField7;    private javax.swing.JTextField jTextField6;    private javax.swing.JTextField jTextField5;    private javax.swing.JTextField jTextField4;    private javax.swing.JTextField jTextField3;    private javax.swing.JTextField jTextField2;    private javax.swing.JTextField jTextField1;    private javax.swing.JLabel jLabel9;    private javax.swing.JLabel jLabel8;    private javax.swing.JLabel jLabel7;    private javax.swing.JLabel jLabel6;    private javax.swing.JLabel jLabel5;    private javax.swing.JLabel jLabel4;    private javax.swing.JLabel jLabel3;    private javax.swing.JLabel jLabel2;    private javax.swing.JLabel jLabel1;    private javax.swing.JSlider jSlider9;    private javax.swing.JSlider jSlider8;    private javax.swing.JSlider jSlider7;    private javax.swing.JSlider jSlider6;    private javax.swing.JSplitPane jSplitPane2;    private javax.swing.JProgressBar jProgressBar1;    private javax.swing.JSplitPane jSplitPane1;    private javax.swing.JSlider jSlider5;    // End of variables declaration//GEN-END:variables    //asset,simulation parameters    static double  S_0,       //underlying at time t=0                   mu,        //underlying, market drift                   sigma,     //underlying, volatility                   q,         //underlying, volatility                   r,         //risk free rate                   dt,        //size of time step in years                                      Tc,        //time to expiry in years                   K,         //call strike                   K_min,     //minimum strike                   K_max,     //maximum strike                   rho,       //targeted return                   p,         //probability of success                   fixed_trc, //fixed transaction costs                   prop_trc;  //proportional transation costs        float x_p;                //p-th stanard normal percentile (N(x_p)=p)        static int  T,            //time steps to expiration                nPaths,       //number of paths used to compute statistics                nBranch,      //irrelevant here but needed for constructor                nPoints,      //number of points interpolating                nSignChange,                reportFrequency;                               //main computation    private void computeGraph()    throws NoSolutionException    {        //asset and call hedge analysis allocation:       ConstantVolatilityAsset        asset=new ConstantVolatilityAsset(T,dt,nSignChange,S_0,r,q,mu,sigma);       CallHedgeStatisticsGraphs        stats=new CallHedgeStatisticsGraphs(asset,nPaths,nBranch,nPoints,                                           jProgressBar1,reportFrequency);                                                 /*        * The arrays float[j][i], j=0,1, of hedge  of hedge means (j=0) and standard         * deviations (j=1) corresponding to strikes K[i]=K_min+i*(K_max-K_min)/n,        * where n=nPoints-1.        * Note: VisAD requires float[]s and not double[]s.         */       double[][] hedgeStatistics=       stats.functionOfStrike(K_min,K_max,fixed_trc,prop_trc);                                                double[] means=hedgeStatistics[0];       double[] standardDeviations=hedgeStatistics[1];             //compute the implied sigmas from means and standard deviations              //p-th standard normal percentile       double x_p=FinMath.N_Solve1(p);                      double[] implied_sigmas=new double[nPoints];       int n=nPoints-1;       for(int i=0;i<nPoints;i++)       {                      double K_i=K_min+i*(K_max-K_min)/n;            Call call_i=new Call(K_i,asset);            double fairPrice=call_i.discountedAnalyticPrice(0),                   sellersPrice=(1+rho*Tc)*fairPrice+                                x_p*standardDeviations[i]-means[i],                   Q=asset.forwardPrice(0),                   Sigma=0;                               //don't use Newton here:            try{ Sigma=FinMath.BisectionSolveBSF(Q,K_i,sellersPrice);  }             catch(NoSolutionException e){}            implied_sigmas[i]=Sigma/Math.sqrt(T*dt);                            /**             * rescale means and standardDeviations as percentage of price             * and the implied sigmas as a percentage             * since this is how we want to display them             */            means[i]/=(fairPrice/100);            standardDeviations[i]/=(fairPrice/100);            implied_sigmas[i]*=100;        }                         double percent_sigma=100*sigma,              y_axis_min=percent_sigma;       String chartTitle=       "Implied volatility"+" (true vol: "+percent_sigma+"%), "+       "time to expiry: "+T*dt;                            JGraph jGraph=new JGraph(K_min,K_max);       jGraph.addSeries(implied_sigmas,"Implied volatility");       jGraph.setTitle(chartTitle);       jGraph.setXAxisLabel("call_strike");       jGraph.setYAxisLabel("Implied volatility (%)");       jGraph.setYAxisMin(40);              jGraph.setVisible(true);       jGraph.saveAsPNG();               }//computeGraph             }//end class ImpliedVolatilitySmile

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -