2012-05-05 15 views
1

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

最初の懸念事項:どのFFT?

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

第2の関心事:どの価格モデルですか?

私はBlack-Scholes(BS)がちょっとフラットなので、BSの後に出てきたいくつかのモデルを知っています。したがって、上記と同じ目的で、私は最初にHestonモデルを好むでしょう。

多くの考慮事項がありますが、真実は私が木の木を見ることができないことです。

いくつかの背景情報

は私のバックグラウンドは数学のB.Sc(理論値)であるので、私はフーリエ変換のいくつかを理解しています。

目標は、オプション価格を計算するためのFFT実装です。それは最速である必要はありません(極端な最適化はありません)。目標は、選択されたFFTを理解しようとしており、実際の作業アプリケーションを持っています。

あなたは選択肢に関するアドバイスをいただけますか?

私は、FFT +オプションの価格に関する多くの論文を読んだことがあります。たとえば、最初の数ページのグーグルでのまともなヒットをすべて言います。しかし、これらの研究はずっと高い理由で書かれていました。

答えて

2

私はこのトピック(オプション価格設定に適用されるFFT)を数週間研究しています。それは主題についての広範な作業があることが判明しているので、アレクサンドルが暗示するようにほとんど役に立たない。

私が見つけた最も読みやすい基本的な論文は、Carr and Madan(www.math.nyu.edu/research/carrp/papers/pdf/jcfpub.pdf)ですが、さまざまなレベルの詳細がありますが、 Googleは「オプション価格フーリエ」検索で検索します。

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

0

FFTは、DFTの最適化された実装です。私は、KissFFTのような既存のFFTライブラリを使用するか、実際にこれをゼロから実装したいのであれば、FFTではなくDFTを実装することをお勧めします。これははるかに簡単であり、データレートまたは大量のデータ。

3

FFTを使用することを目標とする場合は、選択肢が貧弱です。アフィンモデルだけでは、スポット密度のフーリエ変換を得るのに十分な情報が得られます。実際には、これはBlack-Scholes、つまりHestonを意味します。おそらくもう少しだが、「有用な」モデルのどれも。

Hestonのモデルは、(その暗黙の体積力学に関係する)特異な特徴を有し、確率的な体積モデルとしては全く役に立たない。フーリエ変換を使って半閉じた形でバニラ・オプションを購入することができるという事実のために、それが普及していると思います。現代の技術では、これはもはや本当の資産ではありません。

オプション価格に興味があるなら、私はあなたがFFTであまりにも頑張ってはいけませんし、PDEやモンテカルロの方法に変えてみることをお勧めします:あなたが遊べるモデルの範囲は、あなたが興味を持っている場合には、雇用市場でもっと価値があります)。

あなたの質問のFFTの部分については、ゼロからクーリー​​ - テューキーを実装することは難しいことではありません、あなたはそこに開始することができます。もちろん、プロダクションコードでは、(FFTWのような)缶詰パッケージを使うほうが良いです。

+0

あなたが答えてくれてありがとう。私の主な目標は、FFTを実装し、このアルゴリズムでアプリケーションを使用するアプリケーションを見つけることです。私はFFTが画像とサウンドの処理に使用されていることを知っていますので、オプションの価格設定で見つかったよりオリジナルのアプリケーションを探しました。 Heston Modelの欠点やオプション価格でFFTに書かれている論文がまだたくさんある理由についてもっと詳しく説明できますか?実際のデータが入力として使用されているときに役に立たない情報が生成されますか?もう一度お返事いただきありがとうございます。 – Cindy88

+0

@ Cindy88:Hestonの欠点については、例えばを参照してください。 http://papers.ssrn.com/sol3/papers.cfm?abstract_id=1493294また、金融業界が実際にやっていることや必要としていることについての手がかりがないので、無駄な紙(FFTだけでなく、ジャンプモデル、市場の微細構造など)の膨大な富が数学の金融に取り組んでいる人がたくさんいます。 –

0

私はradix-2デシメーションインタイムの実装を以下に提供しています MatlabのCooley-Tukey方式。コードは、反復一つであり、次の図のスキームを考慮:

enter image description here

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

実装では、実行された乗算と加算の数も計算され、How many FLOPS for FFT?で報告された理論計算と比較されます。

このコードは、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); 
関連する問題