プログラミングでアイデアを具現化したい

あらゆるものを具現化するためにプログラミングを始めました。主にC#

MT4 カスタムインディケータの作成方法

新MT4対応 FXメタトレーダープログラミング入門より

次はカスタムインディケータを作る
f:id:tos5511:20160208211137p:plain

インディケーターの名前記入
f:id:tos5511:20160208213448p:plain

イベントハンドラの選択。タイマーとか。今回は使わない
f:id:tos5511:20160208213635p:plain

サブウインドウを使う場合はチェックを入れる(コードからも設定できる)
f:id:tos5511:20160208213802p:plain

出てくるソースコード

//+------------------------------------------------------------------+
//|                                                      indTest.mq4 |
//|                                                          tos5511 |
//|                                   http://tos5511.hatenablog.com/ |
//+------------------------------------------------------------------+
#property copyright "tos5511"
#property link      "http://tos5511.hatenablog.com/"
#property version   "1.00"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

int OnInit() //初期化関数
  プログラムがチャートに挿入された時の処理

int OnCalculate() //指標計算関数
  テクニカル指標の計算が必要となるタイミング(価格が更新された時)

//指標をチャートと同じウィンドウにプロットさせる場合
#property indicator_chart_window
//指標をチャートと別のウィンドウにプロットさせる場合
#property indicator_separate_window
//プロットさせる指標の数を指定するNに実際の個数を入れます
#property indicator_buffers N
//指標バッファに配列を関連付ける関数
bool SetIndexBuffer(int index, double buffer[]);
//①index:指標インデックス(0~511の範囲の整数値で指定)
//②buffer[]:指標バッファと関連付ける配列
//戻り値 成功の場合「true」、失敗の場合「false」

とりあえず終値5本を結ぶラインの単純インディケータを描写

//+------------------------------------------------------------------+
//|                                                      indTest.mq4 |
//|                                                          tos5511 |
//|                                   http://tos5511.hatenablog.com/ |
//+------------------------------------------------------------------+
#property copyright "tos5511"
#property link      "http://tos5511.hatenablog.com/"
#property version   "1.00"
#property strict
#property indicator_chart_window //チャートウィンドウに表示
#property indicator_buffers 1 //指標バッファの数

double Buf[]; //指標バッファ用の配列の宣言

//初期化関数
int OnInit()
{
   SetIndexBuffer(0, Buf); //配列を指標バッファに関連付ける
   return(INIT_SUCCEEDED);
}

//指標計算関数
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[])
{
   Buf[0] = Close[0];
   Buf[1] = Close[1];
   Buf[2] = Close[2];
   Buf[3] = Close[3];
   Buf[4] = Close[4];
   return(rates_total);
}

実行結果
f:id:tos5511:20160208220206p:plain

今日は眠い・・ここまで