バックナンバーはこちら。
https://www.simulationroom999.com/blog/stock-predict-matlabpython-backnumber/
はじめに
前回は、ATLABとPython(Numpy)のフーリエ変換、逆フーリエ変換for文無し版の動作確認を実施。
共に問題無く動作した。
for文無しにはできるが、元のfor文あり版で今後は進めて行く。
前回まではシンプルなsin波の合成波形だったが、
今回からは、具体的な個別株のデータを入れていく。
登場人物
博識フクロウのフクさん
イラスト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
今後の予定
とりあえず、FFTじゃない本当のフーリエ変換ベースのコードはできたわけだけど、
今後はどうする?
もう個別株を入れちゃう?
そうだね。
まずは、フーリエ変換後の逆フーリエ変換をして元波形に戻るか。
その後に、抽出したい周波数範囲を特定。
最後にFFT、IFFTでやったのと同じく極大値、極小値のタイミングとその時の単価特定。
って感じだな。
まぁ着実に固めて行った方が良いね。
なんかしくじってる可能性もあるし。
しかし、この手のプログラムでしくじってるとかあると問題特定とかできるのか?
基本は数式から見直すことになるね。
そうだよねー。
ブレークポイント貼ってステップ実行で確認とかってタイプのデバッグにはならないよねぇ。
それができないことが欠点とも言えるし、
それをしなくても良いことが利点とも言えるから、
どっちもどっちだな。
(これを利点と言えるレベルになりたい・・・。)
MATLABコード修正箇所
で、今回もコード修正が入るのかな?
ほぼ変化はないな。
MATLAB内で波形を作るか、csvファイルから読み取るかの差だけだな。
念のため差分を書くとこんな感じだ。
L=pi; % 波形の期間(-L~L)
w_max = 20; % 取りたい最大周波数
x=linspace(-L,L,255);
ft=sin(x)+sin(3*x)+sin(7*x); % 変換用波形読み込み
N=length(ft); % 波形のplot数取得
↓
L=pi; % 波形の期間(-L~L)
w_max = 125; % 取りたい最大周波数
stock=csvread('TM1.csv'); % 変換用波形読み込み
N=length(stock); % 波形のplot数取得
ft=stock-mean(stock); % 波形を行ベクトルへ
ft=ft';
csvreadでよむだけだね。
で、csvの並び的に列ベクトルになるから、
ft=ft’
で行ベクトルに転置してるだけか。
そうそう。
これで前回のコード構成を変更せずに使いまわせる。
いつもそうなんけど、
列ベクトルをデフォルトとして扱うべきか
行ベクトルとデフォルトとして扱うべきかは悩むね。
数学的には列ベクトルをデフォルトとすべきっぽいが、
MATLABのベクトル、数列を生成する機能のほとんどが行ベクトルなんだよね。
だから、MATLABに於いては行ベクトルをデフォルトとした方が利便性は高いな。
なるほど。
ツール側の性格に合わせた方がトータルでは楽そうってことか。
まとめ
まとめだよ。
- 今後の予定について検討。
- 個別株の波形に対して以下を実施。
- フーリエ変換後の逆フーリエ変換をして元波形に戻るか。
- 抽出したい周波数範囲を特定。
- 極大値、極小値のタイミングとその時の単価特定。
- 個別株の波形に対して以下を実施。
- MATLABの場合、行ベクトルをデフォルトとした方が利便性が高い。
バックナンバーはこちら。
コメント