ブログトップ 記事一覧 ログイン 無料ブログ開設

とあるMetaTraderの備忘秘録 RSSフィード

忙しいです。ネタもないし・・・

2011-10-06

BTLMインジケータで計算できる他のモデル

テクニカル指標が「数学的に意味を持つ」こととマーケット予測能力は全く関係無い…という話を書いておきますかね..^^;

どんなテクニカル指標にも、その計算式の背後には、必ず何らかの値動きのモデルを想定しています。(モデルというよりも、値動きのどんな特徴を抽出したいのか?という目的があります..と言うべきかな。


仮に市場での資金の流れは、物理的な制約、取引限度額的な制約で一定速度でしか動けないとしましょう。その場合、それにつられて動く価格も極めて直線的な動きをすることが多いはず..と考えたとします。

f:id:fai_fx:20111005170122p:image

↑そんな市場での価格予測は、線形近似を使うのがおそらく妥当でしょう。個々の価格には意味の無い動き=ノイズが含まれているので、それを取り除いて本来の直線の動きを抽出するわけです。


ところが、別の人は、そんなマクロの話は短期のデイトレには当てはまらない、投機市場では買いが買いを呼び、売りが売りを呼んで値動きは加速し、放物線を描くように動くのだ..と考える人もいます。

f:id:fai_fx:20111005184407p:image

↑その前提では、2 次多項式の近似曲線を使うことになります。(ちなみに、この後の値動きは上昇してゆきました..が、ただの偶然でしょう


こうして、全く同じチャートに対して下がるという予測(上図)と上がるという予測(下図)が、(与えられたデータに対して数学的に意味のある形で)計算できてしまいました。マーケット予測の優劣は、どちらのモデルが市場の実態に合っているか?を統計的に調べることで判明しますが、それはテクニカル指標の計算式の性能の良し悪しとは別の問題になります。テクニカル指標は、単にある特定の仮定のもとで意味のある値を算出するだけで、仮定(仮説)が正しいかどうか?とは関係ないのです。




そう理解してもらった上で、今日の本題のBTLMインジケータで計算できる他のモデルですが、R の tgp パッケージがサポートしているモデルであれば少しの修正で簡単に計算できます。

RExecuteAsync(R, "model <- btlm(X=X,Z=hist...
↑この一行を
↓次のいずれかに書き換えると計算モデルが変わります。
RExecuteAsync(R, "model <- bcart(X=X,Z=hist...
RExecuteAsync(R, "model <- btgp(X=X,Z=hist...
RExecuteAsync(R, "model <- bgp(X=X,Z=hist...
他にも blm,btgpllm,bgpllm があります。

以下は実際に変更して計算した例です。


f:id:fai_fx:20111005170114p:image

↑bcart は、価格水準が非連続に変わるようなモデルで、階段状に近似されます。

f:id:fai_fx:20111005170112p:image

↑btlm は、価格が折れ線状に動くモデルです。私は今でもこのモデルが一番裁量では使いやすいのではと思ってます。仮に価格が曲線状に動いたとしても、複数の直線になるだけのことです。それから、人間のパターン認識は直線と相性がよいのかもしれない..とも思ったりします。

f:id:fai_fx:20111005170110p:image

↑btgp(もしくは bgp) は、価格がうねうねと動くとするモデルです。正しくは、ガウス過程(Gaussian processes)に従っていると言うべきですが、興味のある人は自力で調べてください^^;直近の値幅予測には bgp が良いのかな?と思ったりしますが特に検証はしていません。


BTLMインジケータの愛用者が少なからずいらっしゃるようなので、改造するとこんなカタチもできるよ〜と少し紹介してみました。

(..べ、べつに コミPo! を試してみたかった..わけじゃないんだからねっ

2011-09-25

BTLMのTimeScale変更対応。

BTLM の擬似MTF対応版として、計算点のサンプリング間隔を調整できるようにしました。TimeScale = 3 を指定すると、3本毎の値で計算されるので、3倍の時間足に相当する BTLM を表示できます。Offset = 10 を指定すると、10本前の Bar を起点に計算するので、過去の BTLM を見ることも出来ます。

f:id:fai_fx:20110925130624g:image

↑赤い点が BTLM の計算に使われています。(赤い点は!!TS-SamplingPoint.mq4 で表示できます。)


BTLM は、人間の感覚に近いカタチでトレンドを認識すると書きましたが、実際はかなり自由度を制限された範囲内でトレンドを視覚化します。人間のパターン認識は、スケールフリーというか、大きさに対する自由度が高く、小さなトレンドから大きなトレンドまで自在に認識してしまいます。その為、大きな上昇トレンドに乗って買いポジションをとっても、小さな下落トレンドで利食いしてしまったり、逆に大きな下落があっても、さらに大きな上昇トレンドでの一時的な戻りと勘違いして、ナンピンして損切りの判断が遅れます。いわゆる、ポジション保有によるバイアスの影響を受けてしまうわけです。


BTLM を使えば、常に一定のスケールで観察できるので、一部の裁量トレーダーさんに愛用されているのかな..なんて思ってます。

2011-09-24

非同期で実行したRの計算終了を音で知る。

MT4の背後で非同期に R を呼び出すインジケータの場合、計算が終了した際に音が鳴ると便利です。

休日でも、Metatrader Tick Senderを起動しておけば画面更新されるので、R から直接 音を鳴らす必要性は低いのですが、リアルタイムに分かると気分的に嬉しいものです..^^;


R から音を鳴らすコードのうち、alarm() や、cat("\a") はダメで、以下の tkbell() が使えます。

library(tcltk); tkbell();

↑ tcltk パッケージを事前にRGuiからインストールする必要があります。

RExecuteAsync(R, "model <- btlm(X=X,Z=hist,verb=0,BTE = c(2000, 55000, 2),R=3) ; library(tcltk); tkbell()");

↑非同期実行のコードの最後に追記します。


ちなみに、以下のコードを追記すれば、直接 wav ファイルを開くことも可能です。

shell.exec(\"C:/File Path to WAV/Qbey'sTheme.wav\")

2011-09-23

aws.gaussianで、ラインが一定量移動した時にアラートを鳴らす。

ミッシェルポルナレフ 2011/09/19 05:14

fai様 すばらしいインジをありがとうございます、

お気に入りは怪談の方の!!R-aws.gaussian-Indです。

5分チャートで順張りに使えないかとテストしたところ

まるでカタパルトのように押し目、戻りにピタッと君でした。

じ〜 2011/09/19 18:03

faiさま 

!!R-aws.gaussian-Indを見つめていて思ったんですが、アラートを付けては頂けないでしょうか?

ラインが移動した時に鳴ると、うれしいです。

よろしくおねがいします。

aws.gaussian は、常にレベルが微動しているので、移動した時にアラートを鳴らすのは無理ですが、前回のアラート時から AlertPips 分だけ動いた時にアラートを出すようにしたものを、ここに用意しました。(ついでに、15秒に1回計算する等工夫して負荷を減らしています。)


↓aws.gaussian は、水平ラインが、過去のある程度離れた時刻のラインと同じ高さになるように引かれてゆくので、押し目や利益確定の目安に役立つのでは?と思って作っています。

f:id:fai_fx:20110923225547g:image

2011-09-20

BTLMプチフリーズバグ対策。。orz

BTLMを非同期で計算しているのに、MT4が固まるのはおかしいなと思って調べたら実装間違いがありました。修正版をここに置きました。

f:id:fai_fx:20110920002130p:image

RExecuteAsync()を呼んだら、RIsBusy(R)のチェックが終わらない限り、他のRの処理(RGetBool)をしてはいけなかったのでした..orz

なので、実行順序を入替えています。


今日は1日 BTLM の動きを、普通の線形回帰指標と比較して見ていましたが、単純な線形回帰指標では算出できない正確さで直近のトレンドとボラティリティ(値幅)を描画してました。BTLM 自体はただの解析ツールにすぎないので、トレンドが十分に長く継続しやすい通貨ペアや時間足を選べば、トータルで勝ち越すことも現実的かな...なんて思ったりします。

BTLM の活用方法を思いついた人や実際役立った人からのコメント歓迎です。



そろそろ大多数の人が導入に成功したと思うので、マニアックな話を少々..。

f:id:fai_fx:20110920002129p:image

公開時に、「まったく同じ価格データで計算しても異なる結果を返す」のは、内部で MCMC(マルコフ連鎖モンテカルロ法) という乱数を利用したシミュレーションを行っているからだと説明しました。当然ながら、その乱数シミュレーションの回数を増やせば、毎回得られる結果が同一になりやすくなります。

その調整方法は、

BTE = c(2000, 15000, 2),R=1

↑これを書き換えます。

上の表記では、「15000回計算し、最初の2000回分を破棄し、得られた結果のうちの2つに1つを採用する」というプロセスを1回(R=1)行う。

という定義になります。

BTE=c(2000,55000,2),R=3

↑このくらい増やすと計算時間はかなり掛かりますが、入力データに対してほぼ同じ結果が得られやすくなります。PCスペック次第では、R=1,2,3の順に試した方が無難でしょう..。論文では、10万回計算して、最初の5000回を破棄..なんて例もありますが、どれくらいが適切なのかよく分からないので、特に気にならなければデフォルトのままでも構わないと思います。