C++选项定价函数..单独工作很好,但对于股票价格的范围(向量)来说不行
C++ option pricing function...works fine individually but not for a range (vector) of stock prices
我通过以下公式计算期权价格(看涨期权):
#ifndef GLOBAL_H
#define GLOBAL_H
#include "NormDistFunctions.h"
struct OptionData
{
double X;
double b;
double r;
double T;
double sigma;
};
double EuroCall(OptionData o, double S);
double EuroPut(OptionData o, double S);
#endif
EuroCall()的输入是OptionData o和S(股票价格)。这是我的实现。
#include "Global.h"
#include "EuroOption.h"
#include <boost/math/distributions/normal.hpp>
#include <boost/math/distributions.hpp> // For non-member functions of distributions
#include <cmath>
double EuroCall(OptionData o, double S)
{
double d1 = (log(S/o.X) + (o.b + (o.sigma * o.sigma) / 2) * o.T) / (o.sigma * sqrt(o.T));
double d2 = d1 - o.sigma * sqrt(o.T);
double callPrice = S * exp((o.b - o.r) * o.T) * N(d1) - o.X * exp(-o.r * o.T) * N(d2);
return callPrice;
}
这本身就很好,但我需要为一系列股票价格定价。我为这些股票价格范围创建了一个全球向量:
vector<double> MeshArray(double start, double end, double h)
{
vector<double> mesh;
mesh.reserve(100);
for (double i = start; i <= end; i += h)
mesh.push_back(i);
return mesh;
}
最后,在main()中,我有:
vector<double> MA = MeshArray(50.0, 100.0, 2.0);
for (auto &i : MA)
cout << EuroCall(o1,MA[i]) << " ";
输出应该是从50、52、54…到100的每个基础股票价格的看涨价格向量。但我的输出是"0 0 0 0"等。我非常感谢任何人关于如何解决这个问题的建议,这让我连续两天都没有问题。
您的问题是用向量的一个元素(即去引用迭代器)而不是迭代器调用EuroCall
函数
for (auto &i : MA)
cout << EuroCall(o1,MA[i]) << " ";
这里,i
是向量(std::vector<double>::value_type
)的元素,即double
,而不是迭代器/索引。所以用EuroCall(o1,i)
替换EuroCall(o1,MA[i])
,你应该可以离开了。
有趣的是,您的代码在编译时没有发出警告,因为MA[i]
引用了值i
指定的MA
中的某个偏移量,该偏移量超出了界限(本可以通过使用MA.at(i)
来实现,这会为越界访问抛出一个异常),所以您正处于未定义行为的领域。这就是为什么在使用基于范围的for
时,最好选择一个更好的名称,例如elem
,而不是i
,所以当您看到MA[elem]
时,您会意识到有些地方不对。
相关文章:
- 尝试通过多个向量访问变量时,向量下标超出范围
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- C++ - 使用基于范围的 for 循环将字符值分配给向量中的字符串不会分配值
- 布尔值向量的基于范围 for 循环
- 如何使用count_if计算向量中的可变数字范围
- 范围 v3 的和向量
- 关于在向量向量上使用基于范围的 for 循环
- 使用基于范围的指针循环和向量时出现C++错误
- 用基于范围的for循环填充指针向量
- 创建结构体向量,表达式:向量下标超出范围
- 代码超出范围.如何动态分配此向量?
- 无法取消引用超出范围的向量迭代器 - 有什么问题?
- 非常量对象的向量似乎在基于范围的 for 循环中被视为常量
- 从给定范围内的向量中查找最大元素
- 向量向量的范围范围
- 将局部变量保存到全局向量中,为什么离开局部范围后可以得到这些局部变量?
- 指针范围问题和返回类中封装的指针向量内的指针引用
- 在 c++ 中检查 if 条件中的向量位置范围
- 向量下标超出向量向量的范围
- 如何正确使用向量范围构造函数