またろうのシストレブログ

マネックス証券が提供しているトレードステーションと、MT4などシストレ関連について色々書きます。株と自動売買、EasyLanguageについても。

トレステでVWAPを(頑張って近い値を)表示しようという話



今日はトレステで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バー当たりの「取引された株数」)とか書かれていたりします。
しかしこれ上昇出来高と下降出来高の割合に関して考慮がありませんよね。

なので(高値 * 上昇出来高)+(安値 * 下降出来高)を総出来高で割るという計算式にしてみます。

まず良くあるロジックのほうでチャートを表示します。
f:id:tsukinowaapp:20180710113749p:plain

白い線がリアルタイムデータのVWAPで
シアンとマゼンタの線が自作のVWAPです。

f:id:tsukinowaapp:20180710113935p:plain
結構な誤差があるのが分かるかと思います。

次に改良ロジックでチャートを表示します。
f:id:tsukinowaapp:20180710114132p:plain

ほぼ重なって表示されていますね。

f:id:tsukinowaapp:20180710114245p:plain
誤差もこの位なら許容してほしいかな~?
如何でしょうか。

関数のおまけ機能

PmResetにゼロ以外をセットすると後場寄り前に一旦リセットします。

副産物

現在の価格がVWAPとどのぐらい差があるかをインジケーターにしてみます。

vars: 
	Answer(0);

Answer = Close - VWAP_HI(0);

Plot1(Answer,"VWAP_DIFF", Red);
Plot2(0,"ZERO", White);

f:id:tsukinowaapp:20180710115831p:plain

VWAPで反転する(こともある)ので
そういうの見るときに便利かなー?