ここでは、VQがどのように算出されるのかをインジケーターVQのコードから読み解いていきます。インジケーターVQについて知らない方は、過去記事【VQとVQ_EA】をご覧ください。
VQの計算式
現在変動中のローソク足におけるVQの値は、次の計算式で割り出します。
MH = iMA(NULL, 0, Length, 0, Method, PRICE_HIGH, 0); ML = iMA(NULL, 0, Length, 0, Method, PRICE_LOW, 0); MO = iMA(NULL, 0, Length, 0, Method, PRICE_OPEN, 0); MC = iMA(NULL, 0, Length, 0, Method, PRICE_CLOSE, 0); MCS = iMA(NULL, 0, Length, 0, Method, PRICE_CLOSE, Smoothing); VQ0 = MathAbs(((MC - MCS) / MathMax(MH - ML,MathMax(MH - MCS,MCS - ML)) + (MC - MO) / (MH - ML)) * 0.5) * ((MC - MCS + (MC - MO)) * 0.5); SumVQ = Close[1] + VQ0; if (Filter > 0 && MathAbs(VQ0) < Filter * Point) SumVQ = (前の足のSumVQ);
このSumVQが、VQの値です。
各変数の中身
上記コードからVQのパラメーターは次の役割があることが分かります。
Length | 移動平均の期間 |
---|---|
Method | 平均方法 |
Smoothing | 変数MCSのシフト数 |
Filter | VQ値変動の最小値(単位: Point) |
また、上記コード内の各変数は次のようになっています。
MH | 高値の移動平均 |
---|---|
ML | 安値の移動平均 |
MO | 始値の移動平均 |
MC | 終値の移動平均 |
MCS | Smoothing前の終値の移動平均 |
まずVQ0を算出
VQ0 = MathAbs ( ( (MC - MCS) / MathMax(MH - ML, MathMax(MH - MCS, MCS - ML)) + (MC - MO) / (MH - ML) ) * 0.5 ) * ((MC - MCS + MC - MO) * 0.5);
あ~ややこしや~
ここで出てくるMathAbs()関数は()括弧内の絶対値、MathMax()関数は()括弧内の2つの値の大きい方を求める関数です。
ごちゃごちゃしてるので、紙に書いて確認すると良いです^^;
(MH – ML), (MH – MCS), (MCS – ML) のうち最大のもので(MC – MCS) を割ったものと、
(MH – ML) で (MC – MO)を割ったものを足して0.5をかけたものと、
(MC – MCS + MC – MO) に0.5をかけたものをかけた値がVQ0となるでしょうか^^;
変動幅フィルター
VQの値となる変数SumVQは、前回終値Close[1]にVQ0を足すのですが、Filterポイント未満のVQ値変動は変動無しとして補正しています。
SumVQ = Close[1] + VQ0; if (Filter > 0 && MathAbs(VQ0) < Filter * Point) SumVQ = (前の足のSumVQ);
シグナル(アロー)発生条件
今までと反対方向への変化があった場合にシグナル(矢印)を表示させて、売り買い交互のシグナルになるようにしています。
すごくお久しぶりです!
こんばんわ。
やっと自分の時間が作れるようになって、またMetaTraderを触っています。
自分も最近(というか今更w)VQに興味を持ち、時間足を複数利用してその条件にあったシグナルで売買するというようなEAをiCustomを使用して作ったのですが、どうも売買しないときがあるので、EA内にVQのシステムを組み込もうと勉強していたところでした。
相変わらず理解力がないところに、慶次さんがVQの記事を書いてらしたので、またお邪魔してしまいました^^
参考にさせていただきますね。
では、また寄らせていただきます。
えぎさん
お久しぶりです!!
私も、VQを使ったEAを稼動してますが、
なんだか安心感がありますよね!
勉強がんばりましょうね^^
初めまして。
突然のご連絡で申し訳ありません。
いつも楽しみにHP見させて頂いてます。
このたびFXブログランキングサイトを開設いたしました。
現在、まぐまぐで発行されている投資ジャンル
(主にFX関係)のメルマガ十数誌と連動すべく
準備を進めております。
今後、アクセス集客のお手伝いが出来るかと思って
おります。
これからFX投資に関心のある方々に喜ばれるよう
頑張って良いサイトにしていこうと思っております。
今回、ご登録頂いた方に、全員に
「FXブログアクセスアップの必勝法」レポートを
ご提供させて頂きます。
当ランキングサイトと平行して、このレポートを元に
アクセスアップをはかって頂ければ、効果が高いと
思います。
宜しければご登録を頂ければと思っております。
何卒宜しくお願いします。
※「FXブログアクセスアップの必勝法」は登録者の方に
個々にメールにてダウンロード先を御知らせさせて頂きます。
======================================================
【FXランキング】FXのブログランキングサイト
FX必勝法No.1ブログランキング 事務局
URL:http://www.fxranking.biz/
MAIL:support@fxranking.biz
======================================================
情報ありがとうございます。
コードを見るとVQを1つだけ求める部分とfor~nextで囲まれた部分で過去のVQを算出している部分とに別れているように見えます。
過去のVQを算出している理由はなんでしょうか?
baalさん
コメントありがとうございます。
どのコード(mq4ファイル)のどの部分のことでしょうか?
再度ご連絡お願い致します。
if(MathAbs(VQsign[VQshift])!=1)
{
for(int j=0;j<iBars(NULL,TimeFrame);j++)
{
VQ算出
}
}
VQ算出
という具合にVQ算出が二重になっていると思います。
前半のVQ算出にはshift+jとなっているので、+jの分だけ過去のVQ全てを算出していると思うのですが、そこの意味がよくわかりません。
VQは前の数値と違っていたらサインを出すという様式なのでそれと関係していそうだなという気はしますが・・・
コード自体はこのページではなく次のページに書いてある
void FuncVQ(int VQshift)
のところですね。
baalさん
ご指摘ありがとうございます。確認して修正致します。
VQ関連で、新たに軽量化したVQインジケーターを作成して、下記の記事でダウンロード可能にしましたのでよろしければダウンロードしてみてください。
記事【VQとVQ_EA】
https://www.dr-ea.com/meta-blog/metatrader4/ea-diary/vq_ea.html
新しいコードをありがとうございます。しかし、前のほうがまだ理解しやすかったかもしれません。
さて、前のコードではVQの値は現在のものと1つ前のものとを取得していたと思います。こんな具合に。
FuncVQ(0);
FuncVQ(1);
これを、 FuncVQ(2); とやれば2本前のVQ値を取得できそうなものですが、できませんでした。
要するにn本前のVQ値を取りたいんですが、どうしたらいいでしょうか。
baalさん
コード変更と説明追加しましたので、ご確認お願い致します。
VQをEA内で計算する方法
2本前のVQラインの値は、SumVQ[2]で取得できます。
インジケーターをEA内蔵にする編集をするには、インジケーター作成スキルを身に付けることが近道かなと思います。