ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

限界バリュー アット リスクの分散シミュレーション

この例では Parallel Computing Toolbox™ を使用して、ポートフォリオ内の多数の株について モンテカルロ シミュレーションを実行します。特定の信頼度におけるポートフォリオの VaR (バリュー アット リスク)、およびポートフォリオ内の各株の mVaR (限界バリュー アット リスク) を予測します。また、推定に対する信頼区間を示します。

計算についての詳細は、pctdemo_setup_mvar のコードを参照pctdemo_setup_mvar のコードを参照してください。

必要条件:

関連する例:

逐次的問題の解析

最初に、逐次的方法の例での計算が、「MATLAB 演算をタスクに分割」の例で導入されたモデルにどのように適合するかを見ます。逐次的方法の例での主な計算は、pctdemo_task_mvar の呼び出しによるシミュレーションの繰り返しです。各シミュレーションには数秒しかかからないため、こうしたシミュレーションを各タスクで多数実行します。関数 pctdemo_task_mvar は 1 回の関数呼び出しで多くのシミュレーションを実行できるため、これをそのままタスク関数として使用できます。

例の設定とデータの読み込み

この例では、既定のプロファイルに基づいて、使用するクラスターを識別します。新しいプロファイルを作成する方法および既定のプロファイルを変更する方法については、プロファイルのドキュメンテーションプロファイルのドキュメンテーションを参照してください。例の難易度または作成されるタスクの数を変更する方法については、「Parallel Computing Toolbox の例の設定をカスタマイズ」を参照してください。

[difficulty, myCluster, numTasks] = pctdemo_helper_getDefaults();

株の実績、ポートフォリオにおける重みなどの入力データを pctdemo_setup_mvar から取得します。繰り返しの数 numTimes は、difficulty パラメーターによって決定されます。詳細は、pctdemo_setup_mvar のコードを参照pctdemo_setup_mvar のコードを参照してください。

[fig, numSims, numTimes, stock, names, weights, time, confLevel] = ...
    pctdemo_setup_mvar(difficulty);

VaR と mVaR の計算に使用する信頼度を見てみましょう。

fprintf('Calculating VaR and mVaR at the %3.1f%% confidence level.\n', ...
        confLevel);
startTime = clock;
Calculating VaR and mVaR at the 95.0% confidence level.

作業を小さいタスクに分割

numTimes 回繰り返されるシミュレーションを numTasks 個のタスクに分割します。

[splitTimes, numTasks] = pctdemo_helper_split_scalar(numTimes, numTasks);
fprintf(['This example will submit a job with %d task(s) ' ...
         'to the cluster.\n'], numTasks);
This example will submit a job with 4 task(s) to the cluster.

ジョブの作成と投入

ジョブと、そのジョブ内のタスクを作成します。タスク i のタスク関数は、シミュレーションを splitTimes(i) 回繰り返します。詳細は、pctdemo_task_mvar のコードを参照pctdemo_task_mvar のコードを参照してください。

job = createJob(myCluster);
for i = 1:numTasks
    createTask(job, @pctdemo_task_mvar, 2, ...
               {splitTimes(i), stock, weights, time, numSims, confLevel});
end

ジョブを投入して完了するまで待ちます。

submit(job);
wait(job);

結果の取得

ジョブの結果を取得し、すべてのタスクが正常に終了したことを確認し、そのうえでジョブを削除します。タスクが正常に完了しなかった場合は fetchOutputs がエラーをスローしますが、この場合、エラーをスローする前にジョブを削除しておく必要があります。

try
    jobResults = fetchOutputs(job);
catch err
    delete(job);
    rethrow(err);
end

タスクの結果を収集します。

VaR = cat(1, jobResults{:, 1});
mVaR = cat(1, jobResults{:, 2});

すべての検証が完了したので、ジョブを削除します。

delete(job);

経過時間の測定

分散計算で使用される時間は、「限界バリュー アット リスクの逐次シミュレーション」の例において、同じ一連の計算を実行するためにかかる時間と比較する必要があります。経過時間は基礎となるハードウェアおよびネットワーク インフラストラクチャによって変わります。

elapsedTime = etime(clock, startTime);
fprintf('Elapsed time is %2.1f seconds\n', elapsedTime);
Elapsed time is 17.0 seconds

結果のプロット

pctdemo_plot_mvar を使用して、特定の信頼度におけるポートフォリオのバリュー アット リスクのグラフを作成します。このグラフには、同じ信頼度における、ポートフォリオ内の個々の株の限界バリュー アット リスクも表示されます。詳細は、pctdemo_plot_mvar のコードを参照pctdemo_plot_mvar のコードを参照してください。

pctdemo_plot_mvar(fig, VaR, mVaR, time, names);

この情報は役に立ちましたか?