トレード備忘録 & MT4/MT5インディケータ及びEAの開発

日々のトレード備忘録及びMT4/MT5に関する事項

MT4/MT5プライス表示インジでチャートが明るくなった

2017-12-18 14:00:37 | 投資

 メタトレチャートを使うようになると、他のチャートがおもちゃのようになり手放すことができなくなる。それでも、初めてMT4やMT5をダウンロードした時には、デフォルトで現れる4枚のチャートはとても殺風景で期待していた姿とは少し違うなという感触を持ってしまう。 

 一般のFX会社のトレード画面と大きく異なるところは、プライスボードの表示方法にあるのではないかと思う。一般には、10~20ペアの価格ペインがずらりと並んでいて、ティックの度にチカチカと目まぐるしく価格が変化している。いかにも戦闘モードに突入という感じで、どこかパチンコ屋さんやカジノの雰囲気にも似ている。 

 パチンコ屋さんやオンラインカジノの雰囲気は必要ではないが、MT4/MT5のチャートはいかにも殺風景なのだ。チャート右端に示される現値の表示も文字が小さくてよく読めない。比較的最近、ワンクリック・トレードパネルが用意されたが、筆者のように12ペアの通貨ペアを表示させるとこのパネルが画面の大半を覆ってしまって肝腎のローソク足が見えない。そもそもこのパネルは短期取引用に設置されたものであり、ピップスの表示が主であって、価格レベルの把握には不向きなのである。下図参照

 

 メタトレシステムの良いところは、もし何か不自由なところがあれば、ご自分で自由に作ってくださいというところであろう。それなら、こちらで用意するしかないではないかということで、次のようなプライスパネル(Price_Ticker_MT4.ex4及びPrice_Ticker_MT5.ex4)を作成してみた。少し、違った印象にならないだろうか。

 

拡大図

 

Price_Tickerの説明 

① プライスの表示

 一番上に表示されるのは、当該通貨ペアのプライス。青色系の表示はローソク足が陽線、赤色系の表示はローソク足が陰線であることを表している。どちらもそれぞれ2色に分けられていて、より青いのは現値が直前の足の高値以上、より赤いのは現値が直前の足の安値以下を示す。色に対する感覚は人それぞれなので、ダイアグラムボックスで自由に変えられるようにしている。色の変化など必要なければ、全て同じ色にしておけばよい。 

② Spread

プライスの下に表示されるのはスプレッドで、固定スプレッドでない限り、これもリアルタイムで変化する。プライスの小数点以下の表示桁数に拘わらず、ピップス表示となっている。 

③ Hi to Lo

日足ベースの本日の高値と安値の幅を表示、本日の日足で現値までの高低差をこちらもプライスの小数点以下の表示桁数に拘わらず、ピップス表示にしている。 

④ Daily AV

日足ベース、高値と安値の高低差の過去14日平均、いわゆるパラメータを14とするAverage True Range(ATR)を、プライスの小数点以下の表示桁数に拘わらず、ピップスで表示している。③とも比較して相場判断に利用、更にはトラリピのトラップ幅設定等にも参考にもなる。前日から遡って14日間の平均値である。現在のローソク足の値幅は確定していないので不算入となっている。パラメータの期間は選択可能になっている。 

(注)

 筆者はもともとMT4用に開発した同種のPrice_Ticker.ex4を使っていたのですが、今回、MT5版開発に当たってこれを全面的にリニューアルしたものです。MetaGenicFX社の勧めもあり、MT4版・MT5版併せて公開しました。ご興味のある方は、https://metagenicfx.thebase.in/ まで。殺風景なメタトレチャートが、より明るく活動的になれば幸いす。


MQL5超入門 iMAを利用したインジケータ(その二)

2017-12-09 14:04:34 | 投資

 前回、「とあるMetaTraderの備忘秘録」で取り上げられた掲題のプログラムをレビューし、最新のMT5で稼働させるための必要な変更・加筆をいたしました。大変シンプルなプログラムながら、MQL5理解のためには絶好の練習材料でもありました。 

 移動平均線であれば、MT5にトレンド系指標として標準搭載されているインジケータ Moving Averageを使えば、SMAであれEMAであれMAの種類やMA期間を自由に選択して、簡単にチャートに表示させることができます。ただし、Moving Averageのソースコードは公開されていません。 

 一方、前回修正・加筆したインジケータでは、MAの期間は変数 MAPeriodを設定してその選択ができましたが、移動平均の種類(SMA、EMA等)の選択はできません。MT5の移動平均線の種類はMT4のように変数として設定できない仕様になっているからです。でも、実際にMoving Averageではその選択ができているのですから、工夫をすれば標準搭載のMA同様のプログラムに変身させることができるはずです。 

 場合分けには必需品でもある switch文を利用して目的を達成することができました。前回のプログラム中、// 外部パラメータと// 初期化関数を下記の通り変更することで、プログラム完成です。(変更部分のみ) 

// 外部パラメータ

input int MAPeriod = 10;   // 移動平均の期間

input int MAtype = 0; //0=SMA,1=EMA,2=SMMA,3=LWMA

 // 初期化関数

int OnInit()

{

    // 指標バッファの割り当て

    SetIndexBuffer(0,MALineBuffer,INDICATOR_DATA);

    // テクニカル指標の初期化

    switch(MAtype)

    {

      case 0:

      MA_handle = iMA(_Symbol,0,MAPeriod,0,MODE_SMA,PRICE_CLOSE);

      break;

      case 1:

      MA_handle = iMA(_Symbol,0,MAPeriod,0,MODE_EMA,PRICE_CLOSE);

      break;

      case 2:

      MA_handle = iMA(_Symbol,0,MAPeriod,0,MODE_SMMA,PRICE_CLOSE);    

      break;

     case 3:

      MA_handle = iMA(_Symbol,0,MAPeriod,0,MODE_LWMA,PRICE_CLOSE);

      break;

     }

      return(INIT_SUCCEEDED);

 }

 

 

 

 


MQL5超入門 iMAを利用したインディケータ

2017-12-08 22:45:45 | 投資

 「とあるMetaTraderの備忘秘録」(2009-08-27)にて、MT5で作動する移動平均線のプログラムをfaiさんが試作されました。当時はMT5 β版がリリースされたばかりで、実際に動作確認をできる状況にはなかったようです。MT5がMT4の後継システムとなることがはっきりした現在、筆者もMQL5の研究に努力中ですが、今回、改めてこのプログラムをレビューしてみることにしました。作成されたオリジナル・ソースコードは下記に掲載。

http://d.hatena.ne.jp/fai_fx/20090827/1251300733

 上記プログラムをMT5エディターにコピーしてみると、コンパイルは通りましたが、実際にチャートに挿入してみても目的のインジは描画できませんでした。つぶさに調べてみて、次のような問題点に思い至りました。

① CopyBuffer()の3番目と4番目の引数が逆

CopyBuffer()の3番目の引数はコピーの開始位置、そして4番目の引数はコピーすべきバーの本数となっています。それゆえ、CopyBuffer()の3番目と4番目の引数が逆にする必要があります。

② MT4 IndicatorCounted()とMT5 prev_calculatedの違い

MT4では既に計算済みの1本前までのバーの本数を返すのに対して、MT5では全本数を返すことになっています。この点を変数limitで調整しました。

③ テクニカル指標の終了処理関数を設定

MA_handleの初期化において、MT5システムにiMAの計算をさせているので、指標終了時には、IndicatorRelease()でその解放を行うこととしました。(追加)

④ オリジナルでは移動平均線の期間は10に限定していますが、汎用性を持たせるため、期間に外部変数を設定して選択可能としました。(追加)

 修正および加筆後のソースプログラム

// プリプロセッサ命令(プログラム全体の設定)

#property indicator_chart_window

#property indicator_buffers 1

#property indicator_plots   1

#property indicator_label1  "MALine"

#property indicator_type1   DRAW_LINE

#property indicator_color1  Red

#property indicator_style1  STYLE_SOLID

#property indicator_width1  3

 // 指標バッファ用の配列の宣言

double         MALineBuffer[];

// テクニカル指標ハンドル

int            MA_handle;

 // 外部パラメータ

input int MAPeriod = 10;   // 移動平均の期間 

// 初期化関数

int OnInit()

  {

    // 指標バッファの割り当て

    SetIndexBuffer(0,MALineBuffer,INDICATOR_DATA);

     // テクニカル指標の初期化

    MA_handle = iMA(_Symbol,0,MAPeriod,0,MODE_SMA,PRICE_CLOSE);

    return(INIT_SUCCEEDED);

  }

// 終了処理関数

void OnDeinit(const int reason)

{

   // テクニカル指標の解放

   IndicatorRelease(MA_handle);

}

// 指標計算関数

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 limit = rates_total - prev_calculated;

    if(limit == 0) limit = 1;

    // 指標バッファのコピー

    int copied = CopyBuffer(MA_handle,0, 0,limit,MALineBuffer);

    if ( copied < 0 ) return (0);

    return(rates_total);

  }

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

(注)最後から2行目、copied < 0はオリジナルでは、< = となっています。マイナス記号とイコール記号を続けると、なぜかこのブログでは書き込めなくなりました。エディターにコピーされる際には、イコール記号をつけ足してください。