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

*

■超直感!MT4プログラミング講座■ 第17回 iMA()に慣れよう

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

こんばんは!キリンです。
今日、鮒谷さんのかの有名なメルマガ、平成進化論において面白い話が載っていました。
簡単にご紹介させていただきますね。
鮒谷さんに、既に超有名起業の内定をもらった大学4年生から
メッセージが届いたそうです。
それが、下記の内容でした。

 --------------------------------------------------------
 (前略)
 
 無理を承知でお願いするのですが…
 自分を鮒谷さんの雑用にしてくれないでしょうか!

 未熟な自分のロールモデルになって欲しいのです。
 

 オフィスの掃除からゴミ出し、買いもの、鞄持ちなど
 なんでもやります。
 
 授業がある水曜日の午前以外であればいつでも行きます。
 もちろん無給でお願いします。
 
 必要あれば、寝袋も持っていきます。

 (後略)
 --------------------------------------------------------
「やられたーっ!」って思いました。
素晴らしい行動力ですよね。
「学ぶために、一緒にいさせてください!なんでもしますから!」
という素晴らしい姿勢をお持ちの彼。
また歳下に先を越された(w
負けたとは思いませんが、大学4年のときはこの大学生のような意識を持ち合わせていなかった。
大学のときからこのような意識であったらよかったのに・・・。
このギャップをバネにして頑張っていかなきゃなりません。
この件に関しては、毎日コツコツ書いているサブブログで
本日書いてみようと思っています。
よければご覧になっていただけると嬉しいです。

風来のキリンの「人とのつながりを大切に」
http://ameblo.jp/furai-kirin/

・・・にしても悔しいw
さて、では今回の講義です。
まずは前回の宿題のおさらいと解説を。
■前回の宿題の回答と解説
すばらしい内容をまたまたりあるさんからいただきました。
ぜひ、その内容に沿ってお話させてもらおうと思います。
りあるさんが私にくださったメッセージには、
全てりあるさん自身作成されたプログラムが載せられていました。
それが、下記のプログラムです。

//+------------------------------------------------------------------+
//| test.mq4 |
//| Copyright ゥ 2010, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright “Copyright ゥ 2010, MetaQuotes Software Corp.”
#property link “http://www.metaquotes.net”
#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);
//—-
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//—-
//—-
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
int limit = Bars-counted_bars;
for(int i=limit-1; i>=0; i–)
{
//Buf[i] = iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, i);
Buf[i] = 92.30;
//—-
}
//—-
return(0);
}
//+------------------------------------------------------------------+

基本的な構成としては、私が前回ご紹介したプログラムの内容と変わっていません。
まず、これを元に前回の宿題の回答を説明させていただきます。

~前回の宿題~
Bufの配列の中身全てに[93.30]を入力するインディケーターのfor分を作ってください。
そして、ドル円のチャートで実際に動作させてみましょう。
ヒント:Bufの中身全てに93.30を入力するにはどこを変更すればいいかを考えれば・・・

この回答は、りあるさんのプログラムでは、
//Buf[i] = iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, i);
Buf[i] = 92.30;
この部分になります。
まず、私のプログラムで書かれていた、
Buf[i] = iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, i);
の部分の先頭に「//」を入れてコメント化(メモ化)しています。
これを、「コメントアウト」といい、元のプログラムを残し変更した部分を分かりやすくするという
プログラミング上の手法なのですが、それを実践されています。
素晴らしいです。勉強されているのが伝わってきます。
そして、実際の回答部分、
Buf[i] = 92.30;
です。
これで、Buf[i]の中身が92.30になります。
iが0から表示バーの本数分変化するので、
Bufの中身すべてが92.30になります。
これが今回の答えですね。
junkyさんのコメントなども、簡潔にお答えなさった良答だ思います。

インチキ技ですが・・・
Buf[i] = iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, i);

Buf[i] = 93.30;
にしたらOKでした(笑)

ちなみに、インチキでもなんでもありません。
これが今回の答えです。
りあるさんのプログラムの中で、
ぜひ皆さんにご紹介したい場所があるんです。
それが、この部分。
int counted_bars=IndicatorCounted();
です。
関数IndicatorCounted()の値を、counted_barsという変数に置き換えています。
これ、意外に重要なんです。
全てMQL定義済み関数をそのまま呼び出してしまうと、
プログラム全体が長くなり、さらに関数が「引数」を必要とする場合、
さらに関数文全体が長くなってしまいます。
それを避けるために、このように関数の出力を変数に置き換えるんです。
ぜひぜひ、実践してみてくださいね!
では、本日の本題です。


第17回 iMA()に慣れよう

■iMA()の構成
■iMA()の構成
まず、iMA()関数は次のようにMQLで定義されています。
double iMA(string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)
「リファレンスのリンク」
前から順を追って説明していきますね。
▼関数の定義
・double iMA
iMA関数の戻り値が「double」型であることを定義しています。
▼引数
・string symbol
「通貨ペア」のシンボルを入力します。
USDEURや、USDJPYなどと入力することができます。
※インディケーターを導入した通貨ペアを選択したい場合は、
 NULLと入力します。
・int timeframe
時間軸を選択します。
導入した通貨ペアの時間軸で表示させたい場合は、0と入力します。
時間軸を変更したい場合は、
MQLの中ではあらかじめ定数として定義されている時間軸がありますので、
「リンク先」を参考に、入力してくださいね。
※このページでのConstant定数というのは、MQLで定義済みの「定数」です。
 定数は、変数と同様に文字列が割り当てられています。
 変数との違いは、「値の変更ができない」点です。
 定数の出力は、リンク先でいうと、「Value値」になります。
 このValue値をConstant定数の変わりに入力しても同じ値になります。
・int period
移動平均線を計算する区間を指定します。
移動平均線とは、表示しているローソク足から
period分後ろまでのローソク足の平均値をグラフ化したものですよね。
そのperiodを変更できます。
・int ma_shift
通常はほとんど使いません。
ここに割り当てた数値だけ、右にグラフを移動させることができます。
・ma_method
!非常に面白い部分です!
ここの数値を変更することで、移動平均線の種類を変更できます。
「リンク先」を参照してみてくださいね。
ここの定数を、MODE_SMAから、MODE_EMAに変更するだけで、
「単純移動平均」から、「指数移動平均」に種類を変更することができるんです。
平滑移動平均や、線形加重移動平均などにも定数を変更するだけで簡単に行えます。
ぜひ、変更してみてくださいね。
・int applied_price
この数値を変更することによって、移動平均を算出する基準を変更することができます。
これも「リンク先」をご参照いただければと。
オープンやクローズ、最安値、最高値だけでなく、中央値なども使えるのが面白い点ですね。
・int shift
!超重要な部分です!
このshiftの値で、移動平均を計算する場所を指定しています。
0と入れれば、最新のローソク足における移動平均の値を返し、
100と入れれば、100本前のローソク足における移動平均の値を返します。
ですので、前回のプログラムでは、
Buf[i] = iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, i);
このように、Bufの[ ]の中と iMAの一番最後の引数にiがあるんですね。
i本目の移動平均の値を、Buf[i]に割り当てているんです。
そして、iを0から表示ているチャートのバーの本数分計算させれば、
全てのグラフが作成できますよね。
iMAの説明だけでも結構長くなっちゃいましたね。
上記でわからないことがありましたらドンドン質問ください!
それを今回の宿題にしたいと思います。
この部分を理解できたら、MQLのプログラミングが一気に楽しくなりますよ!
次回は実際にこのインディケーターの各場所を色々いじって遊びたいと思います。
最後までお読みくださりまして、ありがとうございます^^

にほんブログ村 為替ブログへ 
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プログラミング講座■ 第1回 プログラミングって何?

こんにちは!キリンです。 今日から一週間に一回くらいの更新頻度を目標に、 MT4プログラミング講座を更新していきます。

記事を読む

no image

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

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

記事を読む

no image

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

おはようございます。キリンです。 昨日、半年振り以上にバスケをしてきました。 今日の筋肉痛はやばいです(w サラリーマン

記事を読む

no image

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

おはようございますっ!キリンです。 脱サラ後は朝のブログを習慣にする予定です。 毎日文章を書くことは、文章力をつける上で

記事を読む

no image

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

おはようございます。キリンです。 今回は記念すべき第30回ですね! 開始当初から考えると思ったより速いペースでの達成です

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

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

こんにちは!キリンです。 早いもので、1週間で5回まで来ちゃいましたね。 皆さんもしっかり付いてきてくれているので、私と

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

Comment

  1. junky より:

    SECRET: 0
    PASS:
    iMAっていう名前の「i」って、この引数「i」のことだったんですね。。。
    MQL定義済み関数って、大文字から始まるものだと思っていたので、違和感を感じていたんですが、妙に納得しました(笑)

  2. SECRET: 0
    PASS:
    >junkyさん
    そういう意味の「i」だったんですね。
    私もよく分かってません^^;
    今日もコメントありがとうございます!

  3. Purplefunnel より:

    SECRET: 0
    PASS:
    初めまして。
    数日前に初めてこちらを知り、第1回から読ませていただいています。
    で、どうでも良いことなのですが・・・(汗
    >iMAっていう名前の「i」って、この引数「i」のことだったんですね。。。
    >そういう意味の「i」だったんですね。
    横からすいません。
    indicators の 「i」ではないでしょうか?
    iADX
    iATR
    iBands



    iMA
    iOsMA
    などなど・・・

Purplefunnel にコメントする コメントをキャンセル

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

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 ↑