今日はトレステでVWAPを(何とか頑張ってそれらしい値を)表示する方法を書きます。
EasyLanguageにはVWAPという予約語が用意されています。
なのでこれを単純に使えばよいのではと考えるのですが
どうもこれは板情報(買気配や売気配)と同じリアルタイムデータなんですね。
なので履歴としては残らないので、過去データのVWAP値を算出する目的では使えないってことです。
では他の手段を考えてみます。
ティックごとの出来高と価格を拾えたら計算できそうですが
インジケーターは足単位で処理を行うので(ストラテジーのようなイントラバー処理ができない)
ティックごとの株価(約定した値段)を拾いたい場合、チャートの設定を1ティックにするしかないんですね。
なので、正確なVWAP値は1ティックチャート以外生成できないってことです。
では分足や秒足ではVWAPは表示できないのかと言うとそうでもなく
完全には一致しないものの、極力近い数字を出すことは可能です。
VWAPのコードを書いてみる
関数
VWAP_HI
inputs: PmReset(NumericSimple); vars: PriceW(0), ShareW(0), Answer(0.1), DayReset(0); Once begin PriceW = 0; ShareW = 0; Answer = OpenD(0); end; if date > date[1] then begin PriceW = 0; ShareW = 0; DayReset = 0; Answer = OpenD(0); end; IF PmReset <> 0 and TIME = 1230 and DayReset = 0 then BEGIN PriceW = 0; ShareW = 0; DayReset = 1; END; //PriceW += (AvgPrice * Ticks); PriceW += (High * UpTicks) + (Low * DownTicks); ShareW += Ticks; if ShareW > 0 then Answer = PriceW / ShareW; VWAP_HI = Answer;
インジケーター
inputs: DownColor(Cyan), UpColor(Magenta); vars: Answer(0), NewColor(DarkGray); Answer = VWAP_HI(0); NewColor = DarkGray; if Close > Answer then NewColor = UpColor else if Close < Answer then NewColor = DownColor; Plot1(Answer, "VWAP_1DAY", NewColor);
コード解説
関数の中にコメントアウトしてある箇所があるかと思います。
それが他のサイトなどで良く見るロジックです。
トレードステーションのヘルプにも
(「avgprice」xバー当たりの「取引された株数」)とか書かれていたりします。
しかしこれ上昇出来高と下降出来高の割合に関して考慮がありませんよね。
なので(高値 * 上昇出来高)+(安値 * 下降出来高)を総出来高で割るという計算式にしてみます。
まず良くあるロジックのほうでチャートを表示します。
白い線がリアルタイムデータのVWAPで
シアンとマゼンタの線が自作のVWAPです。
結構な誤差があるのが分かるかと思います。
次に改良ロジックでチャートを表示します。
ほぼ重なって表示されていますね。
誤差もこの位なら許容してほしいかな~?
如何でしょうか。
関数のおまけ機能
PmResetにゼロ以外をセットすると後場寄り前に一旦リセットします。
副産物
現在の価格がVWAPとどのぐらい差があるかをインジケーターにしてみます。
vars: Answer(0); Answer = Close - VWAP_HI(0); Plot1(Answer,"VWAP_DIFF", Red); Plot2(0,"ZERO", White);
VWAPで反転する(こともある)ので
そういうの見るときに便利かなー?