MT4で機械学習系の実装で横道に迷い込んでいるわけですが、ベイズ線形回帰で大苦戦しておりまして、これ以上時間かけても、と思い。 暫定公開としました。
ほとんど説明を加えることができていないソースなので、これをどうしろ? という感想を持たれると思いますが。過去最高の中途半端な情報掲載です! ということで勘弁してください。
(参考にもならないと思いますのでちょいと動かしてみて ふーーん という感じでしょう)。
インジケータではありませんが、雰囲気として比較チャートを載せます。
ノイズに影響されにくいと言われているベイズの雰囲気は出ているかもしれませんが、細部を見るとちょいとおかしいです(残念ながら)。
多項式
チャートの赤いラインは月足の高値トレンドラインです。
なぜか多項式の予測ラインがうまく一致しました(単なる偶然かもしれませんが)。
ガウス過程
ベイズの線形回帰に近い予測になっています。
ガウス過程で組んだプログラムは基底関数の影響をあまり受けない(らしい)のと、プログラム内容も比較的シンプルなので、こちらをブラシアップできたら良いかな。 とベイズ線形回帰に挫折中ということもあり。 思っております。
さて、年初来安値更新のEURUSDですが
日足で見るとダブルトップ+ソーサートップになっています。
8月の雇用統計は(数値次第でしょうが) かなり荒れることも予測しておいた方が面白いかもしれません。
個人的にはZARJPYが少し持ち直しているので、これが上抜けしてくれるとうれしいのですが。
一挙に暑くなりました。 毎年のことなのですが季節の変わり目の腰痛が、今年は半月ぐらい遅いような気がしています。
来週も良いことがありますように
2014年7月27日日曜日
2014年7月21日月曜日
ガウス基底
今回も独り言に近い内容です
前回ガウス基底に苦戦中と書きました。
なんとか動くレベルにはなったのですが、インジケータとしての応用がまだまだピンと来ておりません。
チャートのスナップショットをガウス基底で変換し、それをガウス過程を前提にした計算というプログラムです。
ヨコ文字が多くてなんのこっちゃ? という感じなのですが、これはこれではまりどころかと。
プログラムサイトにソースコードを掲載しました。
話を少し戻しまして、最小二乗法多項式のプログラムです。
多項式の予測が継続するとどうなるのか。 つまり将来どう動くのか。 という禁断(というよりあまり 意味がないことは分かっているのですが)のラインを加えてみました。
時間足ではダブルボトムをつけた後に戻さずに、再度ボトムノック方向に動いています。
その通りになれば図の青線が示す方向(下)に向かい、トリプルボトム。 ということになるわけですが。どんなものでしょうか。
ウクライナ情勢がなかなか進まない様子で、しばらくはこのあたりでヨコヨコになりそうな気配でしょうか。
さて ガウス過程とタイトルに書きましたが、この○○過程と表現されるものが驚くほど多いです。
○○過程の定義は置いておくとして
ガウス過程は確率遷移が(多次元で)平均と分散で説明できる。 とあります。
多次元と言われても困ってしまうのですが、プログラムサイトに掲載したものではガウス基底(カーネル関数)を10基(次元)用いています。
Rの関数 outer(x , y, func)で3次元処理がぱっと思い浮かばないのに、10次元とか???? とお星さまが頭の中を浮遊しておる次第です。
来週も良いことがありますように
前回ガウス基底に苦戦中と書きました。
なんとか動くレベルにはなったのですが、インジケータとしての応用がまだまだピンと来ておりません。
チャートのスナップショットをガウス基底で変換し、それをガウス過程を前提にした計算というプログラムです。
ヨコ文字が多くてなんのこっちゃ? という感じなのですが、これはこれではまりどころかと。
プログラムサイトにソースコードを掲載しました。
話を少し戻しまして、最小二乗法多項式のプログラムです。
多項式の予測が継続するとどうなるのか。 つまり将来どう動くのか。 という禁断(というよりあまり 意味がないことは分かっているのですが)のラインを加えてみました。
時間足ではダブルボトムをつけた後に戻さずに、再度ボトムノック方向に動いています。
その通りになれば図の青線が示す方向(下)に向かい、トリプルボトム。 ということになるわけですが。どんなものでしょうか。
ウクライナ情勢がなかなか進まない様子で、しばらくはこのあたりでヨコヨコになりそうな気配でしょうか。
さて ガウス過程とタイトルに書きましたが、この○○過程と表現されるものが驚くほど多いです。
○○過程の定義は置いておくとして
ガウス過程は確率遷移が(多次元で)平均と分散で説明できる。 とあります。
多次元と言われても困ってしまうのですが、プログラムサイトに掲載したものではガウス基底(カーネル関数)を10基(次元)用いています。
Rの関数 outer(x , y, func)で3次元処理がぱっと思い浮かばないのに、10次元とか???? とお星さまが頭の中を浮遊しておる次第です。
来週も良いことがありますように
2014年7月13日日曜日
苦戦中につきネタなし
今週はガウス基底に苦戦しておりました。
Rで動くプログラムを一生懸命にMT4に移植しておるのですが、自作ライブラリがダメなのか、それとも根本的に間違っているのか。 どうも同じ結果になりません。
MT4からRやPythonを呼び出す方法もあるのですが、勉強の為に試行錯誤しておる次第です。
今週悩んだのは基底関数だけでなくて行列の外積処理でした。
行列の掛け算は内積と外積があり。 恥ずかしながら外積というのはコマンドを知っていても、それをCで作成するとなると、どうすれば良いのか。 と 途方に暮れた次第です。
Rだと外積は outer( a, b, FN) と書きます。 FNはFunctionを指定できます。
aとbがベクトルもしくは一次元配列ならば 行列[row][col] でイメージできるのですが、aとbが二次元配列となると.... 状態です。
outerは3次元グラフの作成に良く出てくるのですが、出力結果が3次元行列になるので、頭の中でX,Y,Zを思いながら ということです。
ネタもないのでもう少しRのことを書きます(R知っている人には面白くないですが)
たとえば
# design matrix
phi <- function(x) sapply(x,function(x)exp(-(x-seq(0,1,length=9))^2/(2*s*s)))
という処理があったとします。
最初の # design matrix はコメント
phi <- は phi =
function(x) は 引数xを取る関数を定義し、呼び出しは phi( 行列A) などで呼び出します。
sapply 引数リスト(ベクトルや行列)を処理し、その結果をベクトルで返す
次の( x, function(x) はsapplyが行う処理を定義
実際の処理は
exp(-(x-seq(0,1,length=9))^2/(2*s*s)) で、さらにseq(0,1,length=9)は0から1を等分した9つのベクトルを返します。 sは定数で別のところで定義されています。
> seq(0,1,length=9)
[1] 0.000 0.125 0.250 0.375 0.500 0.625 0.750 0.875 1.000
これをC(MT4)で書くと
double matrix[9];
for( int n = 0; n < length; n++){
matrix[n]=( 1/ (length -1)) * n;
}
と3行のプログラムになります。
MT4だと関数の戻り値にポインターが使えないので、seq(0,1,length=9)をいったん配列に出力して、その配列を次の処理に投入。 ということになるので、phi <- function(x) sapply(x,function(x)exp(-(x-seq(0,1,length=9))^2/(2*s*s)))がエラー処理を加えて100行近いプログラムになってしまいます。
処理が100倍早いかと聞かれると、良くわかりませんが、20倍ぐらいは早いのでは?
ぐだくだ書いて締めが見えなくなってきましたので、本日はここまで
来週はドル円が勝負どころでしょうか
Rで動くプログラムを一生懸命にMT4に移植しておるのですが、自作ライブラリがダメなのか、それとも根本的に間違っているのか。 どうも同じ結果になりません。
MT4からRやPythonを呼び出す方法もあるのですが、勉強の為に試行錯誤しておる次第です。
今週悩んだのは基底関数だけでなくて行列の外積処理でした。
行列の掛け算は内積と外積があり。 恥ずかしながら外積というのはコマンドを知っていても、それをCで作成するとなると、どうすれば良いのか。 と 途方に暮れた次第です。
Rだと外積は outer( a, b, FN) と書きます。 FNはFunctionを指定できます。
aとbがベクトルもしくは一次元配列ならば 行列[row][col] でイメージできるのですが、aとbが二次元配列となると.... 状態です。
outerは3次元グラフの作成に良く出てくるのですが、出力結果が3次元行列になるので、頭の中でX,Y,Zを思いながら ということです。
ネタもないのでもう少しRのことを書きます(R知っている人には面白くないですが)
たとえば
# design matrix
phi <- function(x) sapply(x,function(x)exp(-(x-seq(0,1,length=9))^2/(2*s*s)))
という処理があったとします。
最初の # design matrix はコメント
phi <- は phi =
function(x) は 引数xを取る関数を定義し、呼び出しは phi( 行列A) などで呼び出します。
sapply 引数リスト(ベクトルや行列)を処理し、その結果をベクトルで返す
次の( x, function(x) はsapplyが行う処理を定義
実際の処理は
exp(-(x-seq(0,1,length=9))^2/(2*s*s)) で、さらにseq(0,1,length=9)は0から1を等分した9つのベクトルを返します。 sは定数で別のところで定義されています。
> seq(0,1,length=9)
[1] 0.000 0.125 0.250 0.375 0.500 0.625 0.750 0.875 1.000
これをC(MT4)で書くと
double matrix[9];
for( int n = 0; n < length; n++){
matrix[n]=( 1/ (length -1)) * n;
}
と3行のプログラムになります。
MT4だと関数の戻り値にポインターが使えないので、seq(0,1,length=9)をいったん配列に出力して、その配列を次の処理に投入。 ということになるので、phi <- function(x) sapply(x,function(x)exp(-(x-seq(0,1,length=9))^2/(2*s*s)))がエラー処理を加えて100行近いプログラムになってしまいます。
処理が100倍早いかと聞かれると、良くわかりませんが、20倍ぐらいは早いのでは?
ぐだくだ書いて締めが見えなくなってきましたので、本日はここまで
来週はドル円が勝負どころでしょうか
2014年7月6日日曜日
最小二乗法プログラム 更新
ドル円がヨコヨコでやや頭を押さえられている様子です。
日足
そろそろどちらかに動いてくれないと面白味がない通貨になりそうです。
EAはまだLongをホールドしていますが、50Pipsぐらいまでには回復しましたが...
EURUSDは読みつらい。 というかダウとS&P、ナスダックともに絶好調なのでまだしばらくはドル買いが強いと思うのですが、それがいつまで? というと、そろそろ一服するのでは。
という常識が働いてしまい。
結果的にそうならずに読めなくなってきています。
雇用統計の後も大きく戻すことなく下げているので、来週も下目線で見ておくのが良いのでしょうか。
イギリスの株価が頭打ちになっている。という記事を見ました。
なにかねじれみたいなものが働く可能性もあるかもしれません。
さて、プログラムの話なのですが、最小二乗法のプログラムを更新しました(プログラムサイトに掲載)。
まだインジケータとしては使えない、素のレベルなのですが、いろいろと変更できるように作ったつもりですのでプログラムが好きな方は見てみてください。
プログラム → FXの損益 になかなか比例してくれないのが現実なわけですが、純粋にプログラムをいじっていることが好き。 というモチベーションが継続する限り、プログラムいじりは楽しい部類と考えています。
まるで庭いじりみたいなものでしょうか。
日経は先物が強く動き出しているのでしばらくは強いか?
来週も良いことがありますように
登録:
投稿 (Atom)