【VTI】MATLAB、Pythonで株価予測 その42【周波数解析⑥】

【VTI】MATLAB、Pythonで株価予測 その42【周波数解析⑥】 株価予測
【VTI】MATLAB、Pythonで株価予測 その42【周波数解析⑥】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/stock-predict-matlabpython-backnumber/

はじめに

前回は現状のVTIチャートのまま、とりあえず周波数特性を出してみることで決定した。
注意点として、IFFTで抽出して波形の振幅がかなり小さいことが予想されるため、元のVTIチャートと比較する際はある程度増幅しておいた方が良いという点。

今回は、それのMATLABコードと結果を確認。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

とりあえず作って来たMATLABコード

太郎くん
太郎くん

と、とりあえず、それっぽい感じのMATLABコードは作って来た・・・。

フクさん
フクさん

ほう?
大丈夫そう?

太郎くん
太郎くん

コードとしては大丈夫だと思うけど、一応確認してもらえると助かるかな。

フクさん
フクさん

そこはちゃんと見よう。

太郎くん
太郎くん

というわけで作って来たMATLABコード。

VTI=csvread('VTI.csv'); % VTIチャート読み込み
N=length(VTI);
L=N/2;
x=linspace(-L,L-1,N);
ft=VTI;

% 変換前波形
subplot(5,1,1)
plot(ft)
title('f(t)');
grid();

% FFT後にローテーション
Fw=fft(ft);
Fw_tmp=circshift(Fw,L);
subplot(5,1,2);
mask = (-50<=x & x<=50);
plot(x(mask),abs(Fw_tmp(mask)));
title('F(\omega)');
grid();

% 拡大
subplot(5,1,3);
mask = (0<=x & x<=10);
plot(x(mask),abs(Fw_tmp(mask)));
title('F(\omega) expansion');
grid();

% 特定周波数のみ抽出
Fw_Filter=Fw_tmp;
Hz = 5;
Low = Hz-0.5;
High = Hz+0.5;
Fw_Filter( x< -High | (-Low < x & x <= 0) | (0 <= x & x < Low) | High < x)=0;

subplot(5,1,4);
mask = (-10<=x & x<=10);
plot(x(mask),abs(Fw_Filter(mask)));
title('F(\omega) Filter');
grid();

% IFFT前にローテーション
fx = ifft(circshift(Fw_Filter,L));
subplot(5,1,5);
plot(real(fx),'r');
hold on
max_fx=max(fx);
max_ft=max(ft);
plot(ft*(max_fx/max_ft));
title('f(x)');
grid();

コード確認

フクさん
フクさん

まぁパッと見た感じだと問題らしい問題は見受けられないな。

太郎くん
太郎くん

あと、前回の注意点で、IFFT後の波形の振幅はこのコードで調整してる。

max_fx=max(fx);
max_ft=max(ft);
plot(ft*(max_fx/max_ft));
フクさん
フクさん

なるほど。
それぞれの波形の最大値を取って、それの比率を元に増幅してるのね。
これだったら、IFFT後の波形の振幅がどうなっていても比較可能な状態にはなるね。
なかなかうまい工夫だと思うよ。

太郎くん
太郎くん

あ、珍しく褒められた!

フクさん
フクさん

(えー、普段から結構誉めてるつもりなんだけどなー。)

動作結果

太郎くん
太郎くん

そして動作結果がこれ。

MATLABによるVTIチャートの5Hz抽出及び比較、f(t)、F(ω)、f(x)
フクさん
フクさん

動作結果も問題は無いな。
動作結果は・・・。

太郎くん
太郎くん

そうなんだよねー。
これは自分で動かしたときにすでに感じていて・・・。

フクさん
フクさん

まぁここの追及はPython側を始末してからだな。

太郎くん
太郎くん

Pythonも僕がやるの・・・?

フクさん
フクさん

流れは全く一緒だし、以前のコードを元にすればできるとは思うよ。

太郎くん
太郎くん

まぁMATLABで書けたからちょっとは自信も付いた感じもあると言えばあるのだけど。

フクさん
フクさん

じゃ、次回までによろしく。

太郎くん
太郎くん

(いつものやり取りの逆パターン!)

まとめ

フクさん
フクさん

まとめだよ。

  • とりあえず、現状のVTIチャートに対してMATLABで5Hzを抽出するコードを作成。
    • IFFT後の波形の振幅の増幅は最大値を比較して、その比率を使用して増幅係数を決定。
  • 一応5Hzの抽出はできたが・・・。
    • ここらへんの考察はPythonコードを作成した後に実施予定。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました