关键词
C++ | Python | 蒙特卡罗 | 模拟 | 算法伴随微分 | 计算图 | 复合模式 | 有向无环图 | 节点 | 懒惰评估 | 算法 | 金融 | 方程式 | 遍历 | 模型 | 并行计算 | 检查点 | 风险 | 价值回报 | 市场波动 | 利率 | 傅里叶变换
在此阶段,该代码将不包含任何面向对象或通用编程技术。 现在的目标是帮助您了解定价引擎的基本 C++ 实现,而不需要所有额外的对象机制来封装数学函数。 我已经完整地写出了该程序,然后下面我将解释每个组件如何工作:
#define USE MATH DEFINES
#include <iostream>
#include <cmath>
double norm_pdf(const double & x) {
return (1.0 / (pow(2∗ M_PI, 0.5)))∗ exp( −0.5∗x∗x);
}
double norm_cdf(const double &x) {
double k = 1.0 / (1.0 + 0.2316419∗ x);
double k sum = k∗(0.319381530 + k∗(−0.356563782 + k∗(1.781477937 +
k∗(−1.821255978 + 1.330274429∗ k))));
i f(x >= 0.0) {
return (1.0−(1.0 / (pow(2∗M_PI, 0.5)))∗ exp(−0.5∗ x∗ x)∗ k sum);
}
else {
return 1.0− norm_cdf(−x);
}
}
double d_j(const int & j,
const double & S,
const double & K,
const double & r,
const double & v,
const double & T) {
return (log(S/K) + (r + (pow(−1, j−1))∗ 0.5∗ v∗ v)∗ T) / (v∗(pow(T, 0 .5)));
}
double call-price(const double & S,
const double & K,
const double & r,
const double & v,
const double & T) {
return S∗ norm_cdf(d j(1,S,K,r,v,T))− K∗ exp(−r∗T)∗
norm_cdf(d j(2, S, K, r, v, T));
}
double put_price(const double & S,
const double & K,
const double & r,
const double & v,
const double & T) {
return −S∗ norm_cdf(−d_j(1,S,K,r,v,T)) + K∗exp(−r∗T)∗
norm_cdf(−d_j(2, S, K, r, v, T));
}
int main(int argc, char∗∗ argv) {
double S = 1 0 0 .0;
double K = 1 0 0 .0;
double r = 0 .0 5;
double v = 0 .2;
double T = 1 .0;
double call = call_price(S,K,r,v,T);
double put = put_price(S,K,r,v,T);
std:: cout << ”Underlying: ” << S <<std::endl;
std:: cout << ”Strike: ” << K <<std::endl;
std:: cout << ”Risk−FreeRate: ” << r <<std::endl;
std:: cout << ”Volatility: ” << v <<std::endl;
std:: cout << ”Maturity: ” << T <<std::endl;
std:: cout << ”Call Price: ” <<call <<std::endl;
std:: cout << ”Put Price: ” << put << std::endl;
return 0;
}
#def ine USE MATH DEFINES
下一部分导入 iostream 和 cmath 库。 这使得我们可以使用std::cout命令来输出代码。 此外,我们现在可以访问 C 数学函数,例如 exp、pow、log 和 sqrt:
#include <iostream>
#include <cmath>