先週は1本のBarの高値、安値の分散を書きました。
今週も同じノリでBar(価格)の分布についてのメモです。
例によって目的が明確でないので、それで? という落ちのない内容になっていますので悪しからず。
1.価格帯をどう区切るか
普通ならば切の良い数字 1.3600とか だと思うのですが、価格データから一定の数をサンプリングした方がプログラムが楽なので、先に区切る数を決めてしまいます。
今回は20にしました。
そしてチャートで表示されている部分の高値と安値を単純に20等分して区切る幅を決めています。
2.頻度をカウントする
価格テーブル(20等分した価格が20並んでいる)と調べる価格(今回はCLOSEのみ)を照らし合わせて、数を数えれば頻度が求まります。
これは単純にヒストグラム作成をプログラム(MT4)で計算しているだけなわけですが、実はこれが目的ではなくてカーネル変換のアプローチ(今回は単純な距離計算)を少し取り入れます。
先に結果を書きますと
(注意:横軸は価格ですが高い→安いと通常の逆表示です)
頻度(通常のヒストグラム)とカーネル変換(今回は距離計算)は同じ結果となっています。
グラフのスケールがそれぞれ違うのですが、見たいのは分散度合い(ばらつき状態)なので、同じことが表現されています。
距離計算は
ヒストグラムの表示単位価格 1.3508,1.3516,1.3524 .... とCloseの価格の差の二乗にマイナスを乗じ、それをexp()計算しています
考え方は ガウス分布(または正規分布)の考え方です。
ツール作成を目指すのであれば下のようなインジケータが考えられるわけですが、残念ながら今回はそれが目的ではなく、かつ、結構たいへんそうなので計算だけを行うプログラムの試験で終わっています。
ヒストグラムのヨコヨコ表示(イメージ)
上図は画面切り貼りしているので、完全に作り物です(笑)。
ただし、少しまじめに見ると山が2つあって、もみ合っている価格帯がなんとなく見えてきませんか。
作りたて(要はほとんどテストしていません)のプログラムは こちらのリンクページからダウンロードしてください。 Download Link Price_Distribution.mq4 というファイル名です。
もう少しちゃんとテストしたらプログラムサイトに移す予定ですが、雰囲気だけでもということでソースコードのみ掲載しました。 このバージョンでは価格テーブルをInit内でのみ作成していますので、チャートが進み、チャート内の高値、安値が更新されても、計算には反映されません。
今回は時間がなくてMT4のBuild 6xx版のみとなっていますのでご注意ください。
PS)
行列計算のライブラリを作っているのですが、動的に二次元配列を定義する術がなく2週間悩んでいます。
正確には行列の 行は ArrayResizeで変更できるのですが、 列数が変更できません。
C言語でMT4とは別に作成すればできるはずなのですが、そうすると配列管理を全部外だしにすることになりそうで躊躇しています。
別な方法としてはMT4の中で独自のアルゴリズム(二次元配列も1次元配列でデータを持つ)。という方法がありそうですがまったくスマートではないことが想像されるので却下となりました。
来週も良いことがありますように
EURUSD、USDJPYともに多少幅の広いレンジだと見ております