2013年11月23日土曜日

tankaiki toolの挙動補足

今朝起きてなんか引っかかっておりまして PCの電源を入れたら、昨晩のtankaikiの説明が不満足であった ということを気が付きまして 自分のもやもやを解消する為に しつこい ですが

tankaiki toolの挙動について再度説明します

PCの電源を入れてMT4を起動すると、前回の環境がそのまま表示されるはずです
EURUSD 1Hです

ここでtankaiki toolをリロードすると

異なる波形が表示されています。(かならずそうなるわけではありませんが)特に直近の部分が変わることが多いです。

プログラムに興味が無い方は、この2つの図でリロードをご理解いただければ問題ありません。


以下はプログラム内容を文章で表現しておりますので、興味の無い方は読み飛ばして頂いて問題ありません。

1.なぜこうなってしまうのか

(昨晩の繰り返しになりますが)、toolが初期化(init()部が動作)されると、最新のBarからパラメーター Start の本数分さかのぼったBarの時間を取得します。
この時間が計算の起点となります。

その起点からBar単位で単回帰計算を行います(1本単位で増やして計算をしていきます)。
パラメーター MultiとMLを掛けた数までは、単純に計算を続行し、単回帰線と、その平行線を上と下に引いて行きます。

計算対象のBar数がMultiとMLを掛けた本数以上になると、ブレイク判定を毎回行い、高値もしくは安値トレンドラインとのブレイク判定を行います。

ブレイク判定でブレイクが発生すると新トレンドになったとして、計算の開始点を新トレンド発生点、もしくは直前トレンドの最高値もしくは最安値のいずれかに(これはパラメーターで指定可能)に移動させます。

この処理を繰り返し、計算対象のBar数がMultiとMLの掛けた数に満たない状態(つまりブレイクを判定しない)になるまで処理が進みます。

オンライン状態では常に最新のBarまで計算をおこなっていますが、この処理は毎回Start分遡ったところから行うのではなく、現在トレンドの開始点から計算を行います。

普通の処理では Barの総数 Bars と処理したBars Indicatorcounted()を用いてループ処理を行い未処理のBarのみを再計算させるわけですが、tankaiki toolではこの方法を採用していません。

ですのでプログラムの初期化(init()部)が動作しないと、最新の情報を反映していない状態での計算結果が表示されたままになります。

2.どうして そうなっているのか

理由は単純明快でして、人間と同じ判断をプログラム上で実現することが、今の私の技量では無理でして、無理ならば無理で機械的な処理方法を実現しようと考えたのが理由です。

もう少し補足しますと、

例えば昨晩の動きで
高値トレンドラインにタッチしています。

これをトレンドラインブレイクと判断するのか、それともラインを押し上げてトレンド継続とするか?

実は単に悩んでいたのではなくて、tankaiki toolのオリジナル版ではマルチタイムフレーム的に表現させることから開始していました


トレンドを見るのは、過去の動きから今と将来を予測することが目的だと思うのですが、リアルタイム計算を行うなかで、なにを過去とするのかがロジックの肝となり、まだ答えが見えていないというのが一番の課題です。

この課題を今回はMultiとMLで計算されるBar数(=時間)で強引に区切ることで解決(ただしくは先送りなのですが)しています。

3.模索したこと

プログラムのアルゴリズム工夫
まだ改良の余地は多々あると思っていますが、なにか劇的に変化する可能性も、試した限り小さいのであまりここに時間を費やすのは順番的に最後が良いということになりました。

計算のロジック
今のバージョンは単回帰計算が主になっています、これに変えてベイズもしくはARIMAを組み込むことを(先々)やって見たいと考えています。ものすごく精度が上がるか? と聞かれても残念ながら答えはありません。趣味の延長かもしれません。
新しい方法を組み込む前に、今の単回帰計算での誤差分布を用いた外れ値計算が上手く実現できないものかと研究するのが先かもしれません。


今の仕上がり具合では、これだけでトレンドを判定するのはやや危険なのですが、いろいろと試して見た結果、トレンド変化点は比較的正しく判定しているように思っています。

MultiとMLの設定期間内では判定しないので、トレードのスタイルに応じた設定に変更し試していただくことおすすめします。



えらく長い雑文になってしまいましたが 皆様良い休日を

EURUSDは昨晩書いた直前トレンドの高値にタッチしています。 月曜日は月末の五十日です。





0 件のコメント:

コメントを投稿

コメントありがとうございます。

すぐに返信できないことが多いかもしれませんが、よろしくお願いいたします。