Wizard In The Market
システムトレードの魔術師

*

■超直感!MT4プログラミング講座■ 第13回 MQL基本関数・変数を覚えよう!

公開日: : 最終更新日:2015/01/13 MT4(MQL4)プログラミング講座

こんばんは!キリンです。
昨日、faiさん(とあるMetaTraderの備忘秘録)にブログで私の講座を紹介していただきました。
TopGun公開時よりも数多くのアクセスがありました。
誠にありがとうございます。
今後とも精進していきたく思います。
さて、では前回の回答です。
またもばっちり正解を書いてくださった「りある」さん、
以前からブログを読んでくださっている「junky」さん
コメントありがとうございます!
(りあるさんとは、アメブロ引越し当初からのお付き合いですね。嬉しい限りです。)
また前回のコメントから正解を引用させていただきますね。
りあるさんより

string Array[5];
Array[0] = “Array[0]です”;
Array[1] = “Array[1]です”;
Array[2] = “Array[2]です”;
Array[3] = “Array[3]です”;
Array[4] = “Array[4]です”;
for(int i=3; i<5; i++){
Print(Array[i]);

for文を用いて、
初期値を3からi++で5未満までの繰り返し文を作ってらっしゃいます。
すばらしいっす!
ちなみに、このように書くこともできます。
for(int i=0; i<2; i++){
Print(Array[i+3]);
}
配列の[ ]の中で足し算もできちゃうんです。
そして、junkyさんの発展を含んだ答え。

string Array[5];
Array[0] = “Array[0]です”;
Array[1] = “Array[1]です”;
Array[2] = “Array[2]です”;
Array[3] = “Array[3]です”;
Array[4] = “Array[4]です”;
for(int i=0; i<5; i++){
if(i==3){
Print(Array[i]);
}
if(i==4){
Print(Array[i]);
}
}

ifを使って、for文の中で表示させるものを選んでいます。
iを0⇒5未満までiを一つづつ増やしながら繰り返しをさせ、
i==3のときのみ、Array[i]を実行させる。
i==4のときのみ、Array[i]を実行させる。
といった動作ですね。これまた素晴らしい回答です。
今までの講義の内容が全て含まれています。
ここで、新しく登場した「==」の使い方のご紹介です。
i<5の場合は、iが5未満であれば true でした。
「変数iと特定の値(今回は5)が等しいか?」という条件文は、i == 5 と書きます。
i = 5でいいんじゃないの?と疑問に思われるかたもいらっしゃると思います。
ですが、この当たりはプログラミングのルールなんですね。
間違えやすいのでお気をつけてください。
ちなみに、i = 5 としてしまうと、変数iの値が5になってしまいます。
「iが5と等しいか?」
にはならないんです。
これらは、「比較演算子」と呼ばれるものになるのですが、
それについても近々お話させていただく予定です。
では、今回の講義です。


第13回 MQL定義済み基本変数を覚えよう!

今日はごくごく基本的なMQL定義済み基本関数のお話をします。
■MQL定義済み変数とは?
■どういったものがあるの?
■実際の使用例
■MQL定義済み変数とは?
string や int 等で定義する必要がなく、
あらかじめ変数として割り当てられているのが、
「MQL定義済み変数」です。
MQLの便利なところは、定義済み変数を用いることによって
Bit値やAsk値、Open値等を簡単に取得できることです。
■どういったものがあるの?
・Bid
売り値を割り当ててある(以降、「値を出す」という意味で「返す」と言います)
・Ask
買い値を返す
以下、配列として扱います
・Close[i]
i番目のローソク足でのクローズ値を返す
・Open[i]
i番目のローソク足でのオープン値を返す
・High[i]
i番目のローソク足での最高値を返す
・Low[i]
i番目のローソク足での最安値を返す
※ここでいうローソク足の順番は直近のものが0で左へ
 0,1,2,3、・・・・という形で移動していきます。
 新しいローソク足ができたら、そのローソク足が0本目になります。
 (以前の0のものは1になる)
■実際の使用例
Trading Systems ~経済的自由を得るために~
↑クリック
チャートの左上にこのように表示させるプログラムを作ってみましょう。
いつものようにスプリクトを使います。
スプリクトの使い方は第8回[リンクはこちら]をご覧いただければと思います。
第8回で作成した[test]というプログラムの中身を下のように変更します。

//+------------------------------------------------------------------+
//| test.mq4 |
//| Copyright Kirin 2010, MetaQuotes Software Corp. |
//| http://ameblo.jp/ftlabo-kirin/ |
//+------------------------------------------------------------------+
#property copyright “Copyright Kirin 2010, MetaQuotes Software Corp.”
#property link “http://ameblo.jp/ftlabo-kirin/”
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//—-
Comment(“Ask : “,Ask, “, Bid : “,Bid,” , Open : “,Open[0], ” Close : “,Close[0],” High : “,High[0],” , Low : “,Low[0] );
//—-
return(0);
}
//+------------------------------------------------------------------+

まず、Comment()の使い方の説明です。
・Comment(string text)
textの中身をチャートの左上に表示させる関数
上で動作した例をご紹介しましたが、このように表示されるんですね。
動作としては、Print()とさほど変わりません。
さらに、今までにも説明させていただきましたが、
文字列を繋ぎ合わせるときは[ , ]もしくは[ + ]でくっつけます。
string型の”test “という値と int型の a (= 1) をくっつけるときは、
“test “,a
とするんですね。
この場合の出力は
test1
となります。
それを繰り返したものが、
“Ask : “,Ask, “, Bid : “,Bid,” , Open : “,Open[0], ” Close : “,Close[0],” High : “,High[0],” , Low : “,Low[0]
なんですね。
実際にメタエディター上でみると、テキストには色の区別がされるので分かりやすいです。
(緑色になる)
(念のためにですが、” ”で囲えば文字列になります。
 ” ”外に文字を打つと関数か変数として扱われます)
Trading Systems ~経済的自由を得るために~
↑クリック
今回のスプリクトを実行することで、
AskやBid,Close[0]などの値を画面上に出すことができると思います。
お分かりいただけましたでしょうか?
ちょっと実践的になってきましたねっ!
楽しみになってきました。
では、最後に簡単な問題です。
最新のローソク足から3本前のクローズ値を得たい場合には、
どうすればいいでしょうか?
最後までお読みくださりまして、ありがとうございます。
ではでは~♪

にほんブログ村 為替ブログへ 
Fx-Kirin

About Fx-Kirin

2009年10月にFXを開始、翌年2010年5月から脱サラをしてFX業界に専念。 2012年10月頃から本格的に勝ち始め、一月で資産を倍にする、2年半月間負けなし等、安定した収支で2013年11月に生涯FX収支が1億を超える。 投資スタイルはシステムトレード。プログラミングの知識がほぼない状態から、独学で自分がしたいと思うことであればほぼ実現することが可能なレベルまで成長。好きな言語はRuby, Python。必要となればC++からVBA、Pascal等なんでも行う。MT4/MT5のプログラミングも得意。 2011年にはFXで稼いだ資金をもとにシンガポールに移住し、留学も兼ねて起業をチャレンジするほど、ビジネスを興すことに熱意がある。国内の業者を主に使い始めたことから、2012年に帰国。零細株式会社経営中。

Adsense

  • このエントリーをはてなブックマークに追加
  • Pocket
  • 67 follow us in feedly

関連記事

no image

■超直感!MT4プログラミング講座■ 第21回 ボリンジャーバンドを作ろう(3)

こんばんは!キリンです。 私は本日を持って、脱サラをしました。 もう二度とサラリーマン生活に戻らないという固い信念のもと

記事を読む

no image

■超直感!MT4プログラミング講座■ 第18回 インディケーターを色々いじってみよう

こんばんは!キリンです。 今日の名言 「日々、常に何か新しいことを学習し身につける。  それを繰り返すことによって、新し

記事を読む

no image

■超直感!MT4プログラミング講座■ 第9回 for関数を使ってみよう

こんばんは!キリンです。 今日は、繰り返し同じ動作をすることのできる for関数についてのお話しようと思います。 第9

記事を読む

no image

■超直感!MT4プログラミング講座■ 第35回 MAの傾きを使ったEA

こんばんはっ!キリンです。 土曜日なんですが、脱サラすると関係なかったり・・・。 なんか実感が湧かない今日この頃です。

記事を読む

no image

■超直感!MT4プログラミング講座■ 第19回 ボリンジャーバンドを作ろう(1)

こんばんは!キリンです。 気づいたら本格的なプログラムを扱っている状態にまで、 この講座も進んでこれたのですね。 私とし

記事を読む

no image

■超直感!MT4プログラミング講座■ 第25回 発注スプリクトの作成

おはようございます。キリンです。 今日から引越しの準備です。 今週はあまり仕事が進んでないです・・・。 引越しの準備とか

記事を読む

no image

■超直感!MT4プログラミング講座■ 第8回 スクリプトを使ってみよう!

こんばんは!キリンです。 昨日の動画を上げてから気づいたのですが、 おそらく、昨日の動画で私の話で何をいっているのか伝わ

記事を読む

no image

■超直感!MT4プログラミング講座 第37回 ブレイクアウトシステムのEA作成(2)

おはようございます。キリンです。 日本、負けてしまいましたね。 でも、すごい感動しました。 すごい夢をもらいました。 優

記事を読む

no image

■超直感!MT4プログラミング講座■ 第39回 ブレイクアウトシステムのEAの最適化をやってみよ

こんばんは!キリンです。 今日は最適化をしてみます。 簡単に成績がいいものができてしまうので、 成果が出たときは非常に嬉

記事を読む

no image

■超直感!MT4プログラミング講座■ 第15回 MQL定義済み関数について

こんにちは!キリンです。 このブログ自体が夜書くことが多いので、「こんにちは!」っていうと新鮮ですね。 春の陽気を感じら

記事を読む

Comment

  1. りある より:

    SECRET: 0
    PASS:
    今日も頑張ります。
    3本前の終値なので、" Close : ",Close[0],の配列部分をClose[3]とすれば、
    3本前の終値を表示できると思います。
    質問なのですが、Close[0]は、最新のBarの終値になるんですよね?
    最新のBarはtickで動いているので固定値ではなくて、常に変動した値を表示するということでしょうか?

  2. junky より:

    SECRET: 0
    PASS:
    これは日本語の問題なんですが、自分の感覚では現在値を含めて3本目ということで・・・
    Close[2]
    だと解釈しましたが・・・
    あ、前回の自分のつたないプログラム動くんですね(笑)
    分岐を考えると、elseを必ず入れなきゃいけないんじゃないかって思ってました、初めのころは。

  3. junky より:

    SECRET: 0
    PASS:
    文字のサイズや色やフォントを変えたりするにはどうしたらいいのでしょうか?
    あと、表示場所を任意のトコにする方法とか?
    ムズかしいでしょうかぁ?

  4. SECRET: 0
    PASS:
    >junkyさん
    すばらしいっす!
    私の意図している回答でした!
    前回のも動作しますよー。
    素晴らしい回答でした^^
    コメントありがとうございます!

  5. SECRET: 0
    PASS:
    >junkyさん
    ちょっと調べてみましたが、
    おそらくなさそうですね。
    任意の場所に表示は、
    ObjectCreate()関数で可能ですが、
    おそらく意図されているものと違う動作になるかと・・・。
    コメントでの場所の表示の変更はできないですね。

  6. りある より:

    SECRET: 0
    PASS:
    こんばんは。
    Close[2] が答えでしょうか?
    FXメタトレーダーの書籍では、意図として3本前のバーは、現在の変化しているバーは含まない記載だったと思います。
    これだと1本前のバーと言った時、それは現在のバーを表すことになるのでは?
    大事なところなので、詳しい説明をお待ちいしてます。
    日本語は難しいですね。

  7. SECRET: 0
    PASS:
    >りあるさん
    ご指摘ありがとうございます・・・。
    おっしゃる通りで、表示中のローソク足から考えると3本前だとclose[3]です。
    私の日本語の落ち度でした。
    本当に助かります。
    修正しておきます。

  8. ホネクス より:

    SECRET: 0
    PASS:
    string Array[5];
    Array[0] = "Array[0]です";
    Array[1] = "Array[1]です";
    Array[2] = "Array[2]です";
    Array[3] = "Array[3]です";
    Array[4] = "Array[4]です";
    for(int i=0; i<5; i++)
    if(i==3||i==4)Print(Array[i]);
    前回の回答をもうすこしコンパクトにするとこんな感じになりますね
    if(i==3||i==4)Print(Array[i]);
    この文の意味は 
    もしiが3又はiが4の時Print(Array[i]);をするという意味ですねif()やfor()などで実行されるコマンドが一つの場合
    {}で囲む必要はありませんが囲んでもなんら問題はありません
    for()の支配下にif()がありそのifの支配下にprint()があると理解していただければよろしいのではないかなと思います。

  9. いぞぎんちゃく より:

    「i番目のローソク足でのクローズ値を返す」

    このローソク足って時間は日足ですか? 4時間足とかはないんですか??

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Adsense

Ubuntu で仮想ディスプレイを使う

雑多な備忘録ですが、せっかくなので残しておきます。 Ubuntu 18.04 の resolv.c

PYPIへの登録を10秒でできるようになる方法

pip 使ってますよね Pythonを使っている人であれば、pip installでライブラリ

The art of debugging with GDB, DDD, and Eclipse の読書メモ

GDBの勉強がしたくて、下の本を原著で読んでみました。10年前の本だけど全然現役でした。

JupyterでボタンからJavascriptを実行して追加のアウトプットをさせない方法

Javascriptを実行するとアウトプットセルの行が増える これがとても面倒だった。上の

まだBokehで消耗してるの?これからはPandas-Bokehを使おうぜ

タイトルはあまり気にしないでください。全然、Bokehで消耗する価値があるとは思っています。ただ

→もっと見る

PAGE TOP ↑