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

📄 股票运动路径模拟.c

📁 利用montecarlo 方法计算股票价格
💻 C
字号:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

double frand()
{
    return (double)rand()/(RAND_MAX);
}

// 配极法产生正态分布, 一次产生两个独立变量
double normal()
{
    double v1,v2,s, x1,x2;
    do {
        v1= frand()*2.0-1.0;
        v2= frand()*2.0-1.0;
        s= v1*v1+v2*v2;
    } while(s>=1.0);
    if (s==0)
        x1=x2=0.0;
    else{
        x1= v1 * sqrt(-2.0 * log(s)/s);
        x2= v2 * sqrt(-2.0 * log(s)/s);
    }
    return x1;
}

/*
 Input: s0 - 起始价格
        r  - 预期无风险收益率
        sigma - 波动率
        t - 到期时间
        n - 时间区间段数
        fp - 数据保存的文件
*/
float run(float s0, float r, float sigma,
        float t, int n, FILE *fp)
{
    int i;
    float dt, omega, s;

    if (n < 1)
    {
        return 0;
    }
    dt = t/n;
    fprintf(fp, "股票价格\t随机抽样值\t股票价值变化\n");
    for (i=0; i<n; i++)
    {
        omega = normal();
        s = s0;
        s0 *= 1 + r*dt + sigma * sqrt(dt) * omega;
        fprintf(fp, "%.4f\t\t%.4f\t\t%.4f\n", s, omega, s0-s);
    }
    return s0;
}

int main(int argc, char *argv[])
{
    FILE *fp;
    time_t tm;
    float s0, r, sigma, t, res = 0;
    int i, n, nn;

    puts("股票价格模拟程序");
    puts("----------------------------------");
    printf("请输入起始价格:");
    scanf("%f", &s0);
    printf("请输入预期无风险收益率:");
    scanf("%f", &r);
    printf("请输入波动率:");
    scanf("%f", &sigma);
    printf("请输入到期时间(单位:月):");
    scanf("%f", &t);
    t /= 12;
    printf("请输入时间区间段数:");
    scanf("%d", &n);
    printf("请输入模拟次数:");
    scanf("%d", &nn);

    printf("开始模拟...\n");
    fp = fopen("data.txt", "w");
    srand( (unsigned)time(&tm) );
    fprintf(fp, "股票价格模拟结果\n");
    for (i=0; i<nn; i++)
    {
        fprintf(fp, "------------------------------------------------\n");
        res += run(s0, r, sigma, t, n, fp);
    }
    fprintf(fp, "------------------------------------------------\n");
    fprintf(fp, "到期瞬时股票平均价格 %.4f\n", res/nn);
    puts("模拟结束,结果保存在 data.txt 中");
    fclose(fp);
    return 0;
}

⌨️ 快捷键说明

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