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

*

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

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

こんにちは!キリンです。
早いもので、1週間で5回まで来ちゃいましたね。
皆さんもしっかり付いてきてくれているので、私としても嬉しい限り!
GWに入ってから実家に戻っているのですが、
起業に関して、両親の承諾が得られていないため肩身が狭いです。
「ネット関係の起業をする」と伝えてしまっており、
家でおおっぴらにパソコンできないんですね。
今月でやめるっていう話は結局しないほうが親のためによさそうだと、
思いました。
さて私事はこのくらいにして、今回の講座に入りたいと思います!


前回の問題の回答と解説

前回の話は、一番理解しにくい部分だと思っていたのですが、
みなさんの吸収力の速さにびっくりです。
まずは前回の問題の答えから。
Q.

int RingoNoGoukeiNedan(int RingoNoKosuu, int RingoNoTanka = 80, double ShouhiZei = 1.05){
int GoukeiNedan = RingoNoKosuu * RingoNoTanka * ShouhiZei;
return(GoukeiNedan);
}

とした場合、この関数はどのように数値を入力すればいいでしょうか?

A.
int x = RingoNoGoukeiNedan(5,80,1.05);
が正しい形。
コメントをいただいた「りある」さん、「junky」さん、アメーバなぅで
お答えになった「あやと ゆう」さん皆さん正解です。
引数が増えれば、その分だけ「,」で区切って引数を指定してあげなければいけないんですね。
実はこの問題、ちょっとした意地悪問題になってたんです。
意図はしていなかったのですが^^;
int RingoNoGoukeiNedan(int RingoNoKosuu, int RingoNoTanka = 80, double ShouhiZei = 1.05)
引数の部分で、上記のように変数を定義したあとに「 = 」で値を指定していますよね。
これを「初期値を指定する」というんです。
初期値を指定するとどうなるか。
「初期値を指定した部分は省略できる」んです。
ということは、
int x = RingoNoGoukeiNedan(5,80,1.05);
も正解ですが、80,1.05は既にあらかじめ指定されているので、省略して
int x = RingoNoGoukeiNedan(5);
と表すこともできます。
ただ、りんごの単価と消費税を変更したい場合には、
後ろ二つを指定しなければならないんですね。
初期値のまま用いるときはワザワザ入力する必要がないということです。
初期値の設定、ご理解いただけましたでしょうか?
さて、ここからが今回の講義の内容です。


第5回 MQL基本関数を覚えよう!

関数という難関をクリアしたみなさんですから、
プログラム上の文字に対して今までほど抵抗を感じることはなくなってきたのではないか
と思っています。
今回はちょっと本格的なMQLの中身についてお話します。
初回にインディケーターを作るのが当面の目標だというお話をしました。
そのインディケーターのプログラムの中身をもう一度見直してみましょう。

//+------------------------------------------------------------------+
//| MA Kirin.mq4 |
//| Copyright Kirin 2010, Forex Trading Laboratory. |
//| http://ameblo.jp/ftlabo-kirin/ |
//+------------------------------------------------------------------+
#property copyright “Copyright Kirin 2010, MetaQuotes Software Corp.”
#property link “http://ameblo.jp/ftlabo-kirin/”
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_level1 0
// 指標バッファ
double Buf[];
// 外部パラメータ
extern int MAPeriod = 13;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+

int init()
{
//—- indicators
// 指標バッファの割り当て
SetIndexBuffer(0, Buf);
// 指標ラベルの設定
string label = “MA(“+MAPeriod+”)”;
IndicatorShortName(label);
SetIndexLabel(0, label);
return(0);
//—-
}

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+

int deinit()
{
//—-
//—-
return(0);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+

int start()
{
//—-
int limit = Bars-IndicatorCounted();
for(int i=limit-1; i>=0; i–)
{
Buf[i] = iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, i);
}
//—-
return(0);
}

//+------------------------------------------------------------------+

今まで勉強した関数と変数の部分に色をつけてみました。
「あー、これ関数の定義してる。」
「ここで変数の定義を行っているんだ」
などと簡単に理解してもらえればいいと思います。
「関数と変数が分かっても、それがどのように働くのかが分からない」
というのが、皆さんの今の状態ではないでしょうか。
今回は基本的なMQLの関数の説明を行っていきます。
上記のプログラムの中身に沿って、上から説明していきます。
■ini init(){}
init()の{}の中身は、
「プログラム導入時に動作させるプログラム」
になります。
プログラムを起動するときの初期設定を行うと思ってもらえればいいです。
■ini deinit(){}
init deinit(){}は、init()の逆で
「プログラム除去時に動作させるプログラム」
になります。
プログラムで表示させた文字を消したり、線を消したりします。
取り除くときに、線や文字が残ったままになっていると見づらいですよね。
■ini start(){}
これがメインのプログラム部分になります。
ini start(){}の{}の中身は、
為替が動くごとに、1tick動くごとに{}の中身のプログラムを実行させます。
通常の動作では、
init()が動作
  ↓
start()が動作しつづける
  ↓
deinit()で除去動作
となります。
これでグラフを表示させたりしてるんですね。
かなりプログラムの中身をお話できてきた気がします!
今回の内容はご理解いただけましたでしょうか?
簡単な説明のみですので、ちょっと心配です。
気軽にコメントくださいね^^
次回は、インディケータープログラムの今まで説明していない細かいところを
お話しようと思います。
最後までお読みくださりまして、誠にありがとうございます。
ゴールデンウィークを満喫してくださいね!

にほんブログ村 為替ブログへ 
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プログラミング講座■ 第28回 決済スプリクトの作成(1)

こんにちは!キリンです。 引越しも終わり、かなり落ち着いてきました。 時間的制約が皆無になると、セルフコントロール能力が

記事を読む

no image

■超直感!MT4プログラミング講座■ 第7回 インディケーター表示のために

没になった回です。 内容が雑なため、第8回へ移動していただければと思います。 興味のある方はご覧いただければと思います。

記事を読む

no image

■超直感!MT4プログラミング講座■ 第14回 インディケーターの定義部

こんばんは!キリンです。 最近ピグによく顔を出しています。 よければ遊びに来てくださいね。 ではでは、本日の講義です。

記事を読む

no image

■超直感!MT4プログラミング講座■ 第29回 決済スプリクトの作成(2)

こんにちは。キリンです。 住民票の変更も行い、年金も国民年金に切り替えました。 免許証の住所変更にもこれから行く予定です

記事を読む

no image

■超直感!MT4プログラミング講座■ 第33回 発注スプリクトをサブルーチン化する(2)

こんにちは。キリンです。 昨日、同い年の投資を始めている医大生とお会いしてきました。 すでに何度か事業にもチャレンジされ

記事を読む

no image

■超直感!MT4プログラミング講座■ 第23回 ボリンジャーバンドのおさらい(2)

こんばんはっ!キリンです。 平日に私服で電車に乗っているのが非常に違和感を感じます。 でも、脱サラしたんだなっという感無

記事を読む

no image

■超直感!MT4プログラミング講座■ 第11回 配列を覚えよう

こんばんは。キリンです。 最近、各EAの動向で一喜一憂してしまっています。 精神的によろしくないですな^^; クロスファ

記事を読む

no image

■超直感!MT4プログラミング講座■ 第22回 ボリンジャーバンドのおさらい

こんばんは!キリンです。 お酒を飲んでからの講義は難しいですね。 何か対策を考えなければっ! 頑張って書いていきます。

記事を読む

no image

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

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

記事を読む

no image

■超直感!MT4プログラミング講座■ 第24回 インディケーターの補足

こんばんは。キリンです。 第24回 インディケーターの補足 ■インディケーターをサブウィンドウに表示する ■グラフに

記事を読む

Comment

  1. junky より:

    SECRET: 0
    PASS:
    int RingoNoGoukeiNedan(int RingoNoKosuu, int RingoNoTanka = 80, double ShouhiZei = 1.05)
    が、
    int x = RingoNoGoukeiNedan(5);
    と省略できるとのことですが、
    もし、
    int RingoNoGoukeiNedan(int RingoNoTanka = 80, double ShouhiZei = 1.05,int RingoNoKosuu,)
    の順になってたら
    int x = RingoNoGoukeiNedan(,,5);
    でOKなのでしょうか?

  2. SECRET: 0
    PASS:
    >junkyさん
    残念ながら省略というのは後ろにしかできないんですね。
    初期値を最初に与えてしまった場合、それ以降のもの全てに初期値を与えなければならなくなります。
    ですので、
    int RingoNoGoukeiNedan(int RingoNoTanka = 80, double ShouhiZei = 1.05,int RingoNoKosuu,)
    こういったことは不可能です。
    省略する可能性のあるものから、後ろに置くのが基本ですね。
    でも、すごい理解されていると思います!
    この質問は、今までの全てを理解していないと出ないものだと思いますので^^
    ありがとうございます!

  3. 矢吹 丈 より:

    SECRET: 0
    PASS:
    本日(12/25) 第1回~第5回を拝見しました。
    とてもわかりやすくて勉強になります。
    本で勉強するより、ずっといいいです。

  4. ホネックス より:

    SECRET: 0
    PASS:
    前回の問題の所で
    int RingoNoKosuu の数値が文中宣言されていないので
    答えが正しくは
    int x = RingoNoGoukeiNedan(80,1.05);
    に….なるのでしょうかねぇ….

矢吹 丈 にコメントする コメントをキャンセル

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

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 ↑