2009/09/05

基軸を変えると・・・

【はじめに】
為替データの最小単位のチャートは、ティックチャートです。
しかし、このチャートは、時間軸を基軸として作られるチャートではなく、価格が更新されるたびにチャートが作られる価格の更新が基軸となるチャートです。
また、便利上ティックチャートを時間単位にプロットしたものが私たちの使い慣れた時間軸のチャートとなります。
1ティックチャートは、自分で収集するか、有償で手に入れる方法しかなく(もしかしたらあるかも知れませんが・・?)通常、大量のティックデータを手に入れることは難しいことです。
今回は、時間軸のチャート(M1)からティック軸のチャートを作成し特徴をとらえることを試みました。
【考え方】
時間軸からティック軸に変換するために、『1ティックを1秒と考える』と仮定します。
そして、時間軸【M1,M5,M10,M30,H1,H4,D1】のようにティック軸【V30,V60,V100,V200,V500,V1000,V3000】をまとめ、チャートにします。
※1分足を使用することにより、数ティックまとめた価格が抽出できるからです。
【方 法】
MT4に標準装備されている、Period_Converter.mq4を少し改造して基軸変換を行います。
改造したものVp_Converter.mq4を添付しましたので、遊んで見てください。
※動けばOK程度に作っていますので、リアルタイムで使用するコードを削除しています。
Vp_Converter.mq4の使い方
①プログラムの種別  :スクリプト
②パラメーターの説明 :【extern int Vp = 30;】いくつ刻みでティックを纏めるか設定する項目。
③変換方法      :変換するペアのM1チャートを起動させてスクリプトを実行されれば完了です。
④チャートの表示方法 :ファイル(F)→オフラインチャート(O)→変換したペア名Vp,M1というヒストリカルデータができていますので、そのチャートを使用します。
⑤データの相異点   :基軸変換に伴いVolumeの数値を変更していります。変更内容は、ティック数(Volume数)が、刻み数(Vp)を超えた場合の整数倍数を格納するようにしました。
⑥チャートの確認   :以下の画像は、下がVp=600でまとめたチャートで上がH1 のグラフです。



【特徴を捉える】
検証内容を一致させるため、先回のブログ内容と同じ方法を用いグラフ化してみました。下図がそのグラフです。

先回のグラフと見比べてみると、近似したグラフとなりましたが、より1線に纏まったように見えます。
また、近似式は、先回のグラフに使用したものをそのまま使用しました。
【中まとめ】
上記のグラフから、ティック数を基軸したチャートが有効であると考えます。
しかし、実際にリアルタイムで異軸のチャートを使用する際いくつかの問題点があります。
1つは、コンバーターのCPU使用率が高いこと。2つは、時間軸の概念が失われてしまうことです。
このような問題を解決するために、逆転の発想をしてみました。
本来なぜ基軸を変更しなければならないのか?という問題に立ち返ってみると、指標の向上が目的なわけです。
だったら、『指標のみをティック軸にし、それを時間軸のチャートに表示して使用する。』方が利にかなっていると考えました。
【応 用】
ではどのようにするのか?
指標の適用期間を可変しティック軸に合わせれば可能になります。
説明が下手なので適用期間の決定方法を下記にコード添付します。
+―――――――――――――――――――――――――――――――――+
int Get_VP(int i)
{
int ALL = Bars-i-1;
int k,cnt,Vl;
for(k=i,cnt=1;k<=ALL;k++,cnt++)
{
Vl+=Volume[k];
if(Vl>=BaseCount)break;
}
return(cnt);
}
+――――――――――――――――――――――――――――――――+
また、実際にSMAに応用した図も添付しておきます。

このようにすれば、誤差はあるものの『指標のみをティック軸にし、それを時間軸のチャートに表示して使用する。』が可能になります。
【まとめ】
ここまで、ティック軸の有効性を書いてきましたが私自身Volumeに関して悪い記憶があります。
それは、数社を比べた際に倍以上の開きがある場合があったからです。
そのため、各社に対する設定が必要になり、そのためのオリジナルデータの収集が必要になります。
しかし、上記の方法(考え方)は、有効な物と考えています。
例えば、P&F(ポイント アンド フィギア)の考えを取り入れて、異軸を考えてみるのも面白いかもしれません。
また、先に『コンバーターのCPU使用率が高いこと』と書きましたが、スリープを多く取ってやることでCPUの負荷を低減することが可能です。