時系列アクセス関数「始値、終値、高値、安値」~奥義伝承~
時系列アクセス関数「始値、終値、高値、安値」
~奥義伝承~についてお話ししますね。
MT4のMetaEditorでEAを作成するとき、
時系列アクセスの関数をよく用います。
具体的には、
時系列アクセスの関数が特定条件のときに
ポジションを持ったり、決済するというように
売買条件を作るとき特に活用します。
今回は、この時系列アクセスの関数を使った
プログラミングを学んでいきましょうね。
時系列アクセスの関数はいくつかありますが、
主要なものをいくつかピックアップして
解説します。
本記事では、始値、終値、高値、安値
を学びましょう。
ひろ師匠「にゃんこよ。ここまでよくぞ頑張った。
これから奥義伝承を行う。」
にゃんこ「ゴクッ。ついに奥義伝承ニャ。」
【今日の目次】
(1) 奥義伝承
(2) 奥義伝承プログラム作成
(3) 奥義伝承プログラム実行
(1) 奥義伝承
ひろ師匠「にゃんこよ。ここまでよくぞ頑張った。
これから奥義伝承を行う。」
にゃんこ「ゴクッ。ついに奥義伝承ニャ。」
ひろ師匠「ついてまいれ。」
にゃんこ「はい、師匠!」
ひろ師匠「今からお主を攻撃する。
攻撃をかいくぐって我を倒すのじゃ。」
にゃんこ「その攻撃を破れる技が奥義なのですニャ?
自分の頭でどうしたら攻撃を破れるか
考えるのですニャ?」
ひろ師匠「ふ・・・いくぞ。」
にゃんこ「わわっ、もう開始ですニャ!」
(2) 奥義伝承プログラム作成
にゃんこ「くっ!なんて激しい攻撃なのニャ。
近づくと返り討ちにあうニャ。
どうしたら・・・。」
にゃんこ「・・・そうか!
近づけないならここから攻撃すればいいのニャ!
修行で鍛えたこの両腕ならいけるニャ!」
・・・はい、ではにゃんこが奥義会得のために
ひろ師匠を攻撃したときのダメージを表示する
プログラミングをしましょう。
にゃんこ「絶対、奥義を会得してみせるニャ!
・・・じゃなくて、プログラムの内容を
もっと分かるように説明するニャ!!」
す・・・すみません^^;
時系列アクセスの関数に、
始値、終値、高値、安値
があります。
始値、終値、高値、安値は、その名の通り
レートの始値、終値、高値、安値です。
一定の始値、終値、高値、安値を超えたときに
エントリーやクローズをするという条件によく
用いられます。
始値、終値、高値、安値は、MT4のMetaEditorで
EAを作成する際、特に売買条件を作る時よく使う
時系列アクセスの関数です。
そこで、この始値、終値、高値、安値を使うことに
慣れるため、バックテストをしたときに操作履歴
へ始値、終値、高値、安値を用いた文章が出力される
ようにプログラムするのが今回の目的です。
まず、MetaEditorを起動しましょう。
MT4のMetaEditorでEAを作るための初期設定
(4) MetaEditorのEAプログラム画面の表示
で、名前をExperts\rateとしてEAプログラム
のひな型を表示させてください。
おさらいですが、プログラムのルール
として以下2つを覚えておいて下さい。
◆プログラムするときには、半角英数で入力
(全角ではエラーが発生します)
◆文末には;(セミコロン)をつけます。
日本語で言うと。(句点)のようなものです。
ただし、日本語の句点はなくても意味が
通じますが、プログラムのセミコロンは
ないとエラーが発生します。
エラーが発生しないように覚えておきましょう。
それでは、EAプログラムのメイン記述場所
void OnTick()
{
}
の{ }内に実行したいプログラムを
書き込みます。
今回は、
string a;
double b;
string c;
string d;
double e;
string f;
a = "にゃんこの左爪が空を裂く!";
b = iOpen(NULL,0,0) * iClose(NULL,0,0) * iHigh(NULL,0,0) * iLow(NULL,0,0);
c = "のダメージ!";
d = "にゃんこの右爪が衝撃波を生む!";
e = Open[0] * Close[0] * High[0] * Low[0];
f = "のダメージ!";
Print(a,b,c,d,e,f);
と入力します。
プログラムするときには、半角英数で入力
(全角ではエラーが発生します)とお伝え
しましたが、" "の中に文字を入れる場合は
例外で全角日本語も入れられます。
PrintのPは大文字ですのでお気を付け
下さいね。
iOpenのO、iCloseのC、iHighのH、iLowのL
はそれぞれ大文字ですのでご注意ください。
行間は見やすいため項目の種類ごとに
空けていますが、詰めてしまっても
構いません。
見やすくするため=と*の両端に半角スペース
を空けていますが、詰めてしまってもOKです。
string、doubleの右側の半角スペース
は詰めると異なる意味になってしまうので
詰めないで下さい。
//---はコメントで、あってもなくとも
構いませんから、void OnTick()内の
コメントを今回は消しました。
段落の字下げ数に決まりは特にありませんが
左字詰めで入力した一番左にカーソルを合わせ、
Tabキーを1回押して字下げすると綺麗に見えます。
内容を解説します。
1行目~6行目
string a;
double b;
string c;
string d;
double e;
string f;
のうち、a,b,c,d,e,fはそれぞれ「変数」です。
以前、解説しましたね。
変数は「数字や文字を入れる箱」のような
ものだと考えて下さい。
ここでは変数をa,b,c,d,e,fにしていますが、
他の文字、例えばabc,def,ghi,jkl,mno,pqr
などにすることもできます。
string、doubleは、「データ型」という箱の種類
のようなものです。
stringは「文字列」、doubleは「小数点付きの数字」
を箱の中に入れる場合に使います。
7行目~12行目
a = "にゃんこの左爪が空を裂く!";
b = iOpen(NULL,0,0) * iClose(NULL,0,0) * iHigh(NULL,0,0) * iLow(NULL,0,0);
c = "のダメージ!";
d = "にゃんこの右爪が衝撃波を生む!";
e = Open[0] * Close[0] * High[0] * Low[0];
f = "のダメージ!";
変数a,c,d,fには文字列、変数b,eには小数点付きの数字
が入れられます。
変数 イコール 文字列または小数点付きの数字
の順です。
文字列は" "で囲みます。
小数点付きの数字は上記のように関数同士の
掛け算でも良いです。
iOpen()、Open[]は始値
iClose()、Close[]は終値
iHigh()、High[]は高値
iLow()、Low[]は安値
の関数です。
Print()などと同様です。
()が付く方の関数には、頭にiが付きます。
[]が付く方の関数には、頭にiが付きません。
()または[]の中に特定のルールに沿ってデータを
入れると、始値、終値、高値、安値のデータを
算出してくれます。
このデータは、以前お伝えした以下の技で
見ることができます。
MetaEditorの知らないと損する7つの技
1. 関数リファレンスを見る技
または、こちらも以前お伝えした
MT4のFX自動売買(EA)の作成を便利にする4つの方法
2. メタシス・シーカー(無料)
の以下のページでも確認できます。
iOpen、iClose、iHigh、iLowですと、それぞれ
以下のようなデータが確認できます。
頭にdoubleが付いているのは、小数で表示
される関数だということです。
double iOpen(string symbol, int timeframe, int shift)
double iClose(string symbol, int timeframe, int shift)
double iHigh(string symbol, int timeframe, int shift)
double iLow(string symbol, int timeframe, int shift)
()内のデータを1つずつ解説していきますね。
string symbol
計算に用いる通貨ペアを記入します。
頭にstringが付いているので、文字列で記入
するということです。
基本的に、選択された通貨ペアで計算する
NULLを記入しておけば良いです。
個別に指定したい場合は、
EURUSD
などのように書きます。
また、通貨ペアの語尾に.(ピリオド)や
_ecnが付くFX業者の場合は、
EURUSD.
EURUSD_ecn
などのように書きます。
int timeframe
計算に用いる時間足を記入します。
頭にintが付いているので、整数で記入
するということです。
基本的に、選択された時間足で計算する
0を記入しておけば良いです。
個別に指定したい場合は、
1
5
15
30
60
240
1440
10080
43200
のように書きます。
また、整数で記入とありますが
M1
M5
M15
M30
H1
H4
D1
W1
MN
と書いてもそれぞれ上記と同じ意味になります。
この書き方をしてもプログラムで計算される
際は自動で上記の整数に変換される仕組みです。
それぞれ上から
1分足
5分足
15分足
30分足
1時間足
4時間足
日足
週足
月足
を指定しています。
int shift
何本前のローソク足を基準にデータを
取得するか指定します。
頭にintが付いているので、整数で記入
するということです。
0ならば現在のローソク足を基準
1ならば1つ前のローソク足を基準
5ならば5つ前のローソク足を基準
にデータを取得します。
つまり、例えば1時間足を使っている場合は
0ならば現在のローソク足を基準
1ならば1時間前のローソク足を基準
5ならば5時間前のローソク足を基準
にデータを取得します。
以前学んだ関数で全て出てきましたね。
少々複雑ですが、ほとんどの関数は似たような形式
ですので、一度理解すれば大抵の関数が使えます。
一方、Open、Close、High、Lowですと、それぞれ
以下のようなデータが確認できます。
頭にdoubleが付いているのは、小数で表示
される関数だということです。
double Open[ ]
double Close[ ]
double High[ ]
double Low[ ]
こちらは、[]内に記載はされていませんが、
上記のint shiftのデータを入力することが
できます。
計算に用いる通貨ペア、時間足は、それぞれ
選択された通貨ペア、時間足が自動で指定されます。
つまり、
iOpen(NULL,0,0) と Open[0]
iClose(NULL,0,0) と Close[0]
iHigh(NULL,0,0) と High[0]
iLow(NULL,0,0) と Low[0]
はそれぞれ同じ意味になります。
Open、Close、High、Lowは、
iOpen、iClose、iHigh、iLowの
簡易版の関数ということですね。
13行目
Print(a,b,c,d,e,f);
以前も使ったPrint関数です。
変数aとbとcとdとeとfの間に,(カンマ)を打つと、
a,b,c,d,e,fの中に入っている文字列と小数点付きの数字
が順に並んで出力されます。
上記でaには
にゃんこの左爪が空を裂く!
を入れました。
上記でbには始値、終値、高値、安値関数の
掛け算の計算結果を入れました。
つまりbにはローソク足のレートによって
変化する小数が入っています。
上記でcには
のダメージ!
を入れました。
上記でdには
にゃんこの右爪が衝撃波を生む!
を入れました。
上記でeには始値、終値、高値、安値関数の
掛け算の計算結果を入れました。
つまりeにはローソク足のレートによって
変化する小数が入っています。
上記でfには
のダメージ!
を入れました。
したがって、表示されるときには、
にゃんこの左爪が空を裂く!○○のダメージ!にゃんこの右爪が衝撃波を生む!○○のダメージ!
と表示されます。
※ ○○は、ローソク足のレートによって変化する小数です。
入力が終わったら、コンパイルします。
MetaEditor上部の「コンパイル」ボタンを
左クリックしましょう。
次に、エラーが発生していないことを下部の
エラータブで確認して下さい。
0 error(s), 0 warning(s)
と表示されていれば、無事コンパイル完了
です。
エラーが出た場合は、全角で入力されたか、
;(セミコロン)を付け忘れたかである
可能性が高いです。
直したら再びコンパイルしましょう。
コンパイルが成功した時点で、今まで
作っていたmq4ファイルもEA稼動に必要な
ex4ファイルも自動保存されますので、
手動で保存する必要はありません。
ただ、コンパイルしなければ自動保存
されませんので、mq4ファイルでプログラム
を書いていて作業を中断する場合は
ファイル → 名前を付けて保存
から手動で保存しておきましょう。
(3) 奥義伝承プログラム実行
作成した奥義伝承プログラムをバックテスト
で実行し、動作確認してみます。
MetaEditorを閉じて、MT4を開きましょう。
MT4ツールバーの「Strategy Tester」ボタン
をクリックします。
すると、MT4の下部に「テスター」ウィンドウ
が表示されます。
エキスパートアドバイザーに、作成した
「rate」というEAが入っていますので、
それを選んでください。
バックテストをしたときに、操作履歴に
ひたすら与えたダメージが並ぶだけのプログラム
ですので、日付と時間を使用は、時間短縮
のために短い期間で良いです。
ただし、土日は相場が動かないので
土日のみの期間を選択するとエラーが
起きることにご注意くださいね。
それ以外の設定は何でも良いです。
準備ができたら、スタートを左クリックして
バックテストを開始してください。
今回は、売買をするシステムではないので、
レポートタブなどには何も出ません。
レポートタブの横の操作履歴タブを選択して
ください。
メッセージの一番右端のところに
にゃんこの左爪が空を裂く!○○のダメージ!にゃんこの右爪が衝撃波を生む!○○のダメージ!
が表示されていますね。
※ ○○は、ローソク足のレートによって変化する小数です。
にゃんこ「くっ!これでも倒せないニャ!
これは奥義じゃないのかニャ?」
ポチッ
にゃんこ「・・・ん?足元になにか転がってるニャ。
これは・・・電源スイッチ?
なんかオフボタンを押したみたいニャ。」
ギー ガシャン ガシャン プシュー
にゃんこ「なんか師匠ロボットみたいな動きして止まったー!」
にゃんこ「・・・あれ?小屋の中にも師匠がいる?」
ひろ師匠「・・・なんという濃厚な味わい。
これが・・・パフェ!?」
バキッ☆
にゃんこ「いつの間にロボットと入れ替わってるニャ!
さぼってないで真面目に奥義伝承するニャ!!
そしてなんでパフェの食レポしてるニャ!!!」
ひろ師匠「ぐふっ!見事だ。
奥義ならもう習得したじゃないか。
素晴らしい"つっこみ"という奥義を。」
にゃんこ「そんな奥義は嫌ニャー!!!」
以上で今回のプログラミングは終了です。
始値、終値、高値、安値の関数がなんだか掴めたでしょうか?
今後、EAの売買条件を作るとき頻繁に始値、終値、高値、安値
の関数を用いますので、覚えておいてくださいね。
P.S.
もうひとつの奥義
なお、残念ながら、EA作成に関しては
個別のご質問にはお答えしかねます。
ご存知の通り、有料のサポート付きEA作成教材
では、1ヶ月講座で週1回までのサポートでも
8万円ぐらい掛かるのが相場だったりします^^;
大変心苦しいのですが、あらかじめご理解
のほどよろしくお願い致します。
この記事を読まれた方は次の記事も読まれています
- MT4の自動ビルドアップ無効とビルドダウンする方法 - 2017年 5月 8日
- MT4、Windows10ユーザー必見!Windows Update 無効化方法(無料・ツール不使用) - 2017年 4月 13日
- MT4、Windows10ユーザー必見!Windows Update 無効化ツール(無料) - 2017年 4月 8日
- MT4のバックテストを日本円(JPY)口座で行う裏技 - 2017年 1月 31日
- MT4でストップレベルを調べる方法 - 2017年 1月 25日
もっと詳しく知りたい事や
理解できなかった事などございましたらお気軽にご連絡下さい。
あなたの応援のおかげで明日も頑張って記事が書けます
本日のランキング応援クリックありがとうございました(*'-'*)
この記事へのコメント
あなたの応援のおかげで明日も頑張って記事が書けます
本日のランキング応援クリックありがとうございました(*'-'*)