二叉树方法计算新美式期权价格工具

版权申诉
0 下载量 106 浏览量 更新于2024-10-18 收藏 565B ZIP 举报
资源摘要信息:"美式期权计算工具,基于二叉树模型" 在金融衍生品领域中,期权是一种非常重要的工具,允许买方在未来某个特定时间以特定价格购买或卖出某种资产的权利。期权分为美式期权和欧式期权,其中美式期权的独特之处在于它可以在到期日前的任何时间被执行,这与欧式期权只能在到期日当天执行相比,赋予了投资者更大的灵活性。 根据文件信息,"Newly_Am_put.zip_美式期权"是一个以美式期权计算为目的的压缩包,其中包含的脚本文件名称为"Newly_Am_put.m"。该文件似乎是用MATLAB语言编写的,因为其文件扩展名表明它是一个MATLAB可执行的脚本文件。MATLAB是一种广泛应用于数值计算、数据分析、以及图形化的编程环境,非常适合于金融模型的建立和分析。 在描述中提到该工具使用了"二叉树方法"来计算新发行的美式期权的价格。二叉树模型,又称Cox-Ross-Rubinstein模型,是一种数值方法,用于估算期权等衍生品的价值。该模型假设标的资产的价格在每个时间步长上只有两种可能的变化:上升或下降,这些变化遵循特定的概率分布,并与一定的折现率相结合以计算期权的当前价值。该模型在数学上相对容易处理,且能够较好地适应美式期权的特点,即期权可以在到期前的任何时间点执行。 美式期权的定价比欧式期权更为复杂,因为需要考虑提前执行期权的策略。二叉树方法通过构建时间分叉树来模拟标的资产价格的可能路径,然后通过逆推算法来决定每个节点处的最优执行策略,从而计算期权的价值。在树状图中,从末端开始,根据期权是处于实值状态(内在价值大于零)、虚值状态(内在价值小于零)还是平值状态(内在价值等于零),决策者将决定是否提前执行期权。这种从期权到期日向当前日期逆推的过程可以确保投资者在任何时候都不会错过提前行使期权的最佳机会。 使用二叉树模型计算美式期权价格的优点在于其灵活性和相对简单的实现,但缺点是计算量大,特别是对于路径较多、时间步长划分较细的模型,计算所需时间会显著增加。此外,模型参数的选取(如标的资产价格的波动率、无风险利率、执行价格等)对计算结果有很大影响。 对于"Newly_Am_put.m"这个文件的具体内容,虽然没有详细的代码信息,但可以推测它可能包含了以下几个核心步骤来实现美式期权的定价: 1. 初始化模型参数,包括股票当前价格、执行价格、无风险利率、股票价格波动率、到期时间等。 2. 构建二叉树模型,用于模拟股票价格在期权有效期内的可能变动路径。 3. 应用逆推法,从期权到期日开始,计算每个节点的期权价值,并根据美式期权特点判断是否执行。 4. 递归计算至起始时间点,得到美式期权的理论价格。 综上所述,"Newly_Am_put.zip_美式期权"是一个专业的金融工具,能够辅助投资者和分析师计算新发行美式期权的合理价格,使用了二叉树模型这一数学算法,通过MATLAB脚本实现。这个工具对于理解美式期权的定价机制、执行策略以及相关金融知识具有重要作用。

if self.config.load_type == "INC": # adhoc hist job do not need to join landing merge table try: landing_merge_df = self.spark.read.format(self.config.destination_file_type). \ load(self.config.destination_data_path) # dataframe for updated records df = df.drop("audit_batch_id", "audit_job_id", "audit_src_sys_name", "audit_created_usr", "audit_updated_usr", "audit_created_tmstmp", "audit_updated_tmstmp") # dataframe for newly inserted records new_insert_df = df.join(landing_merge_df, primary_keys_list, "left_anti") self.logger.info(f"new_insert_df count: {new_insert_df.count()}") new_insert_df = DataSink_with_audit(self.spark).add_audit_columns(new_insert_df, param_dict) update_df = df.alias('l').join(landing_merge_df.alias('lm'), on=primary_keys_list, how="inner") update_df = update_df.select("l.*", "lm.audit_batch_id", "lm.audit_job_id", "lm.audit_src_sys_name", "lm.audit_created_usr", "lm.audit_updated_usr", "lm.audit_created_tmstmp", "lm.audit_updated_tmstmp") self.logger.info(f"update_df count : {update_df.count()}") update_df = DataSink_with_audit(self.spark).update_audit_columns(update_df, param_dict) # dataframe for unchanged records unchanged_df = landing_merge_df.join(df, on=primary_keys_list, how="left_anti") self.logger.info(f"unchanged_records_df count : {unchanged_df.count()}") final_df = new_insert_df.union(update_df).union(unchanged_df) print("final_df count : ", final_df.count()) except AnalysisException as e: if e.desc.startswith('Path does not exist'): self.logger.info('landing merge table not exists. will skip join landing merge') final_df = DataSink_with_audit(self.spark).add_audit_columns(df, param_dict) else: self.logger.error(f'unknown error: {e.desc}') raise e else: final_df = DataSink_with_audit(self.spark).add_audit_columns(df, param_dict) return final_df

2023-06-11 上传