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

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

MT5プログラムの難しいところ

2018-01-13 11:43:58 | 投資

 最新のMT5ランゲージMQL5では、問題となってきた様々な欠点が解決されている。現在ではMT4と全く変わらない環境が、より高度に装備化して提供されている。MetaQuotes社が自信をもって、MT5への統合を宣言していることも頷けるのである。

 

 ただ、これまでMT4でなんとかEAやインジケータを作成してきた人でもなかなか理解し難いところがある。筆者の経験から申し上げると、一つは、組込みテクニカル関数の扱い方であり、あと一つはトレード関数それ自体の難しさだ。特にトレード関数の難解さは、MT4とは比較できない複雑さであり、そのままの状態ではとても使えた代物ではない。今回は、トレード関数について少し述べてみたい。

 

 そもそも、MT5のトレード関数は、

OrderSend(MqlTradeRequest& request, MqlTradeResult& result)

ただ一つである。これでMT4OrderSend()OrderModify()OrderClose()等全てのトレード系の命令を代用してくれというのだ。引数は、requestresultの二つとなっている。一つの引数の中身は15個程からなる構造体であり、見ただけで嫌気を誘う。とても読む気にはならないが、参考までにrequestの中身は次のようになっている。

struct MqlTradeRequest

{

 ENUM_TRADE_REQUEST_ACTIONS  action;

  ulong                                 magic;

  ulong                                 order;

  string                                 symbol;

  double                                volume;

  double                                price double                               

   double                                stoplimit;

 double                                sl;

 double                                tp;

 ulong                                 deviation;

 ENUM_ORDER_TYPE                 type;

 ENUM_ORDER_TYPE_FILLING       type_filling;

 ENUM_ORDER_TYPE_TIME          type_time;

 datetime                              expiration;

 string                                 comment;

};

 

 実際にこの関数を使って成り行き注文を発するとすれば、actionにはTRADE_ACTION_DEALpriceにはasktpには利確値を等々書き込まなくてはならない。待機注文を出す場合には、記入すべき項目も異なってくる。見ただけでプログラミングを諦めてしまう人も出てこよう。

 

 MT5側でもこのことは十分予想していて、その解決策として各種ライブラリを用意してincludeファイルに配置している。ライブラリとは平たく言えば、エクセルのマクロみたいなものだ。ライブラリを使えば、先ほどのOrderSend(reuest, result)が書けるようになっている。ところが、これらのライブラリの使いかたの説明が無いに等しいので、とても素人には対処できない。どれがどれに対応しているのか、構造体を初めて知る人にとっては、皆目わからない。

 

 MT4/MT5の日本での草分けでもある豊嶋久道教授にとっても思いは同様だったようで、2013年には教授開発の統合ライブラリが発表された。そして201712月には最新のMT5にも対応したライブラリLibEA.mqhを公開され、ここにMT5MT4同様の快適さで利用することが可能となったのである。このライブラリ、実はMT4にも対応している。より正確には、MT4を学びつつ実はMT5にも対応していたというのが教授の配慮でもあった。

 

 LibEA.mqhトレード関数のマクロ的仕組みを述べてみよう。

中心となる関数は、MyOrderSend()であり、これはMT4OrderSend()と酷似しているので違和感がない。成り行き注文の場合、

MyOrderSend()命令が出ると、OrderSendMarket()が呼び出されここでOrderSend(request, result)の各構成要素(メンバー)に必要な数値等が計算、その結果をOrderSend(request, result)に代入して同関数を送りだすという仕組みである。違和感のないMyOrderSend()を書くことだけで、複雑なOrderSend(request, result)に繫げているのである。

 

 ライブラリの仕組みを理解するには少し時間が必要だが、先ずはプログラムにチャレンジしてみることだ。MT4と同じ感覚でプログラミングができるように工夫されている。構造体の仕組みを理解している必要もない。MT4の理解があれば十分に対応できる。

ライブラリの詳しい使いかたは、http://forex.toyolab.com/を参照されたい。

 

 もう一つの難解さは組込みテクニカル指標(含むiCustom)にもあったが、この点もLibEA.mqhで解決された。次回で取り上げたい。