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

*

■超直感!MT4プログラミング講座■ 第16回 インディケーターの実働部分

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

こんばんは。キリンです。
先ほどHey!Hey!Hey!の大阪の歌特集をやっていました。
Dreams Come Trueの大阪をメインにした歌がすごい印象に残りました。
東京にいる大阪人にとって、新大阪というのはなじみ深い駅だと思います。
詩にすると味が出ますね。
「新大阪までいつものスウェットで私を迎えにきてた。今日も家に直行かぁ。」
っていう言葉。なんだか愛がありますよね。
さて、今回は第14回の続きです。
インディケーターの主要部分についてお話しようと思います。
難しい・・・かもしれません。
しっかり理解していただければと思います。


第16回 インディケーターの実働部分

■インディケーターのメインプログラム
■全体の大まかな動作の説明
■今回のプログラム中身・MQL定義済み関数と変数の解説
■宿題!
■インディケーターのメインプログラム
今日お話しするのは、たったこれだけの部分です。

//+------------------------------------------------------------------+
//| 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);
}
//+------------------------------------------------------------------+

ですが、かなり奥が深い内容になっています。
まずはプログラムの全体の大まかな説明をします。
■全体の大まかな動作の説明
インディケーターを表示させるとき、
実は全てのローソク足での値を計算させています。
その結果をグラフで表示ているのです。
しかし、一度計算したところでのインディケーターの値は2回目計算しても同じですよね。
ですので、一度計算したところはもう計算しないというプログラムが必要なのです。
そうすることで、プログラム全体が軽くなります。
・インディケーターを表示させようとしたときに、表示しているローソク足全ての点での
 インディケーターの値を計算する。
         ↓
・ローソク足が新しくなったり、最新のローソク足だけ計算する

というのがメインの動作です。
次は、実際にその動作の中身のお話です。
■今回のプログラム中身・MQL定義済み関数と変数の解説
・int start()
プログラムの超重要な部分です。
この関数の{ }の部分が、実際にプログラムの動作する部分になります。
チャートが1tick動くごとに、このstart()が動作します。
↑すっごい大事です。
ちなみに、
int init()は、「インディケーター導入時のみ動作する」ところでした。
復習をかねてこちらもしっかり理解していただければと思います。
・int limit = Bars-IndicatorCounted();
Bars[定義済み変数]
表示しているバー(ローソク足)の本数を返します。
IndicatorCounted()[定義済み関数]
今まで計算したバーの本数を返します。
※この関数は、インディケーターでしか使えません。
上記ふたつによって、int limitの値は、
limit =(全部のローソク足の本数) – (今まで計算したローソク足の本数)
となるわけですね。
この引き算結果は、
limit = (計算したことのないローソク足の本数)
になります。
・ for(int i=limit-1; i>=0; i–)
このfor文の繰り返しの内容は、
(計算したことのないローソク足の本数)から1を引いて、

iが0以上なら繰り返し、

iを1ずつ引いていく
という中身になります。
なぜ、limit -1 とするかといいますと、
「最新のローソク足は絶えず動き続けているので、
 何度も計算しなおす必要がある」
からですね。
・Buf[i] = iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, i);
Bufは第14回で定義済み。
ここで新しい関数は、iMA()というものですね。
このiMAは非常に便利で、おそらくこれから先何度も使う関数になると思います。
これについては細かく説明したいので、次回にしますね。
ここでは、Buf[i]に値が割り当てられているのを理解していただければと思います。
インディケーター導入時の初回の動作は
(計算したことのないローソク足の本数)= (全てのローソク足)
になるので、全てのローソク足分、Buf[i]に値が割り振られます。
初回移行は、新しいローソク足の部分のみ、Bufに値が割り振られます。
基本的には、Buf[0]だけ計算されると思っていただいても問題ないです。
ちなみに、Buf[0]といえば最新のローソク足のBufの値、
Buf[1083]といえば、最新のローソク足から1083前のBufの値になりますので
復習をかねて説明させていただきます。
・return(0);
プログラムの終了を告げています。
0をreturnさせる必要性はないのですが、
「エラーがなかった」
ということを、0で表すのでこのように0でreturnさせるのがルールになっています。
そこまで深く考える必要はないです。
iMAの動作はとりあえず保留ということで、
それ以外の基本的な動作の流れを説明しました。
ご理解いただけましたでしょうか!?
ちょっと複雑になってきたので心配です。
明日でまたさらに補足の説明を行っていきますね!
今日の宿題はしっかり考えていただければと!
Bufの配列の中身全てに[93.30]を入力するインディケーターのfor分を作ってください。
そして、ドル円のチャートで実際に動作させてみましょう。
ヒント:Bufの中身全てに93.30を入力するにはどこを変更すればいいかを考えれば・・・
ちなみに、元ファイルはこれです!
これのほんの一部を変更するだけで、赤色の直線を表示するインディケーターになります。
ぜひ挑戦してみてくださいね!
$Trading Systems ~経済的自由を得るために~
最後までお読みくださり、誠にありがとうございます!

//+------------------------------------------------------------------+
//| 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);
}
//+------------------------------------------------------------------+
にほんブログ村 為替ブログへ 
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プログラミング講座■ 第9回 for関数を使ってみよう

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

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

■超直感!MT4プログラミング講座■ 第31回 サブルーチンを使えるようになろう

おはようございます。キリンです。 昨日、家の近くの図書館に行ってきました。 そこで借りた本の一冊に、 「生き方」(稲盛 

記事を読む

no image

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

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

記事を読む

no image

■超直感!MT4プログラミング講座■ 第2回 変数を覚えよう!

こんばんは。キリンです。 この講座の第1回で、非常に大きな反響をいただけました。 MT4のプログラミングに興味持っている

記事を読む

no image

■超直感!MT4プログラミング講座■ 第6回 インディケータープログラムの解説

こんにちは!キリンです。 GW真っ最中! 私は引っ越し先を探してきました。 納得のいく部屋を見つけて、さらに洗濯機も購入

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

Comment

  1. りある より:

    SECRET: 0
    PASS:
    1000文字超えたのでメールします。
    多分、色んな方法があるんだと思いますが、とりあえず出来たものを送ります。

  2. junky より:

    SECRET: 0
    PASS:
    Buf[i] = iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, i);

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

  3. SECRET: 0
    PASS:
    >りあるさん
    メッセージの内容素晴らしかったです!
    使わせていただきますのでw
    コメントまでありがとうございます!

  4. SECRET: 0
    PASS:
    >junkyさん
    ずばり正解ですw
    今回の答えはこれだったんですねー。
    さすが junkyさんっす!
    コメントありがとうございます!

  5. fx_nakabatosu より:

    SECRET: 0
    PASS:
    「最新のローソク足は絶えず動き続けているので、何度も計算しなおす必要がある」
    ↑ここが分かりません。
    プログラマー世界の検索法か何かで決まっているテクニックですか?最近C言語というかフローチャート勉強しています。

  6. SECRET: 0
    PASS:
    >fx_nakabatosuさん
    コメントのお返事がもれていました!
    申し訳ありません。
    最新のローソク足の「終値」は常に変化しているのは
    チャートを見ていただいても分かると思います。
    ローソク足の確定まで計算し続ける必要があるんです。
    ご参考になりましたでしょうか?
    コメントありがとうございます!

  7. fx_nakabatosu より:

    SECRET: 0
    PASS:
    現在値を0として数える「shift値」と、
    Bars-IndicatorCounted()のローソク足の「本数」とを
    混同して計算していました。
    ありがとうございました。m(_ _ )m

  8. ホネクス より:

    SECRET: 0
    PASS:
    チャートを見て
    自分なりに分かりやすく解釈すると
    for(int i=limit-1; i>=0; i–)
    {
    Buf[i] = iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, i);
    }

    for(int i=時間軸の計算)
    {
    価格軸の回答 Buf[時間軸の回答 i] = 価格軸の計算;
    }
    という解釈でよろしいのでしょうかね
    Buf[i] = iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, i);
    ↑の記述がなにをやろとしているか分からなかったので Bufの正体が価格軸の数値である事を 回答を見てやっと分かりました。.

  9. ホネクス より:

    SECRET: 0
    PASS:
    故に このインジの動きは
    Buf[i] = ここで計算された価格帯に;
    足毎又はティック毎?に点をポンポン置いてく動きをするわけなんですね?
    で点が連なって曲線又は棒線に見えると….

  10. ホネクス より:

    SECRET: 0
    PASS:
    Buf[i]
    だから 足毎 ティック毎というより
    最新足よりi本前の足からポンポンという事になるのか…

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 ↑