2024年3月19日のFX為替予想はこちら

まぐまぐ!殿堂入りメルマガ

メールアドレス
\お得な情報を毎日配信中!/
※下記利用規約に同意のうえ、申し込みください。
1.メルマガへの登録を希望する場合、「登録」ボタンの押下で登録申し込みをするものとします。
2.登録アドレスに対し、当メルマガを配信できるものとします。
3.メルマガの内容の信頼性、正確性又は合法性等について、一切の責任を負いません。
※当ページのリンクには広告が含まれています

【MT4】MQLプログラミング組み込み指標関数による移動平均線の作成

MQLプログラミング

【動画】組み込み指標関数による移動平均線の作成

移動平均線インジケーターのソースコード

//+------------------------------------------------------------------+
//|                                                          ma2.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrYellow
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3
//--- plot Label2
#property indicator_label2  "Label2"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrAqua
#property indicator_style2  STYLE_SOLID
#property indicator_width2  3
//--- indicator buffers
double Buf_0[];
double Buf_1[];
extern int MA_F=50;
extern int MA_S=200;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,Buf_0);
SetIndexBuffer(1,Buf_1);

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
int i,limit;
limit=rates_total-prev_calculated;
for(i=limit-1 ; i>=0 ; i--)
{
Buf_0[i]=iMA(NULL,0,MA_F,0,MODE_SMA,PRICE_CLOSE,i);
Buf_1[i]=iMA(NULL,0,MA_S,0,MODE_SMA,PRICE_CLOSE,i);
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+

MT4の組み込み指標関数で移動平均線を作成する

MetaEditorを開いて、作業してみましょう。

ファイルメニューから新規作成、カスタムインディケータ―を選びます。

名前はma2として次へ、ここは好きな名前で大丈夫です。

イベントハンドラはそのままで次へ、描画プロパティは、今回移動平均線を2本作りますので、2回追加して、色は見やすい黄色と水色にしておきます。

そして完了。

これまで初期値のまま使ってきましたが、計算した指標の数値を直接入れるバッファの名前が長いので短くします。
26行目と27行目、Buf_0、Buf_1にしました。

そうすると、これを活性化させるSetIndexBufferも変更する必要がありますので、34行目と35行目、Label1BufferとLabel2BufferのところをBuf_0、Buf_1に変更します。

ここまでが、準備段階です。

下へスクロールし、内容の記述は、55行目からになります。

int i,limit;
limit=rates_total-prev_calculated;

この次は、for文を記述します。

for(i=limit-1; i>=0; i–)
{

}

この、空いている部分には、移動平均線の組み込み指標関数を記述します。

このfor文、インジケーターをチャートに挿入したときは、「prev_calculated=0」となっているので、「limit=rates_total」となり、for文でループさせて-1ずつ減らし、最終的に0に減らすことでチャート全体の指標を計算することができます。

ここで、次にチャートが動いて新しくバーが出ると、Oncalculateで再計算、rates_totalには全体のバーの数+1が入り、prev_calculatedには全体のローソク足の数が入るので、引き算すると結果は1、それを次のfor文に入れます。

ここで、limit-1で-1された答えの0が変数iに入るので、最新のバーだけ描画されます。MQLでは、1ではなく0番目が、最新のバーでした。

最後に、
今回の目玉である組み込み指標関数を記述します。

記述ルールはこちら。

iMA(①symbol,②timeframe,③period,④ma_Shift,⑤ma_method,⑥applied_price,⑦shift)

中身は引数と言いますが英語なので、日本語にするとこうなります。

iMA(①通貨ペア,②時間枠,③移動平均の期間,④移動平均を右方向にシフトするバーの数,⑤移動平均の種類,⑥移動平均を算出する位置,⑦移動平均の算出バー)

組み込み指標関数iMAの説明

①symbol 通貨ペア

通貨ペアを設定します。「NULL」と書けば、プログラムを挿入したチャートの通貨ペアを使用します

②timeframe 時間枠

計算に使用する時間枠を設定します。「0」で現在のチャート上の時間を使用、1時間足なら60、4時間足なら240、日足なら1440という風に設定します。

③Period 移動平均を算出するバーの本数

5日移動平均なら5、200日移動平均なら200と入力します。
ただ、これだと固定されてしまうので、今回のプログラムでは変数にしてパラメーターで数値を変更可能にします。

そのため、いったん上に戻って、
28、29行目に
エクスターンで変数を宣言しておきます。

ここでは移動平均線を2本引くので、
短期移動平均線をMA_F、
長期移動平均線をMA_Sとしておきます。

extern int MA_F=50;
extern int MA_S=200;

④MA_Shift 移動平均を右方向へずらすバーの数

一目均衡線の遅行線のように右方向へずらす場合、その数を指定します。
特になければ「0」で大丈夫です。

⑤ma_method 移動平均の種類

移動平均の種類を4つの中から選びます。

MODE_SMA 単純移動平均(SMA)
MODE_EMA 指数移動平均(EMA)
MODE_SMMA 平滑移動平均(SMMA)
MODE_LWMA 線形加重移動平均(LWMA)

になります。
今回は、 単純移動平均なのでMODE_SMAです。

⑥applied_Price 適応する価格

計算にどの価格を使うかを指定します。移動平均線では基本的には終値を使うのでPRICE_CLOSEとなっています。他にも始値、高値などいろいろな値で計算できます

PRICE_CLOSE 終値
PRICE_OPEN 始値
PRICE_HIGH 高値
PRICE_LOW 安値
PRICE_MEDIAN (高値+安値)÷2
PRICE_TYPICAL (高値+安値+終値)÷3
PRICE_WIGHTED(高値+安値+終値*2)÷4

⑦shift 現在のバーから何本目のバーの移動平均を算出するかを探します。現在のバーが0で、過去のバーは1、2、3と数字が増えていきます。つまり、変数iを入れればよいです。

組み込み指標関数iMAの記述例

組み込み指標関数iMAで2本の移動平均線を描画

斉藤 学

斉藤 学

サラリーマンで働く傍ら、FXで独自の手法を開発して短期間のうちに50万円から6,900万円まで増やす。 その経験をもとに、扶桑社や成美堂出版から書籍6冊、パンローリングからDVD3本を出版。マネー雑誌への執筆やセミナー講師、投資関連ホームページやFXブログの運営、メールマガジンの発行を行っている。

一緒に読まれている記事

FX初心者おすすめ

サイバーシグナルインジケーターと6大特典プレゼント

MT4自動売買EAサイバードラゴン無料プレゼント

MT4自動売買EAサイバーラッシュ無料プレゼント

~無料プレゼント&サポート~
LINE@登録でMT4インジケーター友だち追加

おすすめFX無料攻略法

  1. 【マーケットナビ】ヒロセ通商で本日の利食い・損切りが分かる!

  2. 【FX売買シグナル】なんと+3,102pips獲得したマネーパートナーズの未来予測

  3. 【松井証券FX】乖離トレードの必勝パターンはこれ!比較ペアチャートと100円からできるFX

  4. 【150以上の取引通貨ペア!】サクソバンク証券のFX

  5. 【国内MT4】スプレッド最狭水準のFXTFでMT4トレードしてみよう

  6. 【FX自動売買】底と天井で売買するFXブロードネットのトラッキングトレード

  7. 【バイナリーオプション攻略法】全勝!+497,363円の利益が出た手法とは?

注目記事ランキング

  1. 1

    【サクソバンクチャート】月曜日の早朝から動く為替レート

  2. 2

    【MT4】チャート上に手書き&描画ツールインジケーター2選

  3. 3

    【FX売買シグナル】なんと+3,102pips獲得したマネーパートナーズの未来予測

  4. 4

    【サンデーダウ】土日に動く中東レートの表示方法と見方を解説

  5. 5

    保護中: 【勝率UP!】曜日や日・月別為替相場の動きでFXを見極める

  6. 6

    【MT4】「sign_alert」シグナルアラートやメール送信をしてくれるインジケーター

  7. 7

    【暴露】FXで勝ちたければ、NYダウを見ろ!

  8. 8

    【暴露】フィボナッチはインチキ、トレードで勝てない理由を解説

  9. 9

    【マーケットナビ】ヒロセ通商で本日の利食い・損切りが分かる!

  10. 10

    【原油・金】WTIとゴールドの商品レート一覧と見やすいチャート

・現在の閲覧者数:5
TOP