今回は直前2時間を使いたいと思います。
また、あとで評価に使うため、trainとtestをまとめたデータも作っておきます。
31,442サンプルから120分幅を取ったので、問題なさそうですね。
フィボナッチリトレースメントの精度
●ドライバのバージョンで大きく変わるGeForce FXのパフォーマンス
リードテック「WinFast A300 Ultra TD MyVIVO」 |
ATIテクノロジーズジャパンもRADEON 9800/9600/9200ファミリの日本での発表会で、この問題を(名指しはしないものの)指摘していた。同社が指摘したのは、性能を重視したドライバでは、本来32bit浮動小数点精度で行なわれるべき処理が、16bit浮動小数点精度で行なわれているという点。同じシェーダの処理結果をRADEON 9600(RV350)とライバルGPUで比較。明確な描画のスムーズさの違いを見せ、内部24bit精度で処理するRV350に対して、ライバルGPUの処理は16bit精度で行なわれていることを示唆した。
実際、ドライバによっては、データ精度を犠牲にして性能を向上させているという同様の指摘は、過去1カ月ほどの間に、様々なレビューサイトにも上がっている。そのため、レビューサイトでは、2世代のドライバでのベンチマーク結果を掲載しているケースもある。また、あるGPU関係者は、高速なDetonator 43.45では、DirectX 9の規定に反しているため、MicrosoftのWHQLの認定は通らないはずだと指摘する。大論争になりつつあるわけだ。
●32bitだと低速で16bitだと高速なGeForce FX
実は、ドライバでの話題が出るよりもずっと前から、GeForce FX系アーキテクチャではデータ精度によって処理性能に大きな差が出ることは、知られていた。DOOMの開発者であるid SoftwareのJohn Carmack氏は、今年頭に「Plan John Carmack」でNV30とR300の性能について言及していたが、その中ですでにモードによる性能の違いを指摘している。
それによると、OpenGL ARB(Architecture Review Board)2のパスを使った場合にはNV30はR300(RADEON 9700 Pro)よりかなり遅いが、NV30に最適化したベンダースペシフィックなモードを使った場合にはずっと速くなるという。その理由は、R300は常に同じ精度で処理するが、NV30はパフォーマンスの異なる精度を内部的にサポートしているからだという。
この件は、Carmack氏だけでなく、多くの業界関係者が指摘する。また、NVIDIA自身も、GeForce FXアーキテクチャでは「16bitの方が高速に走る」(Geoff Ballew氏,Product Line Manager)ことを認めている。3月に開催されたGDC(Game Developers Conference)でも、NVIDIAはパフォーマンス上の理由から、必要がない限り32bitではなく16bitを使うように推奨していた。
●演算ユニットの精度での選択の違い
DirectX 9の最大の特徴の1つは、ピクセル処理が整数だけでなく、浮動小数点に拡張されたこと。つまり、サーフェイスフォーマット(=データタイプ)が拡張され、浮動小数点精度が加わった。DirectX 9の規定する浮動小数点データタイプは、各色16bitのABGR16f、各色32bitのABGR32fの2種類。いずれも4個ずつのデータを同時に処理するSIMD(Single Instruction, Multiple Data)なので、換算すると64bitと128bitになる。
つまり、DirectX 9世代GPUでは、16bit(64bit SIMD)と32bit(128bit SIMD)の浮動小数点演算をサポートする必要がある。これはOpenGL 2.0についても同じだ。
例えば、ATI TechnologiesとS3 Graphicsは、内部では24bitで処理している。ATIはフラッグシップのRADEON 9700/9800(R300/R350)のPixel Shaderに8個の24bit浮動小数点演算ユニットを実装した。S3 GraphicsのDeltaChromeも同様に8個の24bitユニットを持つ。
それに対して、NVIDIAはまったく異なる方法を採った。GeForce FXファミリでは、32bit内部精度で処理を行なう。つまり、32bitから24bitへデータ精度を落とすことがない。いいことだが、これにはトレードオフがある。それはユニット数と処理速度だ。NV30では4個の32bit演算ユニットしか搭載していないとNVIDIAは説明する。つまり、Pixel Shaderの精度は高いがユニット数は他社のフラッグシップGPUの半分ということになる。
NVIDIAが演算ユニットを半分に減らしたのは、搭載できるトランジスタ数の制約からだと思われる。24bit(96bit SIMD)演算ユニットと32bit(128bit SIMD)演算ユニットでは、ユニットのコスト(トランジスタ数とダイサイズ)に大きな違いがあるからだ。
推定されるPixel Shaderのアーキテクチャの違い |
●GeForce FXでは16bitユニット2個で32bit演算か?
では、なぜこのGeForce FXアーキテクチャの場合、精度を16bitに落とすと性能が高くなるのか。NVIDIAのGeoff Ballew氏(Product Line Manager)は「メモリ帯域、レジスタスペース、テンポラリストレージなどすべての点において16bit浮動小数点は(32bitより)少なくなる。だから、ずっと高速になる」と説明する。しかし、実際にはそうした差から推測されるよりも、ずっと大きな性能差が精度によって生じているように見える。
ここから考えられるのは、NVIDIAのPixel Shaderが、実は16bit(64bit SIMD)ユニット2個で32bit(128bit SIMD)演算を行なっている可能性だ。32bitユニットが、16bit演算を行なう2つのユニットに分割できると言い換えてもいい。こうした実装は、実は珍しいことではない。CPUの世界では昔から行なわれてきたことで、今でも多用されている。ごく普通の手法だ。
もし、GeForce FXファミリのPixel Shaderがこの実装方法を取っているとすると、16bit時には演算ユニット数は2倍に増えることになる。それなら、データ精度によって性能が大きく変わることも納得できる。
専業トレーダーが明かす「FXで勝てる」フィボナッチの使い方
ドゥオモ広場にあるフィボナッチさんの像 wikipediaより
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233….
0 + 1 = 1
1 + 1 = 2
1 + 2 = 3
2 + 3 = 5
3 + 5 = 8
最初のいくつかの数字を除き、ある数字と次に続く数字の関係を見てみると面白い関係にあります。
どの数字も次に続く数字の 0.618 倍となっているのです。
たとえば、144 ÷ 233 = 0.618 となります。
それはどこをとってもそうなっています。
また、ある数字と2つあとの数字を比べると別の法則があります。
どの数字も、2つ後の数字の 0.382 倍になっているのです。
なぜFXでフィボナッチ数列を使うの?
まずは、自然界にあるものがフィボナッチ係数やフィボナッチ比率になっているというのです。
例えば花弁の数とか、雪の結晶の比率とか、木々の葉っぱの縦横の比率なんかがフィボナッチになっているというのです。
さらに、ピラミッドやスフィンクスなど、人間が作ったとは思えない神秘的な建造物の構造に現れる比率も「フィボナッチ比率」になっているそうです。
FX市場や株式市場の値動きはどうでしょうか?
相場というのは、不特定多数の参加者の感情が渦巻いた結果として起きる現象です。
ある意味ひとつの自然現象ととらえても良いかもしれません。
相場に自然現象的な要素があるのであれば、
チャートに現れる値幅の比率が「フィボナッチ比率」になる傾向があってもおかしくないのではないか?
という考え方が、フィボナッチを利用するトレードの根拠です。
フィボナッチを使ったトレード手法に使われるフィボナッチ比率
フィボナッチリトレースメントに使われる比率
フィボナッチリトレースメントとは、押しや戻しの比率のことです。詳しくはこの後で解説します。
0.フィボナッチリトレースメントの精度 236、0.382、0.500、0.618、0.フィボナッチリトレースメントの精度 786
このうちで主流なのは0.382、0.500、0.618の3つです。
フィボナッチエクステンション(フィボナッチエクスパンション)やエクスターナルリトレースメントに使われる比率
トレンド相場がどこまで伸びるか?を計る比率です。
1.272、1.618、2.618が良く使われます。
その中でも一番よくつかわれるのは1.618です。
ほとんどの業者のチャートソフトがフィボナッチツールを装備しています。
ですから誰でも一瞬でチャートにフィボナッチのラインを表示できます。
もちろん、MT4もフィボナッチツールを標準装備しています。
MT4の5つのフィボナッチツールが気になったので、トレードに利用できるか検証してみました
図を見ると、ちょうど800.0の時点で流れが変わって一気に円高が進んでいることが分かります。ですが、起点の場所を何度も変えたりして、やっとできたという感じです。後から見れば分かるですが、やはり タイムゾーンだけでトレード判断をするのは難しそうです。
「もしかしたら、流れが変わる可能性がある」ぐらいの感覚でちょうどいいと思います。
エキスパンションを引いたのは103.079を付けたあたりですが、最終的にはフィボナッチ比率161.8%まで急上昇しました。ランダムに動いているように見える相場でしたが、フィボナッチ比率が確実に意識されているように思えます。
61.8%( 一番下の青線:FE 61.8 )を実体で超えた時間足で買いエントリーを意識し、61.8%で反発したのを確認しました。さらにGMMA(複合型移動平均線:ガンマ)も良い方向になっていたので、新規買いポジションを持ってみます。
エントリー例
エントリー根拠 | フィボナッチ61.8%で反発したこと,GMMAが良い形になったこと。 |
エントリー価格 | 106.650円 |
ロット数 | 0.10(1万通貨) |
目標価格 | フィボナッチ比率161.8%(110.800円) | フィボナッチリトレースメントの精度
実際の決済価格 | 110.500円(節目の価格だったため) |
獲得Pips | 385 pips |
利益 | 38,500円 |
フィボナッチに関する便利機能を紹介します
MT4でフィボナッチをワンクリックで利用する設定方法
ここでは、ツールバーには十字線やトレンドライン、水平線などを使ってみます。
多変量RNNでFXレートの予想精度は上がるか?【Google Colaboratory】
これはカラムの説明がなかったのですが、4つの会社が出しているドル円の1分ごとのレートを並べたもの、と推測できますね。
レートを出す会社も、真のレートがわかるわけではないので、各社で「このくらいでしょう」みたいなものを考えて決めてるんだと思います。
trainは31,442サンプル、testは59サンプルありました。
RNNは変数が0~1の間を取っていないとうまく動かないので、あとで正規化をしてあげましょう。
今回は深層学習のモデルを使います。
時系列データなので、LSTMとQRNNの比較もします。
これらの手法の中身は、先人たちがたくさん書いてくださってるのでそちらをご参照頂ければ。
やってみる
ノートブック作成
- Googleアカウント作成
- Googleドライブ内で「右クリック>その他>アプリを追加」からColaboratoryを追加?(ちょっと曖昧なのでググっていただければ)
- お好みのディレクトリで右クリック>その他>Colaboratory
Kaggleからデータ入手
ここの「4. Google ドライブから Colaboratory 上に kaggle.json をダウンロード」までを行い、データ入手準備が整います。ありがとうございます。
ダウンロードは
!kaggle datasets download -d team-ai/foreign-exchange-fx-prediction-usdjpy
のように入力するとできます。
参考記事そのままでやっていると、
/content/.kaggle/datasets/team-ai/foreign-exchange-fx-prediction-usdjpy
にダウンロードされると思います。
ファイル名にスペースや括弧が入っていて扱いずらいので、名前を変えてあげます(お好みで)。
!mv /content/.kaggle/datasets/team-ai/foreign-exchange-fx-prediction-usdjpy/FX_USDJPY_201701till01312259_Train\ -\ USDJPY_201701till01312259\ \(1\).csv /content/.kaggle/datasets/team-ai/foreign-exchange-fx-prediction-usdjpy/FX_USDJPY_train.csv
!mv /content/.kaggle/datasets/team-ai/foreign-exchange-fx-prediction-usdjpy/FX_USDJPY_201701312300_Test\ -\ USDJPY_201701312300\ \(1\).csv /content/.kaggle/datasets/team-ai/foreign-exchange-fx-prediction-usdjpy/FX_USDJPY_test.csv
RNNの準備
このQRNNを入れる際、theanoがインストールされていないと怒られる場合は、
!pip install theano
でインストールしてあげましょう。
(おまけ)Googleドライブとのファイル共有準備
Colaboratoryは一定時間でランタイムが閉じてしまい、それまでの変数やローカルファイルが消えてしまいます。
必須ではないですが、ドライブとのファイルのやり取りを行う関数を準備しておくとよいかもしれません。
download_fileのid引数は、ドライブのダウンロードしたいファイルを右クリックして、「リンクの共有」を選択したときに出てくるURLの、 id= の後の部分です。
これで環境準備は完了です!
インポート・データ読み込み・整形
次に正規化です。
Scikit-learnのMinMaxScalerを使いましょう。
testデータも正規化しないといけないので忘れずに。
こんな感じになりました。
これをさらにRNN用の入出力に整形しましょう。
(実際の取引などに使う場合は、数分後とか数時間後とかの方が適切ですね。)
今回は直前2時間を使いたいと思います。
また、あとで評価に使うため、trainとtestをまとめたデータも作っておきます。
31,442サンプルから120分幅を取ったので、問題なさそうですね。
一変量の場合は最初の列のプライスを学習しています。
多変量の場合は全て使って学習し、評価の時に最初の列のプライスのみを見ます。
予測の際は、直前2時間を使うことにしました。testの予測も直前2時間を使っているので、説明変数は学習に使ったものが含まれていることに注意してください。
また、今回はtrainデータで学習・testデータで予測という2段階になっていますが、使っているモデルは追加学習が可能です。
実用の際には、新たなデータが来たらそれに合わせてモデル更新することもできますね。
学習誤差と予測誤差をそれぞれ出します。
これは ちょっと疑いたくなるくらい 良い結果ですね。。。
フィボナッチリトレースメントの精度
testのプロット結果はこの通り。収束判定が甘かったかもしれません。
とはいえRNN同士、QRNN同士では利用した変量の数以外は同条件でやっています。
今回のタイトルである、
【自然界の法則】仮想通貨(ビットコイン )をフィボナッチで価格予測する方法
初心者A
初心者B
仮想通貨の投資においてフィボナッチはどんな役割を果たす?
元々は、「1 1 2 3 5 8 13 21 34 」というように、前の数字と後ろの数字を足し算すると、3番目の数字(次の数字)となる数列の理論であり、植物や人体、芸術、台風、宇宙と自然界にもその数列は当てはまるとされています。
相場を突き動かすものは、 「人間の心理」 であることから、偶然か、否か、 フィボナッチによって算出される比率の価格帯は、チャート上でも重要な節目 となるため。
のラインが意識され、「 リトレースメント(戻し比率)がどのくらいになるか フィボナッチリトレースメントの精度 」を推測可能。
・フィボナッチ・チャネル
・フィボナッチ・エクスパンション
・フィボナッチ・タイムゾーン
・フィボナッチ・グリッド
プロおに
時間軸に注目 !フィボナッチを活用して相場分析を深める方法を紹介
- トレンドの把握&投資を検討する時間軸を決める
- (仮想通貨に特有) 実体ローソク足&ヒゲの両方からフィボナッチを引いてみる
- 予測した価格帯で複数の売買シナリオを立てておく
トレンドの把握&投資を検討する時間軸を決める
より直近の価格を意識したトレードとなり、 見ている時間軸としては短期・中期 となりますね。
大きな時間軸においてフィボナッチを引いており、「トレード」という短期の時間軸ではなく、 長期の時間軸で行う「投資」において有効的な分析 が行えそうであることが、分かりますね。
コメント