1

私が行っている小さなプロジェクトに関するいくつかのヒントが必要です。私の目標は、オプションの価格設定に適用できる高速フーリエ変換アルゴリズム(FFT)の実装です。

最初の懸念:どのFFT?

さまざまなFFTアルゴリズムがありますが、最も有名なものはCooley-Tukeyです。これについての私の考え:これは論文や大きなプロジェクトではなく、アルゴリズムに関するコースであるため、最も単純なものを好みます。ただし、オプションの価格設定と互換性がある必要があります(ほとんどの場合とは対照的に、一般的な文献で参照されている画像/音声処理のアプリケーション)。したがって、提供される入力の形式によって異なります(アドバイスが必要です)。分数FFT、混基FFTなど、いくつかの改善点に精通しています。しかし、これらはかなり複雑で、最適化/パフォーマンス主導型のようであり、私のプロジェクトには関係ありません。

2番目の懸念:どの価格設定モデルですか?

ブラックショールズ(BS)は少し「フラット」すぎると思いますが、BSの後に登場したいくつかのモデルを知っています。したがって、上記と同じ目的で、最初はヘストンモデルを好みます。

多くの考慮事項があります、そして真実は私がただ木のために木を見ることができないということです。

いくつかの背景情報

私の経歴は数学(理論)の理学士であるため、フーリエ変換についてある程度理解しています。

目標は、オプション価格を計算するための実用的なFFT実装です。最速である必要はありません(極端な最適化は必要ありません)。目標は、選択したFFTを理解し、実際に機能するアプリケーションを用意することです。

それで、あなたは選択についていくつかのアドバイスを与えることができますか?

私はFFT+オプションの価格設定に関する多くの論文を読みました、グーグルの最初の数ページですべてのまともなヒットを言います。しかし、それらの研究ははるかに「より高い」原因で書かれました。

4

4 に答える 4

4

目標がFFTを利用することである場合、選択は不十分です。アフィンモデルのみが、スポット密度のフーリエ変換を取得するのに十分な情報を提供します。実際には、これはブラックショールズまたはヘストンを意味します。おそらくもう少しですが、「便利な」モデルはありません。

ヘストンのモデルには、(インプライドボラティナミクスに関連する)独特の機能があり、確率的ボラティカルモデルとしてはまったく役に立たないものになっています。フーリエ変換を介してバニラオプションの価格をセミクローズド形式で設定できるという事実のために、人気があると思います。現代のテクノロジーでは、これはもはや実際の資産ではありません。

したがって、オプションの価格設定に興味がある場合は、FFTをあまり試さずに、PDEまたはモンテカルロ法を使用することをお勧めします。使用できるモデルの範囲ははるかに興味深い(そしてはるかに価値のある)興味がある場合は、求人市場で)。

質問のFFT部分については、Cooley-Tukeyを最初から実装することは難しくなく、そこから始めることができます。もちろん、本番コードでは、缶詰のパッケージ(FFTWなど)を使用する方が適切です。

于 2012-05-05T21:26:21.270 に答える
3

私はこのトピック(オプションの価格設定に適用されるFFT)を数週間研究してきました。このテーマについては膨大な量の作業が行われていることが判明したため、Alexandreが示唆しているように無駄になることはほとんどありません。

私が見つけた最も読みやすい基本的な論文は、カーとマダンからのものです-www.math.nyu.edu/research/carrp/papers/pdf/jcfpub.pdf-しかし、Googleが見つけるさまざまな詳細レベルの他の多くのものがあります「オプション価格フーリエ」検索を介して。

近い将来、これをRでコーディングする可能性があります。テスト用のオプション価格データの適切なソースを見つけようとしています。

于 2012-08-24T09:20:02.127 に答える
0

FFTは、 DFTの最適化された実装にすぎません。KissFFTなどの既存のFFTライブラリを使用するか、これを最初から実装する場合は、FFTではなくDFTを実装することをお勧めします。これは、はるかに単純であり、パフォーマンスが高い場合を除いて、パフォーマンスが問題になることはないためです。データレートまたは大量のデータ。

于 2012-05-05T21:01:42.043 に答える
0

Matlabでのradix-2DecimationInTimeCooley -Tukeyスキームの実装を以下に示します。このコードは反復的なものであり、次の図のスキームを考慮しています。

ここに画像の説明を入力してください

再帰的なアプローチも可能です。

ご覧のとおり、実装では、実行された乗算と加算の数も計算され、「FFTのFLOPSの数」で報告されている理論計算と比較されます。

このコードは、Matlabが利用する高度に最適化されたFFTWよりも明らかにはるかに低速です。

また、ツイドルファクターomegaa^(interButterflyIndex * 2^(numStages - p))はオフラインで計算してルックアップテーブルから復元することもできますが、以下のコードではこの点をスキップしています。

% --- Radix-2 Decimation In Time - Iterative approach

clear all
close all
clc

N = 32;

x = randn(1, N);
xoriginal = x;
x = bitrevorder(x);
xhat = zeros(1, N);

numStages = log2(N);

omegaa = exp(-1i * 2 * pi / N);

mulCount = 0;
sumCount = 0;
tic
for p = 1 : numStages
    alpha = 2^(p - 1);
    butterflyStart = 1;
    while (butterflyStart <= (N - alpha))
        for interButterflyIndex = 0 : alpha - 1
            xhat(butterflyStart)          = x(butterflyStart) + x(butterflyStart + alpha) * omegaa^(interButterflyIndex * 2^(numStages - p)); 
            xhat(butterflyStart + alpha)  = x(butterflyStart) - x(butterflyStart + alpha) * omegaa^(interButterflyIndex * 2^(numStages - p));
            mulCount = mulCount + 4;
            sumCount = sumCount + 6;
            butterflyStart = butterflyStart + 1;
            if (interButterflyIndex == (alpha - 1))
                butterflyStart=butterflyStart + alpha;
            end;
        end;
    end;
    x = xhat;
end;
timeCooleyTukey = toc;

tic
xhatcheck = fft(xoriginal, N);
timeFFTW = toc;

rms = 100 * sqrt(sum(sum(abs(xhat - xhatcheck).^2)) / sum(sum(abs(xhat).^2)));

fprintf('Time Cooley-Tukey = %f; \t Time FFTW = %f\n\n', timeCooleyTukey, timeFFTW);
fprintf('Theoretical multiplications count \t = %i; \t Actual multiplications count \t = %i\n', ...
         2 * N * log2(N), mulCount);
fprintf('Theoretical additions count \t\t = %i; \t Actual additions count \t\t = %i\n\n', ...
         3 * N * log2(N), sumCount);
fprintf('Root mean square with FFTW implementation = %.10e\n', rms);
于 2017-02-17T08:03:18.863 に答える